实践出真知,有些细节,记录下。
本文不涉及主备知识,有需右转: https://blog.csdn.net/qq_26834611/article/details/121385550
mysql 正确的dump 命令:
0. 检查当前主库所在位置
ip addr 查看虚拟ip所在位置
1. 备机数据库dump备份:
mysqldump -uroot --dump-slave=2 --single-transaction --databases db1 db2 -p > 指定位置/xxx.sql
2. 主机数据库dump备份:
mysqldump -uroot --master-data=2 --single-transaction --databases db1 db2 -p > 指定位置/xxx.sql
3. 主机的dump数据 导入到 备机数据库
备机执行:
stop slave;
mysql -uroot -p < 指定位置/xxx.sql
4.
备机:
stop slave; (上一步执行了,则无需再次执行)
找到master对应的pos信息:(如果master host没有丢失,仅处理pos位置即可) 从dump文件中找到binlog文件与pos
(dump时 --master-data=2 会以注释的形式记录到导出文件)
change master to master_log_file='binlog.000001',
master_log_pos=862;
start slave;
5. 验证:
show slave status\G
查看如下两者为YES,且无其他报错信息,即正常
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
着重解释下:
主库: dump时 --master-data=2 会以注释的形式记录到导出文件,即使主机仍然在写,但是我们已经知道
导出时确切的binlog文件以及位置了。导入到备机后,可以直接执行。
如:
从库执行时,使用--dump-slave=2 作用和上面一样的。只是角色为slave时,对应的状态是slave status