mysql 主从 锁表_mysql锁表与不锁表设置主从复制的方法

当MySQL主从同步出现严重不一致时,可以通过锁表或不锁表的方式进行手动同步。锁表方法包括:1. 主库锁表;2. 备份数据;3. 解锁主库;4. 获取binlog信息;5. 数据传输到从库;6. 从库停止同步;7. 导入数据;8. 设置从库同步起点。不锁表方法则省略锁表步骤,通过`mysqldump`命令的特定参数实现一致性快照并自动记录binlog信息。
摘要由CSDN通过智能技术生成

有时候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 [email protected]:/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 statusG 查看:

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就好可以了。

原文:https://www.cnblogs.com/xyhero/p/9343747.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值