1. 程式人生 > >生產環境主從數據同步不了?

生產環境主從數據同步不了?

table chan def 備份 狀態 root global 習慣 single

生產環境主從數據同步不了?

經歷過程:

一般我們常常在做主從復制的時候,可能是很少遇到到錯誤,那都是因為,你做主從基本用的是,本地虛擬機做,或者一些測試環境做。但是當我們把主從復制部署到生成環境就出問題了,生成環境的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、總結

數據同步不了,一定有它的原因,出現問題別急,先要養成看錯誤日誌的習慣,再慢慢找解問題的思路。


生產環境主從數據同步不了?