Mysql

來自 MySQL 的相互矛盾的報告,即存在 binlog 文件

  • June 2, 2016

我們的複制最近停止工作。我送出了一個問題,但未能成功解決問題(錯誤 1236 - “在二進制日誌索引文件中找不到第一個日誌文件名”)。自從問題中描述的事件發生以來,我已經RESET MASTER在主伺服器上執行了 a RESET SLAVE,在從伺服器上執行了 a ,並創建了一個新的完整轉儲,但仍然得到相同的結果。

我想我會退後一步,嘗試採用不同的方法,攻擊錯誤消息本身的細節。

當我SHOW SLAVE STATUS在從機上執行時,它報告主機無法“找到第一個日誌文件名”:

Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'

“第一個日誌文件名”是/var/lib/mysql/mysql-bin.000001

root@master [905 13:30:56 /var/lib/mysql]# cat mysql-bin.index
/var/lib/mysql/mysql-bin.000001
/var/lib/mysql/mysql-bin.000002
/var/lib/mysql/mysql-bin.000003
/var/lib/mysql/mysql-bin.000004
/var/lib/mysql/mysql-bin.000005
/var/lib/mysql/mysql-bin.000006

MySQL 本身似乎知道這mysql-bin.000001是第一個二進制日誌:

MariaDB [(none)]> SHOW BINARY LOGS;
+------------------+------------+
| Log_name         | File_size  |
+------------------+------------+
| mysql-bin.000001 |      10421 |
| mysql-bin.000002 | 1073919628 |
| mysql-bin.000003 | 1074488806 |
| mysql-bin.000004 | 1073744707 |
| mysql-bin.000005 | 1074366770 |
| mysql-bin.000006 | 1069984818 |
+------------------+------------+
6 rows in set (0.00 sec)

mysqlbinlog表明該文件似乎是可訪問且有效的:

root@master [911 13:48:04 /var/lib/mysql]# mysqlbinlog /var/lib/mysql/mysql-bin.000001
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#160526 12:24:14 server id 5  end_log_pos 248   Start: binlog v 4, server v 10.0.21-MariaDB-log created 160526 12:24:14 at startup

MySQL 本身似乎也可以訪問第一個日誌文件:

MariaDB [(none)]> SHOW BINLOG EVENTS in 'mysql-bin.000001' from 0 limit 4;
+------------------+-----+-------------------+-----------+-------------+------------------------------------------------+
| Log_name         | Pos | Event_type        | Server_id | End_log_pos | Info                                           |
+------------------+-----+-------------------+-----------+-------------+------------------------------------------------+
| mysql-bin.000001 |   4 | Format_desc       |         5 |         248 | Server ver: 10.0.21-MariaDB-log, Binlog ver: 4 |
| mysql-bin.000001 | 248 | Gtid_list         |         5 |         273 | []                                             |
| mysql-bin.000001 | 273 | Binlog_checkpoint |         5 |         312 | mysql-bin.000001                               |
| mysql-bin.000001 | 312 | Gtid              |         5 |         350 | BEGIN GTID 0-5-1                               |
+------------------+-----+-------------------+-----------+-------------+------------------------------------------------+
4 rows in set (0.00 sec)

回顧一下,MySQL 抱怨它“在二進制日誌索引文件中找不到第一個日誌文件名”。但是,如上所示,MySQL 似乎確實知道“第一個日誌文件名”是什麼,並且確實可以訪問它。

我還應該檢查什麼以確保 MySQL 可以真正“找到$$ the $$第一個日誌文件名”?

事實證明,問題在於我們正在連接到一個舊的(錯誤的)master。以前的主人是domain.com,但幾個月前,我們遷移到了db.domain.com。似乎我們錯誤地連接到domain.com.

我們autossh用來為我們的複制設置 SSH 隧道。為了確認我們正在連接到舊的(錯誤的)主機,我telnet 127.0.0.1:3305在從機上執行。從這裡,我可以看到報告的 MySQL 版本與舊 master 的版本匹配。我完全重新啟動了從站,這似乎已經解決了這個問題。我認為問題的根源可能是由於我們網路上的一些 DNS 怪癖 - 似乎當建立 autossh 連接時,db.domain.com解析為domain.com,因此出現連接到錯誤主機的症狀。(當然,我們網路上的這些 DNS 問題值得研究)

注意:非常感謝@Andrew 對原始問題的回答:https ://dba.stackexchange.com/a/140259/55530

引用自:https://dba.stackexchange.com/questions/140158