MySQL案例09:Last_IO_Error: Got fatal error 1236 from master when reading data from binary log

来源:https://www.cnblogs.com/rangle/archive/2018/08/03/9414264.html
-Advertisement-
Play Games

剛處理完“挖礦”事件,在做最後一個MySQL NBU備份的時候,發現從庫有問題,好奇的是怎麼主從狀態異常沒有告警呢?先不管這麼多了,處理了這個問題再完善告警內容。 一、錯誤信息 從庫show slave status \G看到的錯誤信息如下: 二、錯誤原因 這裡看到從庫的io_thread已經終止, ...


剛處理完“挖礦”事件,在做最後一個MySQL NBU備份的時候,發現從庫有問題,好奇的是怎麼主從狀態異常沒有告警呢?先不管這麼多了,處理了這個問題再完善告警內容。

一、錯誤信息

從庫show slave status \G看到的錯誤信息如下:

Slave_IO_Running: No
Slave_SQL_Running: Yes
Last_IO_Errno: 1236
Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Client requested master to start replication from impossible position; the first event 'mysql-bin.000081' at 480141113, the last event read from './mysql-bin.000081' at 4, the last byte read from './mysql-bin.000081' at 4.'

二、錯誤原因

這裡看到從庫的io_thread已經終止,錯誤編號是1236,具體是由於讀取主庫的binlog日誌位置(the first event 'mysql-bin.000081' at 480141113, the last event read from './mysql-bin.000081' at 4)不對導致主從失敗建立失敗。

三、解決方案

1.檢查從庫狀態以及讀取、執行的binlog信息

mysql> show slave status \G
*************************** 1. row ***************************
               Slave_IO_State: 
                  Master_Host: xx.xx.xx.xx
                  Master_User: username
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000081
          Read_Master_Log_Pos: 480141113
               Relay_Log_File: mysql9017-relay-bin.000163
                Relay_Log_Pos: 480141259
        Relay_Master_Log_File: mysql-bin.000081
             Slave_IO_Running: No
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 480141113
              Relay_Log_Space: 480141462
              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: 1236
                Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Client requested master to start replication from impossible position; the first event 'mysql-bin.000081' at 480141113, the last event read from './mysql-bin.000081' at 4, the last byte read from './mysql-bin.000081' at 4.'
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 17
1 row in set (0.00 sec)

2.查看主庫的binlog內容

[backup]# mysqlbinlog  mysql-bin.000081 >mysql-bin.log

看到主庫binlog日誌mysql-bin.000081最大的pos為480140557,但從庫要讀取的是'mysql-bin.000081' at 480141113,顯然從庫要讀的pos值比主庫本身存在的pos值大,導致讀取不到,進而失敗。

可通過下麵語句查看binlog的pos信息和日誌內容
mysql> show binlog events in  'mysql-bin.000081' from 480140557 limit 10;       
Empty set (0.04 sec)
3.更改從庫的同步位置,完成數據重新同步

 主庫:

mysqlbinlog  mysql-bin.000082  |more

從庫:

change master to master_host='xx.xx.xx.xx',master_user='username',master_port=3306,master_password='password',master_log_file='mysql-bin.000082',master_log_pos=4;

start slave;

show slave status \G

主從同步正常

4.主庫參數改進

 導致這個原因很大程度上是由於主從在同步的過程中,主庫異常斷電,導致記憶體數據傳輸到從庫但沒有提交到binlog日誌,即主庫 sync_binlog設置可能有問題,在主庫檢查參數設置:

mysql> show global variables like '%sync_binlog%';                       
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| sync_binlog   | 0     |
+---------------+-------+
1 row in set (0.00 sec)

果然其值是 0,不主動同步binlog cache的數據到磁碟,而依賴操作系統本身不定期把文件內容 flush 到磁碟。設為 1 最安全,在每個語句或事務後同步一次 binary log,即使在崩潰時也最多丟失一個語句或事務的日誌,但因此也最慢。這裡設置為0,斷電的情況下導致binlog cache數據丟失沒有寫入主庫的binlog,但binlog信息已同步至從庫。這種情況容易導致主從數據不一致,所以即使恢復主從數據後,依舊要通過主從數據對比校驗數據的一致性。

mysql> set global sync_binlog=1;
Query OK, 0 rows affected (0.00 sec)

更改配置文件my.cnf設置sync_binlog=1

5.主從數據校驗

 pt-table-checksum h=master_ipaddr,u=username,p='password',P=mysql_port --nocheck-binlog-format --recursion-method=hosts

