mysql 1032_[MySQL] SQL_ERROR 1032解决办法

一、缘由:

在主主同步的测试环境,由于业务侧没有遵循同一时间只写一个点的原则,造成A库上删除了一条数据,B库上在同时更新这条数据。

由于异步和网络延时,B的更新event先到达A端执行,造成A端找不到这条记录,故SQL_THREAD报错1032,主从同步停止。

二、错误说明:

MySQL主从同步的1032错误,一般是指要更改的数据不存在,SQL_THREAD提取的日志无法应用故报错,造成同步失败

(Update、Delete、Insert一条已经delete的数据)。

1032的错误本身对数据一致性没什么影响,影响最大的是造成了同步失败、同步停止。

如果主主(主从)有同步失败,要第一时间查看并着手解决。因为不同步,会造成读取数据的不一致。应在第一时间恢复同步,

尽量减少对业务的影响。然后再具体分析不同步的原因,手动或者自动修复数据,并做pt-table-checksum数据一致性检查。

目前业务一般是做主主同步,主主同步由于是异步更新,存在更新冲突的问题,且很容易引起SQL ERROR 1032错误。这个应该在业务侧解决,

保证同一时间只更新数据库的一个点,类似单点写入。我们的解决办法是:写一个底层数据库调用库,可能涉及到更新冲突的操作,都调用这个库。

在配置文件里,配2个点的数据库A、B,保证一直都更新A库,如果A库不可用,就去更新B库。

另外,如果是对数据一致性要求较高的场景,比如涉及到钱,建议用PXC(强一致性、真正同步复制)。

三、解决办法:

MySQL5.6.30版本,binlog模式为ROW。

show slave status\G,可以看到如下报错:

Slave_SQL_Running: NO

Last_SQL_Errno: 1032

Last_SQL_Error: Worker 3 failed executing transaction '' at master log mysql-bin.000003, end_log_pos 440267874;

Could not execute Delete_rows event on table db_test.tbuservcbgolog; Can't find record in 'tbuservcbgolog', Error_code: 1032;

handler error HA_ERR_KEY_NOT_FOUND; the event's master log mysql-bin.000003, end_log_pos 440267874

从上可以看出,是SQL_THREAD线程出错,错误号码1032。是在应用delete db_test.tbuservcbgolog 表中一行数据的事件时,由于这条数据

不存在而出错。此事件在主服务器Master binlog中的位置是 mysql-bin.000003, end_log_pos 440267874。(当然可以在从服务器Slave的Relay

log中查找,具体方法见最后)

方法1:跳过错误Event

先跳过这一条错误(event),让主从同步恢复正常。(或者N条event,一条一条跳过)

stop slave;

set global sql_slave_skip_counter=1;

start slave;

方法2:跳过所有1032错误

更改my.cnf文件,在Replication settings下添加:

slave-skip-errors = 1032

并重启数据库,然后start salve。

注意:因为要重启数据库,不推荐,除非错误事件太多。

方法3:还原被删除的数据

根据错误提示信息,用mysqlbinlog找到该条数据event SQL并逆向手动执行。如delete 改成insert。

本例中,此事件在主服务器Master binlog中的位置是 mysql-bin.000003, end_log_pos 440267874。

1)利用mysqlbinlog工具找出440267874的事件

/usr/local/mysql-5.6.30/bin/mysqlbinlog --base64-output=decode-rows -vv mysql-bin.000003 |grep -A 20 '440267874'

或者/usr/local/mysql-5.6.30/bin/mysqlbinlog --base64-output=decode-rows -vv mysql-bin.000003 --stop-position=440267874 | tail -20

或者usr/local/mysql-5.6.30/bin/mysqlbinlog --base64-output=decode-rows -vv mysql-bin.000003 > decode.log

( 或者加上参数-d, --database=name 来进一步过滤)

#160923 20:01:27 server id 1223307 end_log_pos 440267874 CRC32 0x134b2cbc Delete_rows: table id 319 flags: STMT_END_F

### DELETE FROM `db_99ducj`.`tbuservcbgolog`

### WHERE

### @1=10561502 /* INT meta=0 nullable=0 is_null=0 */

### @2=1683955 /* INT meta=0 nullable=0 is_null=0 */

### @3=90003 /* INT meta=0 nullable=0 is_null=0 */

### @4=0 /* INT meta=0 nullable=0 is_null=0 */

### @5='2016-09-23 17:02:24' /* DATETIME(0) meta=0 nullable=1 is_null=0 */

### @6=NULL /* DATETIME(0) meta=0 nullable=1 is_null=1 */

# at 440267874

以上为检索出来的结果,事务语句为:delete from db_99ducj.tbuservcbgolog where @1=10561502 and @2=1683955 ...

其中@1 @2 @3...分别对应表tbuservcbgolog的列名,填补上即可。

我们可以逆向此SQL 将deleter 变成Insert,手动在从库上执行此Insert SQL,之后restart slave就好了。

[MySQL复制] SQL_ERROR 1032解决办法(non-gtid env)

