GTID 会自动比对已执行的事务集,自动定位从哪里开始同步
配置my.cnf
[mysqld] server-id=1 # 必须唯一,多台服务器之间必须不一样 log-bin=mysql-bin # 启用二进制日志 binlog-format=ROW # 推荐使用ROW格式 innodb_flush_log_at_trx_commit=1 # 确保事务安全 sync_binlog=1 # 每次事务提交都同步二进制日志 #忽略下面的系统表 replicate-ignore-db=mysql replicate-ignore-db=information_schema replicate-ignore-db=performance_schema replicate-ignore-db=sys mysql_native_password=ON # MySQL8.4默认密码模式需要SSL非常麻烦 #下面三个参数是开启gtid_mode gtid_mode=ON log-replica-updates=ON enforce-gtid-consistency=ON #下面2个参数, 防止自增主键冲突导致 GTID崩溃 auto_increment_increment = 2 auto_increment_offset = 1 #步长 另一台设为 2改配置之后需要重启服务器 sudo systemctl restart mysqld, 不重启mysql_native_password不生效后面的账号创建不了
创建用于主从复制的账号
两边建立一样的名字密码, 方便不搞错
其中mysql_native_password 可以不使用SSL, 配SSL比较麻烦
CREATE USER 'replicator'@'%' IDENTIFIED WITH mysql_native_password BY '换成你的密码'; GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%'; FLUSH PRIVILEGES;启动复制
1库配2库的信息, 2库配1库的信息
CHANGE REPLICATION SOURCE TO SOURCE_HOST='A库配B_IP B库配A_IP', SOURCE_USER='replicator', SOURCE_PASSWORD='你的密码', SOURCE_SSL=0, SOURCE_AUTO_POSITION=1; START REPLICA;检查复制是否成功
SHOW REPLICA STATUS;
关注:
Replica_IO_Running: Yes
Replica_SQL_Running: Yes
Retrieved_Gtid_Set:
Executed_Gtid_Set:
验证配置
- 在 Server1 上创建表或插入数据,检查是否同步到 Server2
- 在 Server2 上修改数据,检查是否同步回 Server1
- 关掉一台服务器, 在一台服务器里写数据, 关掉的启动后也会自动同步关机期间数据
通过以上步骤,成功配置了 MySQL 双主复制
下面介绍一台机器坏掉了如何恢复
如果是一台新的机器, MYSQL需要先根据前面的配置, 配置好环境和账号
⚠️生产环境建议在低峰期执行
⚠️新的备份库建议删除所有数据库之后再重建
⚠️删除库的时候, 千万不要处于互为备份状态, 否则删掉一个另一个也删了
取消备份:STOP REPLICA;
导出主库数据(全量备份)
mysqldump
mysqldump -u root -p \ -h 192.168.1.100 \ --single-transaction \ --routines \ --events \ --set-gtid-purged=ON \ --all-databases > full_backup.sql导入主库数据到新的数据库
mysql -u root -p < full_backup.sql接下来根据文章前面内容, 重建备份即可