【MySQL】Got fatal error 1236原因和解決方法
一 前言
MySQL 的主從複製作為一項高可用特性,用於將主庫的資料同步到從庫,在維護主從複製資料庫叢集的時候,作為專職的MySQL DBA,筆者相信大多數人都會遇到“Got fatal error 1236 from master when reading data from binary log” 這類的報錯/報警。本文整理了常見的幾種 error 1236 報錯,並給出相應的解決方法,有所不足之處,當然也希望各位讀者朋友指正。
二 常見的error 1236 報錯
2.1 logevent超過max_allowed_packet 大小
【原因】
此類報錯和max_allowed_packet相關。首先max_allowed_packet控制著主從複製過程中,一個語句產生的二進位制binlog event大小,它的值必須是1024的倍數 。出現此類錯誤的常見原因是
1 該引數在主備庫的配置大小不一樣,主庫的配置值大於從庫的配置值。 從主庫傳遞到備庫的binlog event大小超過了主庫或者備庫的max_allowed_packet大小。
2 主庫有大量資料寫入時,比如在主庫上執行 laod data,insert into .... select 語句,產生大事務。
當主庫向從庫傳遞一個比從庫的max_allowed_packet 大的packet ,從庫接收該packet失敗,並報 “log event entry exceeded max_allowed_packet“。
【如何解決】
需要確保主備配置一樣,然後嘗試調大該引數的值。
另外,5.6 版本中的 slave_max_allowed_packet_size 引數控制slave 可以接收的最大的packet 大小,該值通常大於而且可以覆蓋 max_allowed_packet 的配置, 進而減少由於上面的問題導致主從複製中斷。
2.2 slave 在主庫找不到binlog檔案
【原因】
該錯誤發生在從庫的io程式從主庫拉取日誌時,發現主庫的mysql_bin.index檔案中第一個檔案不存在。出現此類報錯可能是由於你的slave 由於某種原因停止了好長一段是時間,當你重啟slave 複製的時候,在主庫上找不到相應的binlog ,會報此類錯誤。或者是由於某些設定主庫上的binlog被刪除了,導致從庫獲取不到對應的binglog file。
【如何解決】
1 為了避免資料丟失,需要重新搭建slave 。
2 注意主庫binlog的清理策略,選擇基於時間過期的刪除方式還是基於空間利用率的刪除方式。
不要使用rm -fr 命令刪除binlog file,這樣不會同步修改mysql_bin.index 記錄的binlog 條目。在刪除binlog的時候確保主庫保留了從庫 show slave status 的Relay_Master_Log_File對應的binlog file。
2.3 主庫空間問題,日誌被截斷
【原因】
該錯誤和主庫的空間問題和sync_binlog配置有關,當主庫 sync_binlog=N不等於1且磁碟空間滿時,MySQL每寫N次binary log,系統才會同步到磁碟,但是由於儲存日誌的磁碟空間滿而導致MySQL 沒有將日誌完全寫入磁碟,binlog event被截斷。slave 讀取該binlog file時就會報錯"binlog truncated in the middle of event;"
當sync_binlog 的預設值是0,像作業系統刷其他檔案的機制一樣,MySQL不會同步到磁碟中去而是依賴作業系統來重新整理binary log。
當sync_binlog =N (N>0) ,MySQL 在每寫 N次 二進位制日誌binary log時,會使用fdatasync()函式將它的寫二進位制日誌binary log同步到磁碟中去。
【如何解決】
在從庫重新指向到主庫下一個可用的binlog file 並且從binlog file初始化的位置開始
2.4 主庫異常斷電,從庫讀取錯誤的position
【原因】
該問題也是和sync_binlog=N不等於1有關,多出現在主機異常crash ,比如磁碟損壞,raid 卡損壞,或者主機異常掉電導致binlog 未及時同步到磁碟。從庫讀取了主庫binlog file中的不存在的binlog position ,一般比binlogfile 的end position 的值還要大。
【如何解決】
1 在從庫重新指向到主庫下一個可用的binlog file 並且從binlog file初始化的位置開始
2 主備庫設定 sync_binlog=1,但是設定為1的時候,會帶來效能下降。
三 相關閱讀
1 max_allowed_packet 官方介紹
2 Percona MySQL的特性 max_binlog_files
3 sync_binlog innodb_flush_log_at_trx_commit 淺析
MySQL 的主從複製作為一項高可用特性,用於將主庫的資料同步到從庫,在維護主從複製資料庫叢集的時候,作為專職的MySQL DBA,筆者相信大多數人都會遇到“Got fatal error 1236 from master when reading data from binary log” 這類的報錯/報警。本文整理了常見的幾種 error 1236 報錯,並給出相應的解決方法,有所不足之處,當然也希望各位讀者朋友指正。
二 常見的error 1236 報錯
2.1 logevent超過max_allowed_packet 大小
- Got fatal error 1236 from master when reading data from binary log: 'log event entry exceeded max_allowed_packet; Increase max_allowed_packet on master; the start event position from 'mysql-bin.006730' at 290066246, the last event was read from '/u01/my3309/log/mysql-bin.006730
此類報錯和max_allowed_packet相關。首先max_allowed_packet控制著主從複製過程中,一個語句產生的二進位制binlog event大小,它的值必須是1024的倍數 。出現此類錯誤的常見原因是
1 該引數在主備庫的配置大小不一樣,主庫的配置值大於從庫的配置值。 從主庫傳遞到備庫的binlog event大小超過了主庫或者備庫的max_allowed_packet大小。
2 主庫有大量資料寫入時,比如在主庫上執行 laod data,insert into .... select 語句,產生大事務。
當主庫向從庫傳遞一個比從庫的max_allowed_packet 大的packet ,從庫接收該packet失敗,並報 “log event entry exceeded max_allowed_packet“。
【如何解決】
需要確保主備配置一樣,然後嘗試調大該引數的值。
-
set global max_allowed_packet =1*1024*1024*1024;
-
stop slave;
- start slave
2.2 slave 在主庫找不到binlog檔案
- Got fatal error 1236 from master when reading data from binary log:
該錯誤發生在從庫的io程式從主庫拉取日誌時,發現主庫的mysql_bin.index檔案中第一個檔案不存在。出現此類報錯可能是由於你的slave 由於某種原因停止了好長一段是時間,當你重啟slave 複製的時候,在主庫上找不到相應的binlog ,會報此類錯誤。或者是由於某些設定主庫上的binlog被刪除了,導致從庫獲取不到對應的binglog file。
【如何解決】
1 為了避免資料丟失,需要重新搭建slave 。
2 注意主庫binlog的清理策略,選擇基於時間過期的刪除方式還是基於空間利用率的刪除方式。
不要使用rm -fr 命令刪除binlog file,這樣不會同步修改mysql_bin.index 記錄的binlog 條目。在刪除binlog的時候確保主庫保留了從庫 show slave status 的Relay_Master_Log_File對應的binlog file。
2.3 主庫空間問題,日誌被截斷
- Got fatal error 1236 from master when reading data from binary log: 'binlog truncated in the middle of event; consider out of disk space on master; the start event position from 'mysql-bin.006730' at 290066434, the last event was read from '/u01/my3309/log/mysql-bin.006730
該錯誤和主庫的空間問題和sync_binlog配置有關,當主庫 sync_binlog=N不等於1且磁碟空間滿時,MySQL每寫N次binary log,系統才會同步到磁碟,但是由於儲存日誌的磁碟空間滿而導致MySQL 沒有將日誌完全寫入磁碟,binlog event被截斷。slave 讀取該binlog file時就會報錯"binlog truncated in the middle of event;"
當sync_binlog 的預設值是0,像作業系統刷其他檔案的機制一樣,MySQL不會同步到磁碟中去而是依賴作業系統來重新整理binary log。
當sync_binlog =N (N>0) ,MySQL 在每寫 N次 二進位制日誌binary log時,會使用fdatasync()函式將它的寫二進位制日誌binary log同步到磁碟中去。
【如何解決】
在從庫重新指向到主庫下一個可用的binlog file 並且從binlog file初始化的位置開始
-
stop slave;
-
change master to master_log_file='mysql-bin.006731', master_log_pos=4;
- start slave;
-
120611 20:39:38 [ERROR] Error reading packet from server: Client requested master to start replication from impossible position ( server_errno=1236)
-
120611 20:39:38 [ERROR] Slave I/O: Got fatal error 1236 from master when reading data from binary log: 'Client requested master to start replication from impossible position', Error_code: 1236
- 120611 20:39:38 [Note] Slave I/O thread exiting, read up to log 'mysql-bin.000143', position 664526789
該問題也是和sync_binlog=N不等於1有關,多出現在主機異常crash ,比如磁碟損壞,raid 卡損壞,或者主機異常掉電導致binlog 未及時同步到磁碟。從庫讀取了主庫binlog file中的不存在的binlog position ,一般比binlogfile 的end position 的值還要大。
【如何解決】
1 在從庫重新指向到主庫下一個可用的binlog file 並且從binlog file初始化的位置開始
-
stop slave;
-
change master to master_log_file='mysql-bin.000144', master_log_pos=4;
- start slave;
三 相關閱讀
1 max_allowed_packet 官方介紹
2 Percona MySQL的特性 max_binlog_files
3 sync_binlog innodb_flush_log_at_trx_commit 淺析
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22664653/viewspace-1714269/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Last_IO_Error: Got fatal error 1236ASTErrorGo
- mysql主從同步失敗Last_IO_Error: Got fatal error 1236 from master解決方法MySql主從同步ASTErrorGo
- 【Mysql】Slave_IO_Running: No---Got fatal error 1236 from masterMySqlGoErrorAST
- 【MySql】MySQL Replication Fatal Error 1236MySqlError
- MySQL Replication Fatal Error 1236MySqlError
- MySQL案例09:Last_IO_Error: Got fatal error 1236 from master when reading data from binary logMySqlASTErrorGo
- MySQL主從複製報錯:Got fatal error 1236 from master when reading data fromMySqlGoErrorAST
- MySQL複製環境Slave報錯"Got fatal error 1236 from master when reading data"MySqlGoErrorAST
- Percona MySQL 5.6 主主複製環境報錯"Got fatal error 1236 from master.."MySqlGoErrorAST
- Got fatal error 1236 from master when reading data from binary logGoErrorAST
- Got error 28 from storage engine 解決方法GoError
- MySQL資料庫1236錯誤模擬和解決MySql資料庫
- 造成跨域的原因和解決方法跨域
- 引起索引失效的原因和解決方法索引
- 粘包問題原因和解決方法
- MySQL ERROR Got an error reading communication packetsMySqlErrorGo
- 路由不定時丟包原因和解決方法路由
- MySQL主從同步報error 1236MySql主從同步Error
- MySQL斷電,出現 Error 1236MySqlError
- ld.so.1: oracle: fatal: relocation error解決方法OracleError
- 主庫異常當機---從庫複製報fatal error 1236Error
- FATAL ERROR: Could not find ./bin/my_print_defaults 解決方法Error
- CentOS 7 "線纜被拔出"的原因和解決方法CentOS
- ora-371錯誤的原因和解決方法
- Ubuntu下 fatal error: Python.h: No such file or directory 解決方法UbuntuErrorPython
- Nginx502錯誤原因和解決方法總結Nginx
- IE不能上網瀏覽的常見原因和解決方法
- mysqldump Got error: 1045MySqlGoError
- 帝國CMS更新時提示Fatal error: Allowed memory size of的解決方法Error
- FATAL - Fatal error: Target Interaction Manager failed at StartupErrorAI
- mysql的ERROR 1231 (42000)問題原因及解決方法MySqlError
- 華納雲 :網站頁面訪問不了的原因和解決方法網站
- 華納雲內部伺服器500錯誤原因和解決方法伺服器
- 【知識分享】伺服器ping不通的原因和解決方法伺服器
- 深度學習中“過擬合”的產生原因和解決方法深度學習
- 硬碟資料丟失原因和解決方案/資料恢復方法硬碟資料恢復
- PRKC-1002錯誤問題原因和解決方法
- Mysql報錯Fatal error:Can't open and lock privilege tablesMySqlError