MySQL5.7.43 GTID主从复制配置

MySQL5.7.43 GTID主从复制配置
Eucalyptus**[
**[重启MySQL后
引言
为什么需要主从复制
- 在业务复杂的系统中,有这么一个情景,有一句sql语句需要锁表,导致暂时不能使用读的服务,那么就很影响运行中的业务,使用主从复制,让主库负责写,从库负责读,这样,即使主库出现了锁表的情景,通过读从库也可以保证业务的正常运作。
- 做数据的热备
- 架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的频率,提高单个机器的I/O性能。
什么是主从复制
MySQL 主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。MySQL 默认采用异步复制方式,这样从节点不用一直访问主服务器来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制主数据库中的所有数据库或者特定的数据库,或者特定的表。
主从复制原理
- 在主库上把数据更改(DDL DML DCL)记录到二进制日志(Binary Log)中。
- 备库I/O线程将主库上的日志复制到自己的中继日志(Re’lay Log)中。
- 备库SQL线程读取中继日志的事件,将其重放到备库的数据库上。
主从复制方式,M是master主库,S是slave从库
- M-S
- M-M
- M-S-S
- M-M-S-S
接下来文章中主要介绍的是M-S GTID ,除了M-M-S-S和其他复制方式的时候有点区别,其他的的复制方式大同小异
GTID是一个基于原始mysql服务器生成的一个已经被成功执行的全局事务ID,它由服务器ID以及事务ID组合而成。这个全局事务ID不仅仅在原始服务器器上唯一,在所有存在主从关系 的mysql服务器上也是唯一的。正是因为这样一个特性使得mysql的主从复制变得更加简单,以及数据库一致性更可靠。
GTID复制模式原理参考文章:MySQL 基于GTID复制模式-运维小结 (完整篇)
环境配置
- 准备好2台在Centos7中安装了MySQL 5.7.43的操作系统
- 2台操作系统提前关闭防火墙和SElinux
- 提前配置好/etc/hosts文件
- 修改Centos7的主机名
参考文章
- MySQL的安装Linux中MySQL的安装 - Eucalyptus
- 防火墙的管理防火墙的管理 - Eucalyptus
- hosts文件配置Linux中设置主机名和hosts映射 - Eucalyptus
- Centos7主机名的修改Linux中设置主机名和hosts映射 - Eucalyptus
主库 master1 配置
设置主库主配置文件
1 | vim /etc/my.cnf |
重启MySQL
1 | systemctl restart mysqld |
1 | mysql -uroot -p'密码' |
创建用户和授权并刷新
这里的授权语句在MySQL5和MySQL8不同版本中会有变化,大家根据自己的MySQL版本选择正确的sql语句去授权
1 | create user 'rep' '192.168.159.%' identified by '密码'; |
从库 slave2 配置
测试master1是否可以连接
1 | mysql -hmaster1 -urep -p'123456' |
连接失败的话可能是防火墙和selinux没有关闭,关闭后重新连接
设置从库主配置文件
1 | vim /etc/my.cnf |
重启MySQL
1 | systemctl restart mysqld |
重启MySQL后
1 | systemctl restart mysqld |
删除从库日志
1 | reset slave all; |
配置连接主库
当然通常在完成change master to命令初始化后是复制配置是自动管理的,会有自动恢复复制机制。在开源的低版本的MySQL中,从服务器在启动时,会检查
master.info用于存储复制配置 和relay-log.info用于存储当前的复制状态 文件。如果此前配置过主从复制,并且还未执行RESET SLAVE,从服务器就会根据这些信息自动尝试恢复复制。但是在高版本的MySQL中例如MySQL8.0.36中,主从复制的状态信息默认存储在两个系统表中,而不再是之前版本里的文件
master.info和relay-log.info。这两个系统表分别是:
slave_master_info: 用于存储有关主服务器的连接信息。这些信息通常会在执行了
CHANGE MASTER TO命令以定义主服务器的连接参数后被填写到此表中。slave_relay_log_info: 存储从服务器当前复制状态的信息,包括当前正在应用的relay日志文件的名称和位置。
1
2
3
4
5
6 `-- 查询有关主服务器连接的信息
SELECT * FROM mysql.slave_master_info;
-- 查询有关当前从服务器复制状态的信息
SELECT * FROM mysql.slave_relay_log_info;
`重要的是,这些表是内部维护的,通常你不需要直接操作或修改它们,因为这可能会导致复制的配置和状态不一致。如果复制出现问题,MySQL 提供了包括
SHOW SLAVE STATUS在内的多个诊断命令,以及用于修复和配置复制环境的CHANGE MASTER TO、START SLAVE、STOP SLAVE等命令。另外,了解存储复制信息对预防灾难发生是很重要的,这意味着如果你要迁移或备份从服务器的状态,你也需要考虑备份
mysql数据库中的这些表。不过一般情况下,全数据库备份 例如使用mysqldump --all-databases会包含mysql数据库和相应的系统表。
1 | change master to |
启动slave和查看slave
1 | start slave; |
1 | Replica_IO_State: Waiting for source to send event # 复制状态:等待主库发送事件 |
验证主从复制
总结
- 主库和从库的主配置文件中2个server-id “不同的数字“
- 做主从架构的时候若是使用克隆虚拟机需要在/var/lib/mysql/auto.cnf下面修改uuid,在MySQL中查看uuid show variables like ‘%server_uuid%’;
- MySQL数据库的版本不同也会有问题,MySQL 8 的版本安全性相对较高,在做主从复制的时候要去修改一个表的数据,这里就不作过多介绍了
- Centos7的防火墙和SELinux一定要关闭
更多关于MySQL主从复制的教程可以去从看看这篇文章MySQL主从复制保姆级教程







