首页 » Linux » 基于wlnmp一键安装包做MySQL8.4主从(GTID传统异步)

基于wlnmp一键安装包做MySQL8.4主从(GTID传统异步)

 

本文使用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开始使用以下命令

参见:https://dev.mysql.com/doc/refman/8.0/en/change-replication-source-to.html

MySQL 8.0.23之前的版本中,使用以下命令

参见: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源

2、安装MySQL8.4

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密码为空

5、继续创建用户并授权从库可以读取日志文件

6、备份库

参数解释

--all-databases:备份所有数据库,如果只需要特定库,请替换为--databases db1。
--source-data=2:这个选项用于在输出文件中包含二进制日志坐标信息,二进制日志坐标信息是主从复制中用于同步的关键信息,这里数字“2”表示包含二进制日志文件名和位置。
--single-transaction:该选项确保在备份时使用事务,这样可以保证备份的一致性,它为InnoDB表创建一致性快照,而不会锁定整个数据库。
--set-gtid-purged=ON:让从库知道‘主库在备份时已执行到哪些GTID,后续通过SOURCE_AUTO_POSITION=1自动从下一个GTID 开始同步,确保覆盖备份后的所有新事务。

7、备份库拷贝至从库上

把备份好的库拷贝到从库,你可以scp传过去,也可下载到本地再传到从库上,此处不做过多说明。

8、为了演示效果继续创建一个测试表

至此主库配置完毕。


MySQL从(REPLICA)配置,从服务器IP:10.10.10.101

1、连通性验证

为了确保主库的账户配置正确以及主从服务器的连通性,我们在从服务器上连接下主的库,确保可以正常连通,再进行下一步

2、添加wlnmp和epel源

3、安装MySQL8.4

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、重启服务导入备份

如果报错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:SOURCE_AUTO_POSITION = 1告诉从库使用GTID自动定位主库的二进制日志位置,无需手动指定MASTER_LOG_FILE和MASTER_LOG_POS。

7、启动复制

稍等片刻即可看到,在主库导出后创建的wh_tb2表,也同步过来了。

注1:RESET REPLICA:重置复制状态(比如清除错误、中继日志等),保留主库连接信息(适用于重新开始复制到同一个主库)。
注2:RESET REPLICA ALL:重置复制状态并清除所有主库连接信息(适用于解除复制关系或重新配置到新主库)。

8、查看复制状态

注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传统异步),转载请注明来源!

0