MySQL主从恢复数据
一、全量同步
由于一些原因导致从库与主库的数据不同步,可以重新全量同步主从的数据
1.锁表并吧内存中的数据保存到binlog中
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;
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;
二、slave同步错误恢复
主从同步时slave出现语句错误导致同步停止
从库缺少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;查看状态