====== Ошибки репликации 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)