mysql主從同步產生的 Error_code = 1062 或 1032問題
阿新 • • 發佈:2019-02-19
mysql主從同步導致1062和1032問題
事情起因
不知道為什麼mysql的資料庫所在磁碟空間滿了。導致主從出現數據不一致。可是我並不知道是空間滿了引起的,各種辦法使用了,mysql卻停不了。登陸mysql也沒辦執行命令。然後就
```
kill -9 mysql's pid
```
結果就悲劇了。mysql的主從被破壞。(這個是時候才想起來看一下磁碟空間問題,已經晚了)想了很多方式,還是沒辦法解決。最後決定重新做一下從庫。進入主題。
==友情提示:千萬不要 kill -9 誰用誰知道==
下面是我操作的具體步驟
- 拉取主庫的備份檔案。恢復從庫資料。
- 設定從庫的binlog日誌和pos點。
- 啟動重複,開啟複製。
悲劇開始
主從出現問題,輸入:show slave status \G; 這個時候出現了Error_code: 1062的錯誤。附上當時的主從的狀態和錯誤日誌。
Slave_IO_Running: Yes Slave_SQL_Running: No
2016-06-09 00:07:07 23352 [ERROR] Error reading packet from server: Lost connection to MySQL server during query ( server_errno=2013) 2016-06-09 00:07:07 23352 [Note] Slave I/O thread killed while
解決方式:在my.cnf檔案中加入如下程式碼到[mysqld]。重啟mysql
slave-skip-errors = 1062
- 執行完第一步。由於資料問題,又出現了。Error_code: 1032錯誤。
解決方式:在my.cnf檔案中加入如下程式碼到[mysqld]。重啟mysql
```
slave-skip-errors = 1062,1032
```
如果能預估到錯誤資料比較少。也可以用如下程式碼。每次執行只跳過一個事務。
```
stop slave;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1 ;
start slave ;
```
可能出現的問題
跳過1062和1032錯誤 。可能會導致日誌中出現警告資訊。所以在在my.cnf檔案中加入如下程式碼到[mysqld]。重啟mysql可解決問題。
```
binlog_format=mixed
```
反思問題起因
- 在從庫由於使用了 kill -9 殺掉了mysql執行緒。可能導致了mysql的事務回滾。也有可能導致了mysql中繼日誌出現問題。
- 在拉取備份檔案恢復的時候。由於拉取了最新的備份資料。恢復資料的時候。只是重設了同步的binlog檔案和pos點。並沒有修改中繼日誌的起點。導致了中繼日誌中的資料應該是比資料庫中的備份點資料更早了。然後產生了1062主鍵衝突和1032刪除資料不存在的錯誤。
以上類容純屬猜想,並未真正驗證,如有理解錯誤,歡迎大家指正,謝謝!