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

                                                   生產環境主從數據同步不了?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的狀態,所鏈接的日誌編號已經發生改變了,從新同步成功。

十、總結

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

相關文章
相關標籤/搜索