生产环境主从数据同步不了?

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、总结

   数据同步不了,一定有它的原因,出现问题别急,先要养成看错误日志的习惯,再慢慢找解问题的思路。


以上是关于生产环境主从数据同步不了?的主要内容,如果未能解决你的问题,请参考以下文章

生产环境配置mysql主从复制

mysql生产环境____主从同步修复案例

糟了,生产环境MySQL主从数据库不一致怎么办?

主从复制之神秘的表丢失

MySQL主从复制

MySQL 主从同步与分离