web-dev-qa-db-ja.com

binlogファイルが存在するというMySQLからの矛盾したレポート

最近、レプリケーションが機能しなくなりました。質問を送信しましたが、問題の修正に失敗しました( エラー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が実際に「最初のログファイル名を見つける」ことができることを確認するために他に何をチェックする必要がありますか?

1
rinogo

結局のところ、問題は、古い(間違った)マスターに接続していたことでした。以前のマスターはdomain.comでしたが、何ヶ月も前にdb.domain.comに移行しました。誤ってdomain.comに接続していたようです。

autosshを使用して、レプリケーション用のSSHトンネルを設定しています。古い(間違った)マスターに接続していることを確認するために、スレーブでtelnet 127.0.0.1:3305を実行しました。このことから、報告されたMySQLのバージョンが古いマスターのバージョンと一致していることがわかりました。スレーブを完全に再起動しましたが、問題は解決したようです。問題の原因は、ネットワーク上のDNSの癖が原因である可能性が高いと思います。autossh接続が確立されたときに、db.domain.comdomain.comに解決されたため、間違った接続の症状が発生したようです。主人。 (確かに、私たちのネットワーク上のこれらのDNSの問題は調査するものです)

注:元の質問に対する回答を寄せてくれた@Andrewに大いに感謝します: https://dba.stackexchange.com/a/140259/555

0
rinogo