mysql8 主从复制一直失败

问题描述:

开启同步后从服务器一直失败,报错如下:

Last_SQL_Error: Coordinator stopped because there were error(s) in the worker(s). The most recent failure being: Worker 1 failed executing transaction 'ANONYMOUS' at source log mysql-bin.000004, end_log_pos 47974616. See error log and/or performance_schema.replication_applier_status_by_worker table for more details about this failure or others, if any.

这个看不出具体,转到日志文件去看:

bash 复制代码
2024-12-06T09:32:56.038060Z 5 [System] [MY-014001] [Repl] Replica receiver thread for channel '': connected to source 'slave@172.22.107.84:23306' with server_uuid=614993fb-34f0-11ef-ba87-00163e28fbbf, server_id=100. Starting replication from file 'mysql-bin.000004', position '48380251'.
2024-12-06T09:32:56.038099Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.36'  socket: '/var/lib/mysql/mysql.sock'  port: 23306  MySQL Community Server - GPL.
2024-12-06T09:32:56.254437Z 7 [ERROR] [MY-010584] [Repl] Replica SQL for channel '': Worker 1 failed executing transaction 'ANONYMOUS' at source log mysql-bin.000004, end_log_pos 47974616; Could not execute Update_rows event on table xxl_job.xxl_job_log_report; Can't find record in 'xxl_job_log_report', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's source log mysql-bin.000004, end_log_pos 47974616, Error_code: MY-001032
2024-12-06T09:32:56.254598Z 6 [ERROR] [MY-010586] [Repl] Error running query, replica SQL thread aborted. Fix the problem, and restart the replica SQL thread with "START REPLICA". We stopped at log 'mysql-bin.000004' position 47932536
2024-12-06T09:33:43.605596Z 15 [Warning] [MY-010897] [Repl] Storing MySQL user name or password information in the connection metadata repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START REPLICA; see the 'START REPLICA Syntax' in the MySQL Manual for more information.
2024-12-06T09:33:43.609579Z 15 [System] [MY-014001] [Repl] Replica receiver thread for channel '': connected to source 'slave@172.22.107.84:23306' with server_uuid=614993fb-34f0-11ef-ba87-00163e28fbbf, server_id=100. Starting replication from file 'mysql-bin.000004', position '48564548'.
2024-12-06T09:33:43.676934Z 17 [ERROR] [MY-010584] [Repl] Replica SQL for channel '': Worker 1 failed executing transaction 'ANONYMOUS' at source log mysql-bin.000004, end_log_pos 47974616; Could not execute Update_rows event on table xxl_job.xxl_job_log_report; Can't find record in 'xxl_job_log_report', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's source log mysql-bin.000004, end_log_pos 47974616, Error_code: MY-001032
2024-12-06T09:33:43.677113Z 16 [ERROR] [MY-010586] [Repl] Error running query, replica SQL thread aborted. Fix the problem, and restart the replica SQL thread with "START REPLICA". We stopped at log 'mysql-bin.000004' position 47974288

注意里面的[ERROR]后面,那是具体的问题

etc/my.cnf配置

bash 复制代码
[root@PROD-VM-88 log]# vi /etc/my.cnf
[root@PROD-VM-88 log]# systemctl restart mysqld
[root@PROD-VM-88 log]# cat /etc/my.cnf
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/8.0/en/server-configuration-defaults.html

[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove the leading "# " to disable binary logging
# Binary logging captures changes between backups and is enabled by
# default. It's default setting is log_bin=binlog
# disable_log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
#
# Remove leading # to revert to previous value for default_authentication_plugin,
# this will increase compatibility with older clients. For background, see:
# https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_authentication_plugin
# default-authentication-plugin=mysql_native_password
port=23306

server-id=101

user=mysql
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci

datadir=/data/www/server/mysql
socket=/var/lib/mysql/mysql.sock

log-error=/data/www/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

#关闭完整字段限制
sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'

lower_case_table_names=1

[mysqld]
# 跳过指定的错误码|数据不存在,外健约束
slave-skip-errors=1032,1062,1452

解决办法:

因为master中的一些表是设置了外键约束所以在同步过来时无法执行,还有一些数据在slave上手动删了造成了数据的不一致,所以要把这个都跳过,方法:

mysqld

跳过指定的错误码|数据不存在,外健约束

slave-skip-errors=1032,1062,1452

相关推荐
DemonAvenger20 小时前
数据库日志系统深度解析:从binlog到redo/undo日志的实践指南
数据库·mysql·性能优化
潘潘潘潘潘潘潘潘潘潘潘潘20 小时前
【MySQL】从零开始学习MySQL:基础与安装指南
linux·运维·服务器·数据库·学习·mysql
寻星探路20 小时前
数据库造神计划第八天---增删改查(CRUD)(4)
数据库·sql·mysql
Java烘焙师20 小时前
架构师必备:缓存更新模式总结
mysql·缓存
马走日mazouri20 小时前
深入理解MySQL主从架构中的Seconds_Behind_Master指标
数据库·分布式·mysql·系统架构·数据库架构
秋难降1 天前
零基础学习SQL(十一):SQL 索引结构|从 B+Tree 到 Hash,面试常问的 “为啥选 B+Tree” 有答案了
数据库·后端·mysql
ljh5746491191 天前
mysql 必须在逗号分隔字符串和JSON字段之间二选一,怎么选
数据库·mysql·json
gamers1 天前
rock linux 9 安装mysql 5.7.44
linux·mysql·adb
努力的小郑1 天前
MySQL索引(四):深入剖析索引失效的原因与优化方案
后端·mysql·性能优化
江团1io01 天前
深入解析MVCC:多版本并发控制的原理与实现
java·经验分享·mysql