MySQL数据库自身提供的主从复制功能可以方便的实现数据的多处自动备份,实现数据库的拓展。多个数据备份不仅可以加强数据的安全性,通过实现读写分离还能进一步提升数据库的负载性能。

下图就描述了一个多个数据库间主从复制与读写分离的模型(来源网络):

在一主多从的数据库体系中,多个从服务器采用异步的方式更新主数据库的变化,业务服务器在执行写或者相关修改数据库的操作是在主服务器上进行的,读操作则是在各从服务器上进行。如果配置了多个从服务器或者多个主服务器又涉及到相应的负载均衡问题,关于负载均衡具体的技术细节还没有研究过,今天就先简单的实现一主一从的主从复制功能。

Mysql主从复制的实现原理图大致如下(来源网络):

MySQL之间数据复制的基础是二进制日志文件(binary log file)。一台MySQL数据库一旦启用二进制日志后,其作为master,它的数据库中所有操作都会以“事件”的方式记录在二进制日志中,其他数据库作为slave通过一个I/O线程与主服务器保持通信,并监控master的二进制日志文件的变化,如果发现master二进制日志文件发生变化,则会把变化复制到自己的中继日志中,然后slave的一个SQL线程会把相关的“事件”执行到自己的数据库中,以此实现从数据库和主数据库的一致性,也就实现了主从复制。

实现MySQL主从复制需要进行的配置:主服务器:

开启二进制日志

配置唯一的server-id

获得master二进制日志文件名及位置

创建一个用于slave和master通信的用户账号

从服务器:

配置唯一的server-id使用master分配的用户账号读取master二进制日志

启用slave服务

具体实现过程如下:

一、准备工作:

1.主从数据库版本最好一致

2.主从数据库内数据保持一致

主数据库:182.92.172.80 /linux

从数据库:123.57.44.85 /linux

二、主数据库master修改:

1.修改mysql配置

找到主数据库的配置文件my.cnf(或者my.ini),我的在/etc/mysql/my.cnf,在[mysqld]部分插入如下两行:[mysqld]

log-bin=mysql-bin #开启二进制日志

server-id=1 #设置server-id

2.重启mysql,创建用于同步的用户账号

打开mysql会话shell>mysql -hlocalhost -uname -ppassword

创建用户并授权:用户:rel1密码:slavepassmysql> CREATE USER 'repl'@'123.57.44.85' IDENTIFIED BY 'slavepass';#创建用户

mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'123.57.44.85';#分配权限

mysql>flush privileges; #刷新权限

3.查看master状态,记录二进制文件名(mysql-bin.000003)和位置(73):mysql > SHOW MASTER STATUS;

+------------------+----------+--------------+------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin.000003 | 73 | test | manual,mysql |

+------------------+----------+--------------+------------------+

二、从服务器slave修改:

1.修改mysql配置

同样找到my.cnf配置文件,添加server-id[mysqld]

server-id=2 #设置server-id,必须唯一

2.重启mysql,打开mysql会话,执行同步SQL语句(需要主服务器主机名,登陆凭据,二进制文件的名称和位置):mysql> CHANGE MASTER TO

-> MASTER_HOST='182.92.172.80',

-> MASTER_USER='rep1',

-> MASTER_PASSWORD='slavepass',

-> MASTER_LOG_FILE='mysql-bin.000003',

-> MASTER_LOG_POS=73;

3.启动slave同步进程:mysql>start slave;

4.查看slave状态:

mysql> show slave status\G;

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 182.92.172.80

Master_User: rep1

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql-bin.000013

Read_Master_Log_Pos: 11662

Relay_Log_File: mysqld-relay-bin.000022

Relay_Log_Pos: 11765

Relay_Master_Log_File: mysql-bin.000013

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Replicate_Do_DB:

Replicate_Ignore_DB:

...

当Slave_IO_Running和Slave_SQL_Running都为YES的时候就表示主从同步设置成功了。接下来就可以进行一些验证了,比如在主master数据库的test数据库的一张表中插入一条数据,在slave的test库的相同数据表中查看是否有新增的数据即可验证主从复制功能是否有效,还可以关闭slave(mysql>stop slave;),然后再修改master,看slave是否也相应修改(停止slave后,master的修改不会同步到slave),就可以完成主从复制功能的验证了。

还可以用到的其他相关参数:

master开启二进制日志后默认记录所有库所有表的操作,可以通过配置来指定只记录指定的数据库甚至指定的表的操作,具体在mysql配置文件的[mysqld]可添加修改如下选项:

# 不同步哪些数据库

binlog-ignore-db = mysql

binlog-ignore-db = test