一.缘由: 在主主同步的测试环境,由于业务侧没有遵循同一时间只写一个点的原则,造成A库上删除了一条数据,B库上在同时更新这条数据. 由于异步和网络延时,B的更新event先到达A端执行,造成A端找不到 ...

阿里云vps上mysql挂掉的解决办法

阿里云vps上mysql挂掉的解决办法 4条回复 用阿里云的vps用作blog服务器,系统很稳定,已经100多天一直运行正常,大概从上个月开始发现blog的mysql会有时挂掉,会收到短信通知.之前没 ...

十五、mac 中登陆mysql忘记密码解决办法

mac 中登陆mysql忘记密码解决办法 1.打开终端,输入命令:cd /usr/local/mysql/bin 2.mysql -uroot -p,用这条命令登陆时报错信息: 报错:Enter pa ...

MySQL 1366错误解决办法

MySQL 1366错误大致描述如下 SQL Error: 1366: Incorrect string value: "xE8xAFxA6xE7xBBx86-" for colu ...

Springboot(八):emoji表情保存到mysql出错的解决办法

emoji表情保存到mysql出错的解决办法 今天,在前端的说明信息中输入emoji表情的时候,插入数据库会报错 百度了一下,是因为mysql数据库的字符编码集不正确,utf8无法存入表情字符,只能将 ...

CentOS忘记mariadb/mysql root密码解决办法

本文不再更新,可能存在内容过时的情况,实时更新请访问原地址:CentOS忘记mariadb/mysql root密码解决办法: 这里有两种方式实现修改mariadb root密码. mariadb版本 ...

mysql支持emoji解决办法

mysql显示不了emoji表情或者显示??,原因这里不解释,直接说解决办法.(主要就是修改utf8mb4) 1.修改表 ALTER TABLE `TABLE_NAME` CHARACTER SET ...

apache mysql无法启动解决办法

最近在调试几个代码,需要不停的启动关闭服务器和mysql.在连续的几次开关后,无法启动了,每次启动后就直接关闭. 刚开始是怀疑是不是端口被占用了,查看端口后,并没有端口被占用的情况.查看mysql错误 ...

log4net引用了Mysql.Data.dll,但是就是不能写到mysql数据库的解决办法

这两天遇到log4net写日志到mysql数据库中,有时候在A项目中可以,有时候B项目就有问题,有时候测试环境没问题,到正式部署环境又出问题,经过两天的煎熬,终于理清楚了其中的头绪. 1.配置现状 c ...

随机推荐

Go语言常用命令介绍

go build go build 命令主要是用于测试编译.在包的编译过程中,若有必要,会同时编译与之相关联的包. 如果是普通包,当你执行go build命令后,不会产生任何文件. 如果是main包, ...

C++继承和多态

继承 访问控制 基类的成员函数可以有public.protected.private三种访问属性. 类的继承方式有public.protected.private三种. 公有继承 当类的继承方式为pu ...

C#汉字转拼音帮助类

using System; using System.Collections.Generic; using System.Text; using System.Text.RegularExpressi ...

利用pre平台实现iOS应用程序自动更新

// // AppDelegate.m // PreAutoUpdateDemo // // Created by mac on 15/12/18. // Copyright © 2015年 mac. ...

C语言指针的初始化和赋值

1.指针的初始化 指针初始化时,"="的右操作数必须为内存中数据的地址,不能够是变量,也不能够直接用整型地址值(可是int*p=0;除外,该语句表示指针为空).此时,*p仅仅是表示 ...

QT调用CURL

QProcess *mProcess; QStringList arguments; arguments<

jsp页面制作弹出框

各种弹出页面的设计 [1.普通的弹出窗口] 其实代码非常简单:

C&plus;&plus;动态链接库封装

封装一个动态连接库的大致步骤 由于我们部门主要是利用MFC开发,所以我简单的做了一个关于MFC规则动态库的创建以及调用的文档,仅供参考. 新建MFC DLL项目(命名为NewDll) 2.分别为刚见得 ...

JBoss应用服务器清理缓存

旭日Follow_24 的优快云 博客 ,全文地址请点击: https://blog.youkuaiyun.com/xuri24/article/details/82220081 jboss跟tomcat一样, ...

&lbrack;译&rsqb;与TensorFlow的第一次接触(三)之聚类

转自 [译]与TensorFlow的第一次接触(三)之聚类 2016.08.09 16:58* 字数 4316 阅读 7916评论 5喜欢 18 前一章节中介绍的线性回归是一种监督学习算法,我们使用数 ...

