生產環境主從數據同步不了?
經歷過程:
一般我們常常在做主從復制的時候,可能是很少遇到到錯誤,那都是因為,你做主從基本用的是,本地虛擬機做,或者一些測試環境做。但是當我們把主從復制部署到生成環境就出問題了,生成環境的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 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;
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、總結
數據同步不了,一定有它的原因,出現問題別急,先要養成看錯誤日誌的習慣,再慢慢找解問題的思路。
生產環境主從數據同步不了?