生产环境主从数据同步不了?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的状态,所链接的日志编号已经发生改变了,从新同步成功。
十、总结
数据同步不了,必定有它的缘由,出现问题别急,先要养成看错误日志的习惯,再慢慢找解问题的思路。