生產環境主從數據同步不了?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的狀態,所鏈接的日誌編號已經發生改變了,從新同步成功。
十、總結
數據同步不了,必定有它的緣由,出現問題別急,先要養成看錯誤日誌的習慣,再慢慢找解問題的思路。