pt-table-checksum h=master_ipaddr,u=username,p='password',P=mysql_port --nocheck-binlog-format --recursion-method=hosts  
Checking if all tables can be checksummed ...
Starting checksum ...
            TS ERRORS  DIFFS     ROWS  CHUNKS SKIPPED    TIME TABLE
08-03T17:49:29      0      0      595       1       0   0.186 user.hole

其中--recursion-method有幾種方式查看從庫信息,這裡採用的是hosts方式,需要在從庫加入如下參數,方可在主庫執行show slave hosts查看從庫的信息

report_host=slave_ip

 

report_port=slave_port

METHOD       USES
===========  =============================================
processlist  SHOW PROCESSLIST
hosts        SHOW SLAVE HOSTS
cluster      SHOW STATUS LIKE 'wsrep\_incoming\_addresses'
dsn=DSN      DSNs from a table
none         Do not find slaves

 

6.innodb_flush_log_at_trx_commit參數擴展

innodb_flush_log_at_trx_commit 參數指定了 InnoDB 在事務提交後的日誌寫入頻率。這麼說其實並不嚴謹,且看其不同取值的意義和表現。

    當 innodb_flush_log_at_trx_commit 取值為 0 的時候,log buffer 會 每秒寫入到日誌文件並刷寫(flush)到磁碟。但每次事務提交不會有任何影響,也就是 log buffer 的刷寫操作和事務提交操作沒有關係。在這種情況下,MySQL性能最好,但如果 mysqld 進程崩潰,通常會導致最後 1s 的日誌丟失。
    當取值為 1 時,每次事務提交時,log buffer 會被寫入到日誌文件並刷寫到磁碟。這也是預設值。這是最安全的配置,但由於每次事務都需要進行磁碟I/O,所以也最慢。
    當取值為 2 時,每次事務提交會寫入日誌文件,但並不會立即刷寫到磁碟,日誌文件會每秒刷寫一次到磁碟。這時如果 mysqld 進程崩潰,由於日誌已經寫入到系統緩存,所以並不會丟失數據;在操作系統崩潰的情況下,通常會導致最後 1s 的日誌丟失。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • mysql登陸不上或者密碼忘記可以嘗試一下無密碼登陸 以下一波神操作!! 首先關閉資料庫服務(資料庫在Centos7版本以上或者Redhat版本上被改名為mariadb) systemctl stop mariadb 跳過密碼驗證(& 將該進程放到後臺運行)mysqld_safe --skip-gr ...
  • 訪問網站時出現如下錯誤,如下圖: 檢查php fastcgi進程數,如下圖: 輸出0則表示fastcgi進程數夠大,修改scgi_params文件,如下圖: 然後重啟php-fpm和nginx,重新訪問即可正常訪問。 ...
  • 這期就安裝與Ubantu、Linux Mint差不多的系統,但是這個Debian系統的話,它安裝時卻有些不一樣,什麼不一樣,我們接下來看看吧! 安裝Debian系統 系統下載 Debian 9.5下載地址:https://www.debian.org/ PE裝系統(簡單文字敘述) 1.首先分區時記得 ...
  • windows 操作系統可以使用 win+R 運行一些命令執行任務,好處是:高效、快速、準確。 啟動程式 將程式 chrome 寫入以下註冊表中, 運行 chrome 就可以快速啟動 chrome 了。 定位文件位置 1、直接運行 目錄地址 就可以定位到目錄: 2、運行 explorer.exe / ...
  • 小課堂之hbase命令的簡單操作 1、創建一張表 create 表名,列族名 create 't0','cf01' --把單引號去掉? undefined local variable or method `t02' for 在hbase shell當中使用字元串時,需要註意,要加上引號 是否可以使 ...
  • 占座 ...
  • MySQL安裝完成以後,基本操作有:1.創建資料庫 2.刪除資料庫 3.修改資料庫 1.創建資料庫 在MySQL中,創建資料庫的命令為 create database 資料庫名; 其中可在資料庫名前添加 if not exists,表示不重覆創建同名資料庫。 2.刪除資料庫 在已有的資料庫中可選擇一 ...
  • 該文章是基於 Hadoop2.7.6_01_部署 、 Hive-1.2.1_01_安裝部署 進行的 1. 前言 在一個完整的大數據處理系統中,除了hdfs+mapreduce+hive組成分析系統的核心之外,還需要數據採集、結果數據導出、任務調度等不可或缺的輔助系統,而這些輔助工具在hadoop生態 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...