Mysql数据库实现主从同步,看这一篇就够了

环境介绍: centos 7.5
 MySQL 5.7.29
 Mysql主服务器:192.168.2.128
 Mysql从服务器:192.168.2.129
Mysql主从同步原理: 当master服务器上的数据发生改变时(增、删、改),则将其改变写入二进制binlog日志中;slave服务器会在一定时间间隔内对master二进制日志进行探测其是否发生改变,如果发生改变,则开启一个I/O 线程请求master二进制事件,同时主节点为每个I/O线程启动一个dump线程,用于向其发送二进制事件,并保存至从库本地的中继日志中,从库(从节点)将启动SQL线程从中继日志中读取二进制日志,在本地重放,使得其数据和主节点的保持一致,最后IO线程和SQL线程将进入睡眠状态,等待下一次被唤醒 。
注意几点:
 1.master将操作语句记录到binlog日志中,然后授予slave远程连接的权限(master一定要开启binlog二进制日志功能;通常为了数据安全考虑,slave也开启binlog功能) 。
 2.slave开启两个线程:IO线程和SQL线程 。其中:IO线程负责读取master的binlog内容到中继日志relay log里;SQL线程负责从relay log日志里读出binlog内容,并更新到slave的数据库里,这样就能保证slave数据和 master数据保持一致了 。
 3.Mysql主从复制至少需要两个Mysql的服务,当然Mysql服务可以分布在不同的服务器上,也可以在一台服务器上启动多个服务 。
 4.Mysql主从复制最好确保master和slave服务器上的Mysql版本相同(如果不能满足版本一致,那么要保证master主节点的版本低于slave从节点的版本)
 5.master和slave两节点间时间需同步 。

Mysql数据库实现主从同步,看这一篇就够了

文章插图
 
如上图所示:
 
  Mysql复制过程的第一部分就是master记录二进制日志 。在每个事务更新数据完成之前,master在二日志记录这些改变 。MySQL将事务串行的写入二进制日志,即使事务中的语句都是交叉执行的 。在事件写入二进制日志完成后,master通知存储引擎提交事务 。
  第二部分就是slave将master的binary log拷贝到它自己的中继日志 。首先,slave开始一个工作线程——I/O线程 。I/O线程在master上打开一个普通的连接,然后开始binlog dump process 。Binlog dump process从master的二进制日志中读取事件,如果已经跟上master,它会睡眠并等待master产生新的事件 。I/O线程将这些事件写入中继日志 。
  SQL slave thread(SQL从线程)处理该过程的最后一步 。SQL线程从中继日志读取事件,并重放其中的事件而更新slave的数据,使其与master中的数据一致 。只要该线程与I/O线程保持一致,中继日志通常会位于OS的缓存中,所以中继日志的开销很小 。
  此外,在master中也有一个工作线程:和其它MySQL的连接一样,slave在master中打开一个连接也会使得master开始一个线程 。复制过程有一个很重要的限制——复制在slave上是串行化的,也就是说master上的并行更新操作不能在slave上并行操作 。
构建主从同步:主从同步介绍
  -实现数据自动同步的服务结构
  -主服务器: 接受客户端访问连接
  -从服务器: 自动同步主服务器数据
  • Master(主库)
      -启用binlog日志
  • Slave(从库)
      `-Slave_IO线程:复制master主机binlog日志文件里的SQL命令到本机的relay-log文件里 。`
      `-Slave_SQL线程:执行本机relay-log文件里的SQL语句,实现与Master数据一致 。`
构建思路
  • 配置主库
      -启用binlog日志、授权用户、查看 binlog日志信息
  • 配置从服务器
      -`确保与主服务器数据一致 。`
      -`设置server_id、指定主库信息、启动slave程序`
配置Mysql主服务器1.修改主配置文件
  -启用binlog日志并重启服务
[root@localhost ~]# vim /etc/my.cnf[mysqld]log-bin=db128      //启用binlog日志,指定日志名以db128开头server_id=128     //指定服务器ID号...[root@localhost ~]# systemctl restart mysqld[root@localhost ~]# ls /var/lib/mysql/db128.*/var/lib/mysql/db128.000001  /var/lib/mysql/db128.index2.授权用户
 -用户权限为 replication slave
 -用户名自定义
 -客户端地址允许从库连接
 -密码自定义
注意:
 replication slave权限代表: 允许slave主机通过此用户连接master以便建立主从复制关系 。


推荐阅读