生产环境主从数据同步不了?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了生产环境主从数据同步不了?相关的知识,希望对你有一定的参考价值。
生产环境主从数据同步不了?经历过程:
一般我们常常在做主从复制的时候,可能是很少遇到到错误,那都是因为,你做主从基本用的是,本地虚拟机做,或者一些测试环境做。但是当我们把主从复制部署到生成环境就出问题了,生成环境的mysql一般不允许重启mysql服务,除非你有特殊情况,否则你要小心哦。在我的公司里面,当我把整个主从复制部署到生成环境上,当我以为也是跟测试环境的部署一样简单,可是没有想到的是,当我部署完后,我查看一下从服务的slave状态,Slave_IO_Running,和Slave_SQL_Running已经都为yes了,很开心的就想到主从复制配置已经成功,然后去到master上,刷新了一下日志,再回到从服务器上查看一下slave状态,讨厌Slave_SQL_Running状态已经为no了,这个我第一时间回到master把master再show出来,然后回到slave再同步一下,第二次重复后,查看了日志出现了以下错误:
Last_SQL_Error: Error 'Table 'test.qmonitor_heartbeat' doesn't exist' on query. Default database: ''. Query: 'update test.qmonitor_heartbeat set heartbeat = now() where id = 8'
错误分析:
这个问题我们,我就第一时间就想到是master的数据库,跟slave的数据库不同步造成的,因为我之前就已经把GLOBAL SQL_SLAVE_SKIP_COUNTER设置为1了,已经允许slave跳过一个同步不了的错误了;因为是生产环境,数据是不停的写入的,所以数据库的Position是不停的在改变的,所要重新做数据同步,是比较难的,所以,自己就跟别人申请了一下时间,重新做了数据同步......。
不多说了,从新做主从方法如下:
1.进入主库,为了防止防止数据写入,我把锁表锁了,
mysql>flush tables with read lock;
2.master上重新把数据做全备
#mysqldump -uroot -p123456 --single-transaction -R --triggers -E --master-data --flush-logs --all-databases > databases.sql
注意:数据库备份一定要定期进行,这个你可以参考我写的 数据库定时备份脚本
3.主库查看master 状态
mysql> show master status; +---------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +---------------------+----------+--------------+------------------+-------------------+ | mysql_binlog.000013 | 116624 | | | | +---------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec)
4.把databases.sql备份文件传到从库上,然后进行数据恢复,如果你之前有其它跟主库一样的数据库,请把它给删了
#scp databases.sql [email protected]:/tmp/
5.在从库上进行数据恢复,这个要保证你的slave的状态是stop才行。
mysql> source /tmp/databases.sql
6.从库同步,查看master的状态,两边对应了再同步;
mysql>CHANGE MASTER TO MASTER_HOST='192.168.1.100',MASTER_USER='rsync',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql_binlog.000013',MASTER_LOG_POS=116624;
7.slave上重新开启从同步
mysql> start slave;
8、查看slave的同步状态,可以发现 Slave_IO_Running,Slave_SQL_Running都为Yes了
mysql> show slave status\G Slave_IO_Running: Yes Slave_SQL_Running: Yes
到这里就已经数据同步好了
9、解锁,测试是否能同步
在master上解锁
mysql>unlock tables;
mysql> flush logs; ##刷新日志
在slave上,查看一下slave的状态,就可以发现slave的状态,所连接的日志编号已经发生改变了,重新同步成功。
10、总结
数据同步不了,一定有它的原因,出现问题别急,先要养成看错误日志的习惯,再慢慢找解问题的思路。
以上是关于生产环境主从数据同步不了?的主要内容,如果未能解决你的问题,请参考以下文章