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

相关推荐
熙客2 小时前
Kubernetes是如何保证有状态应用数据安全和快速恢复的
mysql·云原生·容器·kubernetes
倔强的石头1063 小时前
KingbaseES:从兼容到超越,详解超越MySQL的权限隔离与安全增强
数据库·mysql·安全·金仓数据库
小鸡毛程序员3 小时前
我在CSDN学MYSQL之----数据库基本概念和基本知识(下)
数据库·mysql
米花町的小侦探4 小时前
解决 GORM + MySQL 5.7 报错:Error 1067: Invalid default value for ‘updated_at‘
mysql
老衲提灯找美女6 小时前
MySQL数据库基础操作:
数据库·mysql·oracle
ヾChen6 小时前
头歌MySQL——复杂查询
数据库·物联网·学习·mysql·头歌
yoi啃码磕了牙7 小时前
Unity—Localization 多语言
java·数据库·mysql
星光一影8 小时前
打车/网约车、代驾、顺风车/拼车、货运、租车等多种出行服务的一站式解决方案
mysql·微信小程序·php·uniapp·html5·web app
Jing_jing_X9 小时前
MySQL Server 启动后到底加载了什么,创建表插入数据到底怎么存的存在哪
mysql·adb
Java水解9 小时前
初识MYSQL —— 基本查询
后端·mysql