MySQL 主从复制修复详解(无需锁表)
在某些生产环境中,锁表操作可能会导致服务中断或性能问题,因此需要一种无需锁表的方式来修复和重建 MySQL 主从复制关系。以下是一个更加严谨且不涉及锁表的 MySQL 主从修复步骤:
环境设定
-
主数据库(Master)
- IP地址:172.10.12.195
- 数据库账号:root
- 数据库密码:
xxxxxxx
(实际使用时请替换为真实密码)
-
从数据库(Slave)
- IP地址:172.10.12.200
- 数据库账号:root
- 数据库密码:
xxxxxxx
(实际使用时请替换为真实密码)
修复步骤
1. 获取主数据库的二进制日志位置信息
为了确保数据一致性,无需锁表,可以利用 --single-transaction
选项在不锁定表的情况下获取一致性的快照,并通过 --master-data
选项记录当前的二进制日志文件和位置。
在主数据库上执行以下命令导出数据:
mysqldump -u root -p --all-databases --single-transaction --master-data=1 > dump.sql
或导出指定数据库(如 saas_nacos
):
mysqldump -u root -p saas_nacos --single-transaction --master-data=1 > dump.sql
-
--single-transaction
:在事务中导出数据,适用于 InnoDB 表,确保数据一致性而无需锁表。 -
--master-data=1
:在dump.sql
文件中插入CHANGE MASTER
语句,记录当前的二进制日志文件和位置,如下示例:-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000849', MASTER_LOG_POS=1291053;
输入密码 xxxxxxx
以执行导出操作。
2. 将导出的数据传输到从数据库服务器
使用 scp
命令将 dump.sql
文件传输到从服务器:
scp -o HostKeyAlgorithms=+ssh-rsa dump.sql aaa@172.10.12.200:/tmp
aaa
是从数据库服务器的用户名,文件传输到/tmp
目录。
3. 在从数据库上导入数据
登录到从数据库服务器,并执行以下命令导入数据:
nohup mysql -u root -pxxxxxxx < /tmp/dump.sql > /