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

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

 经历过程:       sql

    通常咱们经常在作主从复制的时候,多是不多遇到到错误,那都是由于,你作主从基本用的是,本地虚拟机作,或者一些测试环境作。可是当咱们把主从复制部署到生成环境就出问题了,生成环境的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'bash

错误分析:服务器

    这个问题咱们,我就第一时间就想到是master的数据库,跟slave的数据库不一样步形成的,由于我以前就已经把GLOBAL SQL_SLAVE_SKIP_COUNTER设置为1了,已经容许slave跳过一个同步不了的错误了;由于是生产环境,数据是不停的写入的,因此数据库的Position是不停的在改变的,所要从新作数据同步,是比较难的,因此,本身就跟别人申请了一下时间,从新作了数据同步......。ide


很少说了,重新作主从方法以下: 测试

 

1.进入主库,为了防止防止数据写入,我把锁表锁了, spa

mysql>flush tables with read lock;

2.master上从新把数据作全备 日志

#mysqldump -uroot -p123456 --single-transaction -R --triggers -E --master-data --flush-logs --all-databases > databases.sql

注意:数据库备份必定要按期进行,这个你能够参考我写的 数据库定时备份脚本blog

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 root@mysqlslave:/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;

八、查看slave的同步状态,能够发现 Slave_IO_Running,Slave_SQL_Running都为Yes了

mysql>  show slave status\G
Slave_IO_Running: Yes 
Slave_SQL_Running: Yes

到这里就已经数据同步好了


九、解锁,测试是否能同步

在master上解锁

mysql>unlock tables;
mysql> flush logs;   ##刷新日志

在slave上,查看一下slave的状态,就能够发现slave的状态,所链接的日志编号已经发生改变了,从新同步成功。

十、总结

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

相关文章
相关标签/搜索