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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...