這篇文章主要介紹了MySQL中Slave庫恢復的示例分析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
騰沖網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、APP開發(fā)、成都響應式網(wǎng)站建設等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)從2013年成立到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設就選創(chuàng)新互聯(lián)。
狀況描述:
登錄一個MySQL數(shù)據(jù)庫slave節(jié)點主機發(fā)現(xiàn)/var/lib/mysql下存放大量的mysql-relay-bin文件,最早的文件創(chuàng)建日期甚至是2018年,我記得在slave庫同步完master的日志操作記錄后,會刪除這些文件(默認設置不會刪除,我記錯了),于是便查看了slave庫的狀態(tài),發(fā)現(xiàn)如下報錯:
mysql> show slave status\G; *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: *.*.*.* Master_User: dbsync Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000095 Read_Master_Log_Pos: 869242147 Relay_Log_File: mysqld-relay-bin.000146 Relay_Log_Pos: 871280529 Relay_Master_Log_File: mysql-bin.000075 Slave_IO_Running: Yes Slave_SQL_Running: No Replicate_Do_DB: cdb,cdb_admin Replicate_Ignore_DB: mysql Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 1594 Last_Error: Relay log read failure: Could not parse relay log event entry. The possible reasons are: the master's binary log is corrupted (you can check this by running 'mysqlbinlog' on the binary log), the slave's relay log is corrupted (you can check this by running 'mysqlbinlog' on the relay log), a network problem, or a bug in the master's or slave's MySQL code. If you want to check the master's binary log or slave's relay log, you will be able to know their names by issuing 'SHOW SLAVE STATUS' on this slave. Skip_Counter: 0 Exec_Master_Log_Pos: 871280384 Relay_Log_Space: 19994786573 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: NULL Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 1594 Last_SQL_Error: Relay log read failure: Could not parse relay log event entry. The possible reasons are: the master's binary log is corrupted (you can check this by running 'mysqlbinlog' on the binary log), the slave's relay log is corrupted (you can check this by running 'mysqlbinlog' on the relay log), a network problem, or a bug in the master's or slave's MySQL code. If you want to check the master's binary log or slave's relay log, you will be able to know their names by issuing 'SHOW SLAVE STATUS' on this slave. 1 row in set (0.00 sec) ERROR: No query specified
原因:
我在master節(jié)點上刪除了名稱為mysql-bin.00007格式的文件,其中包括mysql-bin.000075,因此,slave庫找不到該文件,無法同步。
解決辦法:
1、在slave庫上重新指定同步位置。(不可行)
slave stop; CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000095',MASTER_LOG_POS=869242147; //mysql master節(jié)點上mysql-bin.000095的已有位置 slave start;
slave節(jié)點上show slave status,依然報錯,具體的報錯內容沒有復制下來,只記得errno為1236,Slave_IO_Running進程不運行,Slave_SQL_Running進程運行,大概描述就是某個庫的某個表有問題。
在多次嘗試指定不同的同步位置(報錯的位置,master上mysql-bin-000095剛寫過的位置)依然存在該錯誤。
實際上,表記錄已經(jīng)有問題,就拿描述中提出的那個表來說,slave庫存放了約1200條記錄,master庫則有1900+的記錄。除非手工將這些數(shù)據(jù)補上,否則由于記錄操作數(shù)據(jù)的日志已經(jīng)丟失(被我刪除),是找不到最近的一致的日志操作執(zhí)行位置的。
2、重做slave庫。
由于數(shù)據(jù)差異太大,而且我覺得不光一張表出現(xiàn)了數(shù)據(jù)不一樣的問題,所以干凈點,把從庫重做。
1)比對master、slave節(jié)點庫配置信息,保證一致。(我不知道為什么設置了雙主模式,實際上我只有一個實例跑在master節(jié)點上啊?)
2)在master、slave節(jié)點上查看流量情況(show processlist),保證要重做的slave庫上沒有業(yè)務的流量接入。
3)停止master節(jié)點上slave進程。(這個停了以后,我就沒開過,不知道有沒有問題,待觀察)
4)記錄master節(jié)點上庫的日志記錄位置,之后備份數(shù)據(jù)庫:
mysql> show master status; +------------------+-----------+-------------------------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+-----------+-------------------------------+------------------+ | mysql-bin.000095 | 871760173 | cdb,cdb_admin | mysql | +------------------+-----------+-------------------------------+------------------+ 1 row in set (0.01 sec) mysqldump -u root -p --databases cdb,cdb_admin > bak.master.sql
5)保險起見,備份slave節(jié)點庫:
mysqldump -u root -p --databases cdb,cdb_admin > bak.slave.sql
6)重做開始:把master庫備份文件復制到slave節(jié)點上,導入該備份文件
mysql -u root -p < bak.master.sql
7)在slave節(jié)點上,重新指定讀master日志的位置:
slave stop; CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000095',MASTER_LOG_POS=871760173; //POS為剛才記錄的master節(jié)點日志記錄位置 slave start;
8)slave節(jié)點上 show slave status;此時Slave_IO_Running,Slave_SQL_Running均運行起來了,刷新slave status,Read_Master_Log_Pos數(shù)值也開始增加,重新開始同步了。
感謝你能夠認真閱讀完這篇文章,希望小編分享的“MySQL中Slave庫恢復的示例分析”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關知識等著你來學習!
當前題目:MySQL中Slave庫恢復的示例分析
網(wǎng)站路徑:http://jinyejixie.com/article4/ijcgoe.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供服務器托管、、建站公司、網(wǎng)站建設、移動網(wǎng)站建設、全網(wǎng)營銷推廣
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)