最近、レプリケーションが機能しなくなりました。質問を送信しましたが、問題の修正に失敗しました( エラー1236-「バイナリログインデックスファイルで最初のログファイル名が見つかりませんでした」 )。質問で説明されているイベントが発生してから、マスターでRESET MASTER
を実行し、スレーブでRESET SLAVE
を実行して、新しいフルダンプを作成しましたが、それでも同じ結果が得られます。
エラーメッセージ自体の詳細を攻撃して、一歩下がって別のアプローチを試してみようと思いました。
スレーブで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が実際に「最初のログファイル名を見つける」ことができることを確認するために他に何をチェックする必要がありますか?
結局のところ、問題は、古い(間違った)マスターに接続していたことでした。以前のマスターはdomain.com
でしたが、何ヶ月も前にdb.domain.com
に移行しました。誤ってdomain.com
に接続していたようです。
autossh
を使用して、レプリケーション用のSSHトンネルを設定しています。古い(間違った)マスターに接続していることを確認するために、スレーブでtelnet 127.0.0.1:3305
を実行しました。このことから、報告されたMySQLのバージョンが古いマスターのバージョンと一致していることがわかりました。スレーブを完全に再起動しましたが、問題は解決したようです。問題の原因は、ネットワーク上のDNSの癖が原因である可能性が高いと思います。autossh接続が確立されたときに、db.domain.com
がdomain.com
に解決されたため、間違った接続の症状が発生したようです。主人。 (確かに、私たちのネットワーク上のこれらのDNSの問題は調査するものです)
注:元の質問に対する回答を寄せてくれた@Andrewに大いに感謝します: https://dba.stackexchange.com/a/140259/555