Last_SQL_Error: не удалось выполнить событие Delete_rows при ошибке репликации таблицы?

#mysql #amazon-aurora

#mysql #amazon-aurora

Вопрос:

Я нахожусь в процессе переноса исходной базы данных mysql на amazon aurora и использовал официальную документацию AWS. Согласно документам, это шаги, которые я выполнил до сих пор:-

  1. Настройте Percona Xtrabackup.
  2. Сделал резервную копию и переместил данные в S3.
  3. Зашел на панель управления RDS и восстановил базу данных из S3.
  4. База данных запущена и успешно запущена.

Сейчас я нахожусь в процессе настройки репликации binlog, где мой экземпляр Aurora будет репликой, в то время как мой on prem mysql является основным. Чтобы настроить репликацию, я выполнил шаги, изложенные в официальных документах:-

  1. На моем главном сервере создал пользователя ‘replica-aurora’ и предоставил необходимые разрешения, используя GRANT REPLICATION SLAVE ON *.* TO 'replica-aurora'@'%' IDENTIFIED BY 'my-secret-password';
  2. Запустил Show master status на моем master, который находится в prem.
      File: mysql-bin.004762
      Position: 68093017
      Binlog_Do_DB: 
      Binlog_Ignore_DB: 
      Executed_Gtid_Set: 
      1 row in set (0.00 sec)
     
  3. Подключился к моему экземпляру aurora и выполнил следующую команду :-
     CALL mysql.rds_set_external_master ('Ip-of-master', 3306, 'replica-aurora',  'password', 'mysql-bin.004762', 68093017, 0);
     
  4. Ran CALL mysql.rds_start_replication;
  5. Когда я проверяю show slave StatusG . Я продолжаю сталкиваться со следующим сообщением об ошибке :-
     Slave_IO_State: Waiting for master to send event
                  Master_Host: Master-IP
                  Master_User: replica-aurora
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.004762
          Read_Master_Log_Pos: 71341857
               Relay_Log_File: relaylog.000002
                Relay_Log_Pos: 195715
        Relay_Master_Log_File: mysql-bin.004762
             Slave_IO_Running: Yes
            Slave_SQL_Running: No
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: mysql.rds_replication_status,mysql.rds_monitor,mysql.rds_sysinfo,mysql.rds_configuration,mysql.rds_history
      Replicate_Wild_Do_Table: 
      Replicate_Wild_Ignore_Table: 
                   Last_Errno: 1032
                   Last_Error: Could not execute Delete_rows event on table db.feed; Can't find record in 'feed', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log mysql-bin.004762, end_log_pos 68293560
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 68288412
              Relay_Log_Space: 3249360
              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: 0
                Last_IO_Error: 
               Last_SQL_Errno: 1032
               Last_SQL_Error: Could not execute Delete_rows event on table db.feed; Can't find record in 'feed', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log mysql-bin.004762, end_log_pos 68293560
     

Я попытался установить sql_slave_skip_counter=1 и столкнулся с этим :-

mysql> SET GLOBAL sql_slave_skip_counter = 1; ERROR 1227 (42000): Access denied; you need (at least one of) the SUPER privilege(s) for this operation

Я попытался пропустить текущую позицию, используя CALL mysql.rds_skip_repl_error; , но столкнулся со следующим :-

 mysql> CALL mysql.rds_skip_repl_error;
 ------------------------------------- 
| Message                             |
 ------------------------------------- 
| Statement in error has been skipped |
 ------------------------------------- 
1 row in set (0.04 sec)

 ----------------------------------------------------------------------------------- 
| Message                                                                           |
 ----------------------------------------------------------------------------------- 
| Slave has encountered a new error. Please use SHOW SLAVE STATUS to see the error. |
 ----------------------------------------------------------------------------------- 
1 row in set (2.14 sec)

Query OK, 0 rows affected (2.14 sec)
 

по сути, это то же сообщение об ошибке, что и выше. ОШИБКА 1032.

У кого-нибудь есть идеи о том, как решить эту проблему? Я, конечно, был бы признателен за это.

Комментарии:

1. Вы заблокировали мастер, когда Took a backup and moved the data to S3. ? Вы запускаете show master status после завершения резервного копирования, и я думаю, что это неправильно, потому что master изменил позицию.

2. @ErgestBasha Спасибо за ответ. Я не заблокировал мастер. Поскольку это производство. Вы думаете, я должен использовать главную позицию при создании резервной копии?

3. Чтобы получить чистую репликацию, вы должны: flush tables with read lock; затем show master status; скопировать и сохранить данные, которые вам понадобятся в файле и позиции. Затем запустите команду mysqldump, и после завершения команды вы сможете разблокировать таблицы unlock tables;

4. Спасибо @ErgestBasha, я попробую это.