MySQL不锁库主从复制恢复

/ Database / 没有评论 / 1552浏览

本来的步骤(主从断开之后)

主库锁库

FLUSH TABLES WITH READ LOCK;

线上数据库数据提取

mysqldump -uroot -p  --default-character-set=utf8 -P3306 --opt     --single-transaction  zyd1   > /home/666.sql

开始迁移数据到从库(scp传送过去)

scp /home/666.sql  root@172.18.252.145:/home/mysqlbak/

新库删除之前的数据(看情况,有时候直接覆盖掉就可以)

mysql -uroot -p
drop database zyd1;
create database zyd1;

从库停掉主从连接

#登录到数据库;
stop slave;    #关闭slave
reset slave;

从库开始导入主库传送过来的文件

mysql -uroot -p zyd1 < *.sql 

主库查看现在的binlog文件和位置(找出File和Position)

show master status; 

从库开始主从账号连接(灵活使用~~~~~~)

CHANGE MASTER TO
MASTER_HOST='172.18.252.146',
MASTER_USER='slave',
MASTER_PASSWORD='111111',
MASTER_LOG_FILE='mysql-bin.000077',
MASTER_LOG_POS=807343661;

开启从库slave

start slave;

查看从库主从状态

show slave status \G;

主库解锁

UNLOCK TABLES;

后来新玩法

** ** *** 不锁库手动主从连接 ** *** ** *

--skip-lock-tables     #不锁表
--master-data=2        #在导出的时候同时生成binlog文件名和位置在导出的文件开头。这个很重要。因此第4步也不需要执行了,binlog的文件和位置可以从这里拿到。
--single-transaction   #通过将导出操作封装在一个事务内来使得导出的数据是一个一致性快照

用这些参数~~~~~

mysqldump  -uroot -p --skip-lock-tables --single-transaction --flush-logs --hex-blob --master-data=2   dataname   > /home/666.sql

最后把主从连接配置那里binlog文件和位置替换成导出的文件开头找到的那个带有注释的file和position就好了。

  1. 线上数据库数据提取
mysqldump -uroot -p  --default-character-set=utf8 -P3306 --opt     --single-transaction  zyd1   > /home/666.sql
  1. 开始迁移数据到从库(scp传送过去)
scp /home/666.sql  root@172.18.252.145:/home/mysqlbak/
  1. 新库删除之前的数据(看情况,有时候直接覆盖掉就可以)
mysql -uroot -p
drop database zyd1;
create database zyd1;
  1. 从库停掉主从连接
# 登录到数据库;
stop slave;
reset slave;
  1. 从库开始导入主库传送过来的文件
mysql -uroot -p zyd1 < *.sql 
  1. 找出file和position
head -30 导出文件
  1. 从库开始主从账号连接(灵活使用~~~~~~)
CHANGE MASTER TO
MASTER_HOST='172.18.252.146',
MASTER_USER='slave',
MASTER_PASSWORD='111111',
MASTER_LOG_FILE='mysql-bin.000081',
MASTER_LOG_POS=154;
  1. 开启从库slave
start slave;
  1. 查看从库主从状态
show slave status \G;

End