环境介绍: 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复制过程的第一部分就是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程序`
-启用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.index
2.授权用户-用户权限为 replication slave
-用户名自定义
-客户端地址允许从库连接
-密码自定义
注意:
replication slave权限代表: 允许slave主机通过此用户连接master以便建立主从复制关系 。
推荐阅读
- 使用mysqld_exporter监控MySQL并展示数据
- Mysql:下载、安装、部署、修改密码步骤
- 搞定MySQL安装难安装贵问题
- 使用Python+Fabric实现Linux自动化操作
- 什么是链路追踪?分布式系统如何实现链路追踪?
- 高级语言中的语句在汇编中是如何实现的
- MySQL 中 InnoDB 和 MyISAM 的联系与区别
- 双活无共享数据库架构
- 如何实现HTTPS服务器
- ETL数据库迁移工具Kettle的安装配置详解