本文使用RockyLinux8.x系统,基于GTID的传统异步方式来做MySQL主从同步,本文中所使用的MySQL版本为8.4.5,请确保主从服务器时间一致性,防火墙相应的规则已配置。理论适用于其他RHEL8.x兼容版系统。理论适用于国产Anolis8.x、OpenCloudOS8.x系统。
因为MySQL版本不同,有些命令做了一些改变,如
1、从MySQL8.0.22开始SHOW REPLICA STATUS\G替代了之前的SHOW SLAVE STATUS\G
2、MySQL 8.0.23开始使用以下命令
1 |
CHANGE REPLICATION SOURCE TO SOURCE_HOST='10.10.10.100',SOURCE_USER='zhu',SOURCE_PASSWORD='123456',SOURCE_AUTO_POSITION = 1; |
参见:https://dev.mysql.com/doc/refman/8.0/en/change-replication-source-to.html
MySQL 8.0.23之前的版本中,使用以下命令
1 |
CHANGE MASTER TO MASTER_HOST='10.10.10.100',MASTER_USER='zhu',MASTER_PASSWORD='123456',MASTER_AUTO_POSITION = 1; |
参见:https://dev.mysql.com/doc/refman/8.0/en/change-master-to.html
3、从MySQL8.0.26开始使用log_replica_updates,在MySQL8.0.26之前的版本中使用log_slave_updates等等。
MySQL主(SOURCE)配置,主服务器IP:10.10.10.100
1、添加wlnmp和epel源
1 2 |
dnf install epel-release -y curl -fsSL "https://sh.wlnmp.com/wlnmp.sh" | bash |
2、安装MySQL8.4
1 |
dnf install wmysql84 -y |
3、配置my.cnf文件
通过MySQL my.cnf配置文件生成器生成配置文件:https://dbcnf.wlnmp.com/,选择MySQL版本,按需选择CPU、内存,GTID一致性必须为ON,其他如果不了解,保持默认即可。
注1:以下几个my.cnf值,需等于ON
gtid_mode = ON
enforce_gtid_consistency = ON
log_replica_updates = ON
4、创建数据库whsir以及测试表(作为演示用)
注意wlnmp一键安装包安装的MySQL密码为空
1 2 3 4 5 6 |
/etc/init.d/mysql start mysql -uroot -p mysql> CREATE DATABASE whsir; mysql> USE whsir; mysql> CREATE TABLE wh_tb1(id int,name varchar(30)); mysql> CREATE TABLE wh_tb2(id int,name varchar(30)); |
5、继续创建用户并授权从库可以读取日志文件
1 2 3 |
mysql> CREATE USER 'zhu'@'%' IDENTIFIED BY '123456'; mysql> GRANT REPLICATION SLAVE ON *.* TO 'zhu'@'%'; mysql> FLUSH PRIVILEGES; |
6、备份库
1 |
mysqldump --all-databases --source-data=2 --single-transaction --set-gtid-purged=ON --triggers --routines --events -u root -p > source_backup.sql |
参数解释
--all-databases:备份所有数据库,如果只需要特定库,请替换为--databases db1。
--source-data=2:这个选项用于在输出文件中包含二进制日志坐标信息,二进制日志坐标信息是主从复制中用于同步的关键信息,这里数字“2”表示包含二进制日志文件名和位置。
--single-transaction:该选项确保在备份时使用事务,这样可以保证备份的一致性,它为InnoDB表创建一致性快照,而不会锁定整个数据库。
--set-gtid-purged=ON:让从库知道‘主库在备份时已执行到哪些GTID,后续通过SOURCE_AUTO_POSITION=1自动从下一个GTID 开始同步,确保覆盖备份后的所有新事务。
7、备份库拷贝至从库上
把备份好的库拷贝到从库,你可以scp传过去,也可下载到本地再传到从库上,此处不做过多说明。
8、为了演示效果继续创建一个测试表
1 2 3 |
mysql -uroot -p mysql> USE whsir; mysql> CREATE TABLE wh_tb3(id int,name varchar(30)); |
至此主库配置完毕。
MySQL从(REPLICA)配置,从服务器IP:10.10.10.101
1、连通性验证
为了确保主库的账户配置正确以及主从服务器的连通性,我们在从服务器上连接下主的库,确保可以正常连通,再进行下一步
1 |
mysql -uzhu -p123456 -h10.10.10.100 |
2、添加wlnmp和epel源
1 2 |
dnf install epel-release -y curl -fsSL "https://sh.wlnmp.com/wlnmp.sh" | bash |
3、安装MySQL8.4
1 |
dnf install wmysql84 -y |
4、配置my.cnf文件
通过MySQL my.cnf配置文件生成器生成配置文件:https://dbcnf.wlnmp.com/,选择MySQL版本,按需选择CPU、内存,GTID一致性必须为ON,其他如果不了解,保持默认即可。
注1:以下几个my.cnf值,需等于ON,并且server_id的值要大于主库的值。
server_id = 101
gtid_mode = ON
enforce_gtid_consistency = ON
log_replica_updates = ON
5、重启服务导入备份
1 2 |
/etc/init.d/mysql restart mysql -uroot -p < source_backup.sql |
如果报错ERROR 3546 (HY000) at line 26: @@GLOBAL.GTID_PURGED cannot be changed: the added gtid set must not overlap with @@GLOBAL.GTID_EXECUTE
则登录MySQL数据库执行以下语句
RESET BINARY LOGS AND GTIDS;
然后再次重新导入
mysql -uroot -p < source_backup.sql
6、执行复制
1 2 |
mysql -uroot -p mysql> CHANGE REPLICATION SOURCE TO SOURCE_HOST='10.10.10.100',SOURCE_USER='zhu',SOURCE_PASSWORD='123456',SOURCE_AUTO_POSITION = 1; |
注1:SOURCE_AUTO_POSITION = 1告诉从库使用GTID自动定位主库的二进制日志位置,无需手动指定MASTER_LOG_FILE和MASTER_LOG_POS。
7、启动复制
1 |
mysql> START REPLICA; |
稍等片刻即可看到,在主库导出后创建的wh_tb2表,也同步过来了。
注1:RESET REPLICA:重置复制状态(比如清除错误、中继日志等),保留主库连接信息(适用于重新开始复制到同一个主库)。
注2:RESET REPLICA ALL:重置复制状态并清除所有主库连接信息(适用于解除复制关系或重新配置到新主库)。
8、查看复制状态
1 |
mysql> SHOW REPLICA STATUS\G |
注1:这里结尾无需使用分号,如果使用分号会在查询后的结尾看到ERROR: No query specified提示,但这并不是真正的错误,所以在使用\G的时候无需追加";"。
注2:重点关注复制状态中以下几个参数值
Slave_IO_Running和Slave_SQL_Running必须都为Yes表示复制正常运行。
Last_IO_Error和Last_SQL_Error显示最近发生的I/O线程和SQL线程错误,该值为空表示没有错误。
Seconds_Behind_Source从库落后主库的秒数。0表示完全同步,如果该值过大,可能表示从库性能问题或主库负载过高。在老版本的MySQL中使用的是Seconds_Behind_Master名称。
注3:查看主库复制状态使用SHOW BINARY LOG STATUS,小于等于8.0.22版本使用SHOW MASTER STATUS;
附:异步复制 vs 基于 GTID 的异步复制
异步复制 vs 基于GTID的异步复制 | ||
---|---|---|
特性 | 传统异步复制 | 基于GTID的异步复制 |
事务标识方式 | 二进制日志文件名 + 位置(如mysql-bin.000001:1234) | 全局唯一 GTID(如aaaaaaaa:1) |
故障恢复复杂度 | 高(需手动查找 binlog 位置) | 低(自动基于 GTID 定位) |
事务重复风险 | 高(手动指定位置易出错) | 低(GTID 确保唯一性) |
同步起点指定方式 | MASTER_LOG_FILE='...', MASTER_LOG_POS=... | SOURCE_AUTO_POSITION = 1 |
主从切换效率 | 慢(人工干预多) | 快(自动同步) |
原文链接:基于wlnmp一键安装包做MySQL8.4主从(GTID传统异步),转载请注明来源!