mysql 重新主从复制
1.先进入主库,进行锁表,防止数据写入
mysql> flush tables with read lock;
2.进行数据备份
/usr/local/mysql/bin/mysqldump -uroot -p --quick --routines --master-data=2 --single-transaction -A > test.sql
--quick, -q # 不缓冲查询,直接导出到标准输出。默认为打开状态,使用--skip-quick取消该选项。
--routines, -R # 导出存储过程以及自定义函数。
--master-data # 该选项将binlog的位置和文件名追加到输出文件中。如果为1,将会输出CHANGE MASTER 命令;如果为2,输出的CHANGE MASTER命令前添加注释信息。该选项将打开--lock-all-tables 选项,除非--single-transaction也被指定(在这种情况下,全局读锁在开始导出时获得很短的时间;其他内容参考下面的--single-transaction选项)。该选项自动关闭--lock-tables选项。
--single-transaction # 该选项在导出数据之前提交一个BEGIN SQL语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于多版本存储引擎,仅InnoDB。本选项和--lock-tables 选项是互斥的,因为LOCK TABLES 会使任何挂起的事务隐含提交。要想导出大表的话,应结合使用--quick 选项。
3.查看MASTER_LOG_POS
# grep "CHANGE MASTER TO MASTER_LOG_FILE" test.sql
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000010', MASTER_LOG_POS=179567203 ;
4.停止从库
mysql> stop slave;
5.从库还原数据
mysql> source test.sql;
6.从新设置主从同步
reset slave all;
CHANGE MASTER TO MASTER_HOST='172.16.2.216',MASTER_USER='repl',MASTER_PASSWORD='123456',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.000010', MASTER_LOG_POS=179567203;
7.从新开启主从同步
mysql> start slave;
8.查看主从同步状态
mysql> show slave status\G
9.主库解除锁
mysql> UNLOCK TABLES;