<think>好的,我现在需要帮助用户解决在MySQL中执行`source /usr/onl_edu_sql.sql`时遇到的错误`Failed to open file '/usr/onl_edu_sql.sql', error: 2`。首先,我得弄清楚这个错误的原因。错误代码2通常表示文件不存在或路径不正确,所以首先应该确认文件是否真的存在。 用户是在MySQL命令行里输入的这条命令,所以需要确认MySQL服务器是否有权限访问该路径,以及路径是否正确。接下来,我需要考虑用户可能的使用场景。用户可能是在尝试导入一个SQL脚本,但文件路径有问题,或者权限不足。 可能的原因包括:文件路径错误、文件不存在、权限问题,或者是MySQL运行的环境(比如Docker容器)导致路径不可见。用户可能是在宿主机上运行MySQL客户端,而文件在宿主机上,但MySQL服务器在容器内,无法访问宿主机的文件系统。 接下来,我需要分步骤分析解决方案。首先,检查文件是否存在。用户可能需要使用绝对路径,或者在Docker环境下,需要将文件挂载到容器内。如果是权限问题,可能需要修改文件权限为可读。 另外,如果用户使用的是Docker,可能需要通过`docker cp`命令将文件复制到容器内部,或者使用`-v`挂载卷。或者,在MySQL命令行中使用`source`命令时,确保路径是容器内的有效路径。 还需要考虑用户是否有使用Docker的经验,是否了解容器内外的文件系统差异。可能需要指导用户如何正确挂载文件或复制文件到容器中。 最后,给出具体的解决步骤,比如检查路径、确认文件存在、修改权限、挂载卷或复制文件到容器,以及如何在MySQL命令行中正确执行source命令。同时,提醒用户注意路径的正确性和权限设置,避免类似问题再次发生。</think>### 问题分析 `ERROR: Failed to open file '/usr/onl_edu_sql.sql', error: 2` 表示 MySQL 客户端无法读取指定路径的 SQL 文件。以下是系统级排查指南: --- ### 核心原因 1. **路径错误**:文件实际路径与命令输入路径不符 2. **权限问题**:MySQL 进程没有读取权限 3. **容器隔离**:Docker 环境下宿主机的 `/usr` 路径对容器不可见 4. **文件不存在**:文件名拼写错误或文件被删除 --- ### 分步解决方案 #### 1. 验证文件存在性 ```bash # 在文件所在环境执行(宿主机或容器内) ls -l /usr/onl_edu_sql.sql # 检查文件是否存在 file /usr/onl_edu_sql.sql # 验证文件类型 ``` **注意**: - 若使用 Docker,宿主机与容器的 `/usr` 是隔离的 - 通过 `docker exec -it mysql_container ls /usr` 确认容器内文件存在性 --- #### 2. Docker 环境专用修复 ```bash # 方法一:将宿主机的SQL文件挂载到容器 docker run -d \ --name mysql_container \ -v /宿主机/真实路径/onl_edu_sql.sql:/docker-entrypoint-initdb.d/onl_edu_sql.sql \ -e MYSQL_ROOT_PASSWORD=your_pwd \ mysql:8.0 # 方法二:通过 docker cp 传输文件 docker cp /宿主机/onl_edu_sql.sql mysql_container:/tmp/ docker exec -it mysql_container mysql -uroot -p -e "SOURCE /tmp/onl_edu_sql.sql" ``` --- #### 3. 权限修复(非容器场景) ```bash # 授予 MySQL 用户读取权限 sudo chown mysql:mysql /usr/onl_edu_sql.sql sudo chmod 644 /usr/onl_edu_sql.sql # 确保其他用户有读权限 # 验证权限 namei -l /usr/onl_edu_sql.sql ``` --- #### 4. 安全加载模式处理 如果文件来自网络下载: ```bash # 解除 macOS 隔离属性 xattr -c /usr/onl_edu_sql.sql # 关闭 SELinux 临时保护(Linux) setenforce 0 && mysql -uroot -p -e "SOURCE /usr/onl_edu_sql.sql" ``` --- ### 高级调试流程 #### 步骤 1:绝对路径验证 ```bash # 在 MySQL 客户端中测试绝对路径 mysql> source /tmp/test.sql; # 使用简单路径排除环境变量干扰 ``` #### 步骤 2:符号链接解析 ```bash # 检查文件是否为符号链接 readlink -f /usr/onl_edu_sql.sql ``` #### 步骤 3:文件系统挂载检查 ```bash # 确认文件所在分区已挂载 df -h /usr/onl_edu_sql.sql ``` --- ### 容器场景完整操作示例 ```bash # 1. 将宿主机的SQL文件复制到容器 docker cp ~/Downloads/onl_edu_sql.sql mysql8:/tmp/ # 2. 进入容器MySQL命令行 docker exec -it mysql8 mysql -uroot -p # 3. 执行导入(注意使用容器内路径) mysql> source /tmp/onl_edu_sql.sql; ``` --- ### 常见误区 1. **路径混淆** - ❌ 在宿主机执行 `mysql> source /宿主机/路径` - ✅ 容器内 MySQL 只能访问容器文件系统 2. **权限不足** - 即使文件存在,仍需满足 `mysql` 用户可读 - 特别注意挂载目录的 `:Z` 标签(SELinux): ```bash docker run -v /host/path:/container/path:Z ... ``` --- ### 替代导入方案 ```bash # 通过 Bash 管道直接导入 cat onl_edu_sql.sql | docker exec -i mysql8 mysql -uroot -p # 使用 mysql 客户端参数 mysql -uroot -p database_name < /path/to/onl_edu_sql.sql ``` --- 通过以上步骤可系统解决文件加载问题。如果文件超过 `max_allowed_packet` 限制,建议在 `my.cnf` 中添加: ```ini [mysqld] max_allowed_packet=256M ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值