binlog-ignore-db = information_schema

# 只同步哪些数据库,除此之外,其他不同步

binlog-do-db = game

如之前查看master状态时就可以看到只记录了test库,忽略了manual和mysql库。

参考资料:

mysql主从同步slave_MySQL主从复制(Master-Slave)实践相关推荐

  1. mysql主从同步搭建和故障排除

    主从同步的定义:  是存储数据的一种结构模式. 主:被客户端访问的数据库服务器就是主库服务器master 从:连接主库服务器,自动同步主库的所有数据到本机slave 1.什么是mysql主从同步? 当 ...

  2. mysql主从同步机制

    mysql主从同步机制: master服务器将数据的改变记录二进制binlog日志,当master上的数据发生改变时,则将其改变写入二进制日志中: slave服务器会在一定时间间隔内对master二进 ...

  3. mysql 主从同步_Mysql主从同步的实现原理

    1.什么是mysql主从同步? 当master(主)库的数据发生变化的时候,变化会实时的同步到slave(从)库. 2.主从同步有什么好处? 水平扩展数据库的负载能力. 容错,高可用.Failover ...

  4. mysql主从同步报错Fatal error: The slave I/O thread stops because master and slave have equal MySQL server

    问题:在mysql主从同步的过程中检查主从同步状态时IO线程报错 Last_IO_Error: Fatal error: The slave I/O thread stops because mast ...

  5. mysql master 重置_[数据库]重置mysql主从同步(MySQL Reset Master

    [数据库]重置mysql主从同步(MySQL Reset Master 0 2012-09-13 16:00:09 在mysql主从同步的过程中,可能会因为各种原因出现主库与从库不同步的情况,网上虽然 ...

  6. 基于 Gtid 的 MySQL 主从同步实践

    点击下方公众号「关注」和「星标」 回复"1024"获取独家整理的学习资料! 前几天,有读者在后台留言问我可有基于Gtid的Mysql主从同步的文章,我记得历史文章应该有提及过,也有 ...

  7. mysql主从复制mmm_MMM+MYSQL主从同步

    1.安装mysql依赖包 2.安装mysql 3.修改配置文件DB1,DB2和DB3 BD3只需要修改 server-id  =3即可 4.配置同步 配置主DB1,从DB2和DB3 配置DB2主,DB ...

  8. mysql主从同步配置超详细_MySQL主从同步配置

    一. 理论部分 MySQL主从同步 主从同步使得数据可以从一个数据库服务器复制到其他的服务器上.在复制数据时,一个服务器充当主服务器(master),其余的服务器充当从服务器(slave). 因为复制 ...

  9. MySQL主从同步详解与配置

    https://zhuanlan.zhihu.com/p/335142300 MySQL主从同步详解与配置 第一部分[原理解析] * 应用背景* MySQL数据库自身提供的主从复制功能可以方便的实现数 ...

最新文章

  1. Elasticsearch之倒排索引
  2. 车载360度全景监视系统
  3. 【飞秋】OpenExpressApp对建模支持的初步计划
  4. HTML5 API详解(10):sessionStorage 你用过吗?
  5. Silverlight图片处理——(伸展,裁剪,蒙版)
  6. 基于Simulink的转速、电流双闭环直流调速系统的建模与仿真
  7. 豆瓣已玩烂,来爬点有逼格的 ——IMDB 电影提升你的品位
  8. Excel-DATEDIF函数计算两日期天数差
  9. python操作jira修改status及写入comment
  10. 【矩阵论】范数和矩阵函数(2)
  11. 九度OJ 1349 数字在排序数组中出现的次数 -- 二分查找
  12. 计算机控制ess和kv,自动控制理论第三章练习题
  13. vue生命周期(简短精干篇)
  14. AFM成像表面形貌和表面粗糙度
  15. java全jit编译_Javac编译与JIT编译
  16. 计算机f8键的功能,f8键有什么作用(图文)
  17. shell 脚本中常见的 if [ $? -ne 0 ]; 意思
  18. intent.setComponent()方法
  19. 不同系统之间数据对接方式
  20. 让Android的emulator支持web camera

热门文章

  1. d3 line example debug 2015-05-31
  2. CRM business roles and PFCG roles
  3. The data replication requires the processing of single BDoc instances
  4. step by step to download equipment via request download
  5. debug pricing calculation rfc call
  6. Navigation execution entry point
  7. 另一种方式实现事务码SE16里的结果集修改
  8. c++ websocket客户端_python测试开发django81.dwebsocket实现websocket
  9. 回溯和递归的区别(简述)
  10. eladmin代码自动生成_如何让 Mybatis 自动生成代码