Содержание

Ошибки репликации MySQL(Percona)

1032

Last_SQL_Error: Could not execute Update_rows event on table databaseName.TableName; Can't find record in 'TableName', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the even
t's master log mysql-bin.021084, end_log_pos 696352185

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

SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; start slave;
 
show slave status\G

Следует иметь ввиду, что подобное поведение не является нормой. Нужно устранить проблему при возможности.

В percona toolkit имеется утилита, которая позволяет забивать на эту ошибку и ехать дальше - pt-slave-restart. При выполнении тулза сообщает нам, в каком месте bin-log она встретила ошибку и едет дальше.

# Выполняется на SLAVE
 
pt-slave-restart 
 
# A software update is available:
2022-08-18T20:43:29  SRV-SLAVE-relay-bin.000417   282849405 1032 
2022-08-18T20:43:29  SRV-SLAVE-relay-bin.000417   283282377 1032 
^CExiting on SIGINT.

Можно попытаться посмотреть запрос, который эту ошибку вызывает, используя утилиту mysqlbinlog

# -j - начальная позиция лога
# --stop-position - место, до куда смотреть ( в нашем случае величины совпадают, смотрим только эту запись)
mysqlbinlog -s -j 283282377  --stop-position=283282377  /var/lib/mysql/SRV-SLAVE-relay-bin.000417

pt-table-checksum

Также можно попытаться найти разницу между мастером и слейвом, используя команду pt-table-checksum Для этого добавляем пользователя MySQL root на SLAVE с возможностью доступа снаружи:

##
# Добавляем пользователя MySQL
CREATE USER 'root'@'%' IDENTIFIED BY '$Password';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
##
# Считаем расхождение:
# pt-table-checksum --no-check-binlog-format --nocheck-replication-filters
 
pt-table-checksum --nocheck-replication-filters --replicate=testdb.checksums \
 --databases=testdb  h=149.202.XXX.XXX,u=root,p=$Password,P=3306 --no-check-binlog-format 
# Смотрим результат
Checking if all tables can be checksummed ...
Starting checksum ...
Diffs cannot be detected because no slaves were found.  Please read the --recursion-method documentation for information.
            TS ERRORS  DIFFS     ROWS  DIFF_ROWS  CHUNKS SKIPPED    TIME TABLE
08-24T23:33:54      0      0        5          0       1       0   0.025 testdb.Persons
mysql> show variables like 'binlog_format';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | ROW   |
+---------------+-------+
1 row in set (0.00 sec)