MySQL主从恢复数据

一、全量同步

由于一些原因导致从库与主库的数据不同步,可以重新全量同步主从的数据

1.锁表并吧内存中的数据保存到binlog中

FLUSH TABLES WITH READ LOCK;

SHOW MASTER STATUS;

image.png

2.导出数据

bin/mysqldump  --single-transaction --master-data=2 -uroot -p123456  --all-databases > dbdump_20190128.sql

3.从库恢复数据

停止slave

stop slave;

source /root/dbdump_20190128.sql

4主从同步

(a)同步数据

change master to master_user='root',\
master_password='123456',\
master_host='172.23.6.96',\
master_log_file='mysql-bin.000002',\
master_log_pos=2254981;

(b)启动slave

start slave;

(c)master机器解锁表

UNLOCK TABLES;


说明:

master_log_file为mysql-bin.000002

master_log_pos为2450399

start slave;


mysqldump参数说明:

mysqldump:mysql导出工具

--socket、-u、-p、-h:指定mysql的sock文件、用户名、密码、主机地址

--single-transaction:保证一个事务中所有相同的查询读取到同样的数据,其他innodb引擎的线程修改了表的数据并提交,对该dump线程的数据并无影响,不会锁表

--master-data=2:对于生成的sql文件产生备份时刻的mysql-bion的信息和pos信息

--all-databases:备份全库  

 

方法2:使用直接拷贝方式(速度快)

1.锁表,查看master信息

FLUSH TABLES WITH READ LOCK;

SHOW MASTER STATUS;

2.停止slave

stop slave;

3.备份data目录

cp -r data/ data_bak

4.清空数据库文件夹或mv到其他目录

mv 库名 ../databases/

......

5.直接复制主库到slave机器

scp 库名 ip:/home/hadoop/mysql/data

......

6.重新同步数据

change master to master_user='root',\
master_password='123456',\
master_host='172.23.6.96',\
master_log_file='mysql-bin.000002',\
master_log_pos=2254981;

7.启动slave并查看状态

start slave;

show slave status \G;

image.png

二、slave同步错误恢复

主从同步时slave出现语句错误导致同步停止

image.png

从库缺少deviceuser表导致同步时 执行错误

解决方法:对主从数据要求不高,可以允许少量数据不同步的情况下可以使用一下方法

步骤:

1.flush tables enterpriseuser.deviceuser for export;

2.master机器执行mysqldump命令导出该表的数据

3.slave机器创建该表,并导入master导出的数据

4.执行set global sql_slave_skip_counter =1; 跳过错误语句

说明:该值1需要根据需要修改成相应的数值

修改参考方法:

通过show slave status \G;查看错误代码 Last_Errno=1812

在mysql.err中搜索改代码的个数,搜索范围在该错误发生的时间段范围内

5.执行start slave; 启动slave

6.执行show slave status \G;查看状态

 

posted @ 2021-06-15 15:46  会飞的鹅  阅读(427)  评论(0编辑  收藏  举报