MySQL 手动主从同步不锁表

举报
互联网老辛 发表于 2021/06/08 22:51:03 2021/06/08
【摘要】 有时候MySQL主从同步不一致比较严重的时候,需要手动同步。 先说说在锁表的情况下如何操作:以下是其简要过程:  1.先对主库锁表 FLUSH TABLES WITH READ LOCK; 2.备份数据 mysqldump -uroot -p -hlocalhost > mysql.bak.sql 3.解锁主库 unlock tables;...

有时候MySQL主从同步不一致比较严重的时候,需要手动同步。

先说说在锁表的情况下如何操作:
以下是其简要过程: 

1.先对主库锁表

FLUSH TABLES WITH READ LOCK;

2.备份数据

mysqldump -uroot -p -hlocalhost > mysql.bak.sql

3.解锁主库

unlock tables;

4.查看主库的binlog文件和位置

show master status; 找出File和Position

5.使用scp命令把文件移动到从库

scp mysql.bak.sql root@192.168.128.101:/tmp/

6.在从库上停止同步

mysql> stop slave;

7.导入数据

mysql> source /tmp/mysql.bak.sql

8.设置从库的同步开始文件和开始位置

change master to master_host = '主库主机', master_user = '同步用户名', master_port=3306, master_password='', master_log_file = '第3步中获取的file', master_log_pos=第3步中获取的position;

9.从库上启动同步并检查

mysql> start slave;

mysql> show slave status\G  查看:

 

Slave_IO_Running: Yes

Slave_SQL_Running: Yes、
 

 不锁表的方法:

 

大致是不需要执行第1和第3步,在第2导出数据的时候加上参数

mysqldump --skip-lock-tables --single-transaction --flush-logs --hex-blob --master-data=2 -A

 

--skip-lock-tables 不锁表

--master-data=2 在导出的时候同时生成binlog文件名和位置在导出的文件开头。这个很重要。因此第4步也不需要执行了,binlog的文件和位置可以从这里拿到。

--single-transaction 通过将导出操作封装在一个事务内来使得导出的数据是一个一致性快照

最后把第8步的binlog文件和位置替换成导出的文件开头找到的那个带有注释的file和position就好可以了。

文章来源: zmedu.blog.csdn.net,作者:互联网老辛,版权归原作者所有,如需转载,请联系作者。

原文链接:zmedu.blog.csdn.net/article/details/103259465

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。