我们的设置:
直到最近,复制工作正常,此时必须从转储中恢复从属数据库。我执行了所有必要的步骤:转储主数据库,将转储传输到从数据库,删除旧数据库,执行转储以恢复数据库,执行适当的CHANGE MASTER命令,最后START SLAVE.
CHANGE MASTER
START SLAVE
我收到错误: Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'
Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'
从站需要从主站获取的第一个日志文件是mysql-bin.000289. 我可以看到这存在于主人身上:
mysql-bin.000289
我还可以看到 master 上的二进制日志索引似乎有这个日志文件的条目:
仍然无法复制 - 我不断收到同样的错误。我没有想法 - 接下来我应该检查什么?
更新:SHOW SLAVE STATUS\G按要求输出:
SHOW SLAVE STATUS\G
MariaDB [(none)]> SHOW SLAVE STATUS\G -------------- SHOW SLAVE STATUS -------------- *************************** 1. row *************************** Slave_IO_State: Master_Host: 127.0.0.1 Master_User: replication Master_Port: 1234 Connect_Retry: 60 Master_Log_File: mysql-bin.000289 Read_Master_Log_Pos: 342 Relay_Log_File: mysqld-relay-bin.000002 Relay_Log_Pos: 4 Relay_Master_Log_File: mysql-bin.000289 Slave_IO_Running: No Slave_SQL_Running: Yes Replicate_Do_DB: xxx_yyy,xxx_zzz 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: 342 Relay_Log_Space: 248 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: 'Could not find first log file name in binary log index file' Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 3 Master_SSL_Crl: Master_SSL_Crlpath: Using_Gtid: No Gtid_IO_Pos: 1 row in set (0.00 sec)
额外要求的信息:
root@master [818 18:54:22 /var/lib/mysql]# ls -l /var/lib/mysql/mysql-bin.000289 -rw-rw---- 1 mysql mysql 1074010194 May 19 03:28 /var/lib/mysql/mysql-bin.000289 root@master [819 18:54:29 /var/lib/mysql]# ls mysql-bin.00029* mysql-bin.000290 mysql-bin.000291 mysql-bin.000292 #(Yes, it was created) root@master [821 18:56:52 /var/lib/mysql]# mysql -uroot -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 6345382 Server version: 10.0.21-MariaDB-log MariaDB Server Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> SHOW BINARY LOGS; +------------------+------------+ | Log_name | File_size | +------------------+------------+ | mysql-bin.000279 | 1074114047 | | mysql-bin.000280 | 1074004090 | | mysql-bin.000281 | 1074035416 | | mysql-bin.000282 | 1073895128 | | mysql-bin.000283 | 1073742000 | | mysql-bin.000284 | 1074219591 | | mysql-bin.000285 | 1074184547 | | mysql-bin.000286 | 1074217812 | | mysql-bin.000287 | 1022733058 | | mysql-bin.000288 | 265069 | | mysql-bin.000289 | 1074010194 | | mysql-bin.000290 | 1074200346 | | mysql-bin.000291 | 617421886 | | mysql-bin.000292 | 265028 | +------------------+------------+ 14 rows in set (0.00 sec) MariaDB [(none)]> exit Bye root@master [821 18:57:24 /var/lib/mysql]# mysqlbinlog mysql-bin.000289 > /tmp/somefile.txt root@master [822 18:58:13 /var/lib/mysql]# tail /tmp/somefile.txt # at 1074010124 #160519 3:28:59 server id 5 end_log_pos 1074010151 Xid = 417608063 COMMIT/*!*/; # at 1074010151 #160519 3:28:59 server id 5 end_log_pos 1074010194 Rotate to mysql-bin.000290 pos: 4 DELIMITER ; # End of log file ROLLBACK /* added by mysqlbinlog */; /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/; /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/; root@master [823 18:58:31 /var/lib/mysql]#
/etc/my.cnf.d/server.cnf(摘抄):
/etc/my.cnf.d/server.cnf
# BINARY LOGGING # log-bin = /var/lib/mysql/mysql-bin expire-logs-days = 14 sync-binlog = 1
编辑:位置 342 似乎确实存在:
root@master [826 12:15:33 /var/lib/mysql]# grep "end_log_pos 342 " /tmp/somefile.txt #160517 14:43:13 server id 5 end_log_pos 342 Binlog checkpoint mysql-bin.000288
你似乎没有与你认为的主人建立联系。根据您在主服务器上的二进制日志,您似乎拥有:
#160519 3:28:59服务器 ID 5
但是根据 SHOW SLAVE STATUS 我们看到:
Master_Server_Id: 3
此外,您似乎正在连接本地主机,但您暗示您的主/从位于不同的主机上:
Master_Host: 127.0.0.1
我们使用 SSH 隧道(使用autossh)在本地公开远程主机127.0.0.1:3305。我也注意到了 Master_Server_Id,但我认为这只是很久以前当我们使用不同的 master 时的残余。SHOW SLAVE STATUS一旦我们完全重新建立复制,我期望值会更新。无论如何,这是一个很棒的建议;我将再次检查我们是否确实连接到了正确的主人!
127.0.0.1:3305
SHOW SLAVE STATUS
1
非常感谢您为我指明了正确的方向!确实,我们连接到了错误的主人。我通过执行 a 确认了它telnet 127.0.0.1:3305- 我可以看到报告的 MySQL 版本与旧master 的版本相匹配。我认为问题的根源可能是由于我们网络上的一些 DNS 怪癖 - 似乎 autossh 连接被错误地建立到 domain.com,即使它被配置为连接到 db.domain.com。再次非常感谢
telnet 127.0.0.1:3305