Ошибка Mysql 1236 от мастера при чтении данных из двоичного журнала

У меня есть 2 MySql с конфигурацией master/slave, и репликация не работает. Произошел сбой MySql Master, и был создан новый регистр в mysql-bin.index. Я удалил этот новый регистр, потому что этого файла не существовало в файловой системе. Затем мастер MySql успешно перезапустился.

Теперь у меня есть следующая ошибка в подчиненном:

mysql> show slave status \G
*************************** 1. row ***************************
           Slave_IO_State: 
              Master_Host: 10.64.253.99
              Master_User: replication
              Master_Port: 3306
            Connect_Retry: 60
          Master_Log_File: mysql-bin.001050
      Read_Master_Log_Pos: 54868051
           Relay_Log_File: mysqld-relay-bin.000001
            Relay_Log_Pos: 4
    Relay_Master_Log_File: mysql-bin.001050
         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: 54868051
          Relay_Log_Space: 107
          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: 1

Если я выполню «показать основной статус» для просмотра файла журнала bin mysql и позиции:

mysql> show master status \G
*************************** 1. row ***************************
            File: mysql-bin.001050
        Position: 55586895
    Binlog_Do_DB: aaa
 Binlog_Ignore_DB: xxx,yyy,zzz,mysql

Затем я установил новую конфигурацию для подчиненного устройства:

STOP SLAVE;
CHANGE MASTER TO 
    MASTER_HOST='10.64.253.99',
    MASTER_USER='slaveUser',
    MASTER_PASSWORD='12345',
    MASTER_LOG_FILE='mysql-bin.001050', 
    MASTER_LOG_POS=55586895;
START SLAVE;

И если я снова проверю статус ведомого, у меня будет та же ошибка:

mysql> show slave status \G
*************************** 1. row ***************************
           Slave_IO_State: 
              Master_Host: 10.64.253.99
              Master_User: replication
              Master_Port: 3306
            Connect_Retry: 60
          Master_Log_File: mysql-bin.001050
      Read_Master_Log_Pos: 55586895
           Relay_Log_File: mysqld-relay-bin.000001
            Relay_Log_Pos: 4
    Relay_Master_Log_File: mysql-bin.001050
         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: 55586895
          Relay_Log_Space: 107
          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: 1

Я проверил в мастере MySql, что mysql-bin.001050 существует и не пуст.

Это производственная среда, в которой новые данные вставляются каждую минуту. Значение позиции может изменяться в минутах или секундах. Я не знаю, проблема ли это.

Переменная max_allowed_packet имеет одинаковое значение в двух MySql (16M).

Почему подчиненное устройство не может найти двоичный файл журнала?


person eltortuganegra    schedule 03.03.2015    source источник


Ответы (1)


Вы можете попробовать это:

  1. Раб: stop slave;
  2. Мастер: flush logs
  3. Мастер: show master status; — take note of the master log file and master log position

  4. Раб: CHANGE MASTER TO MASTER_LOG_FILE='log-bin.00000X', MASTER_LOG_POS=106;

  5. Раб: start slave;
person fajarhide    schedule 23.09.2015
comment
Это небезопасный способ, и вам нужно четко понимать, что вы делаете. - person AlexeyVMP; 17.01.2021