mysql主从报错_Mysql主从报错锦集

前言

在发生故障切换后,经常遇到的问题就是同步报错,下面是最近收集的报错信息。

记录删除失败

在master上删除一条记录,而slave上找不到

Last_SQL_Error: Could not execute Delete_rows event on table hcy.t1;

Can't find record in 't1',

Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND;

the event's master log mysql-bin.000006, end_log_pos 254

解决方法:master要删除一条记录,而slave上找不到报错,这种情况主都已经删除了,那么从机可以直接跳过。

stop slave;

set global sql_slave_skip_counter=1;

start slave;

如果这种情况很多,需要针对这种错误专门写相关脚本。

主键重复

在slave已经有该记录,又在master上插入了同一条记录。

Last_SQL_Error: Could not execute Write_rows event on table hcy.t1;

Duplicate entry '2' for key 'PRIMARY',

Error_code: 1062;

handler error HA_ERR_FOUND_DUPP_KEY; the event's master log mysql-bin.000006, end_log_pos 924

解决方法:

在slave上用desc hcy.t1; 先看下表结构:

mysql> desc hcy.t1;

+-------+---------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+---------+------+-----+---------+-------+

| id | int(11) | NO | PRI | 0 | |

| name | char(4) | YES | | NULL | |

+-------+---------+------+-----+---------+-------+

删除重复的主键

mysql> delete from t1 where id=2;

Query OK, 1 row affected (0.00 sec)

mysql> start slave;

Query OK, 0 rows affected (0.00 sec)

mysql> show slave status\G;

……

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

……

mysql> select * from t1 where id=2;

在master上和slave上再分别确认一下。

更新丢失

在master上更新一条记录,而slave上找不到,丢失了数据。

Last_SQL_Error: Could not execute Update_rows event on table hcy.t1;

Can't find record in 't1',

Error_code: 1032;

handler error HA_ERR_KEY_NOT_FOUND;

the event's master log mysql-bin.000010, end_log_pos 794

解决方法:

在master上,用mysqlbinlog 分析下出错的binlog日志在干什么。

/usr/local/mysql/bin/mysqlbinlog --no-defaults -v -v --base64-output=DECODE-ROWS mysql-bin.000010 | grep -A '10' 794

#120302 12:08:36 server id 22 end_log_pos 794 Update_rows: table id 33 flags: STMT_END_F

### UPDATE hcy.t1

### WHERE

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

### @2='bbc' /* STRING(4) meta=65028 nullable=1 is_null=0 */

### SET

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

### @2='BTV' /* STRING(4) meta=65028 nullable=1 is_null=0 */

# at 794

#120302 12:08:36 server id 22 end_log_pos 821 Xid = 60

COMMIT/*!*/;

DELIMITER ;

# End of log file

ROLLBACK /* added by mysqlbinlog */;

/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;

在slave上,查找下更新后的那条记录,应该是不存在的。

mysql> select * from t1 where id=2;

Empty set (0.00 sec)

然后再到master查看

mysql> select * from t1 where id=2;

+----+------+

| id | name |

+----+------+

| 2 | BTV |

+----+------+

1 row in set (0.00 sec)

把丢失的数据在slave上填补,然后跳过报错即可。

mysql> insert into t1 values (2,'BTV');

Query OK, 1 row affected (0.00 sec)

mysql> select * from t1 where id=2;

+----+------+

| id | name |

+----+------+

| 2 | BTV |

+----+------+

1 row in set (0.00 sec)

mysql> stop slave ;set global sql_slave_skip_counter=1;start slave;

Query OK, 0 rows affected (0.01 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

mysql> show slave status\G;

……

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

……

1236错误, 二进制文件缺失

误删二进制文件等各种原因,导致主库mysql-bin.000012文件丢失,从库同步失败。

Master_Log_File: mysql-bin.000012

Slave_IO_Running: No

Slave_SQL_Running: Yes

Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'

首先停止从库同步

slave stop;

查看主库日志文件和位置

mysql> show master logs;

+------------------+-----------+

| Log_name | File_size |

+------------------+-----------+

| mysql-bin.000013 | 154 |

+------------------+-----------+

回从库,使日志文件和位置对应主库

CHANGE MASTER TO MASTER_LOG_FILE='log-bin.000013',MASTER_LOG_POS=154;

最后,启动从库:

slave start;

show slave status\G;

Master_Log_File: mysql-bin.000013

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Last_IO_Error:

中继日志损坏

slave的中继日志relay-bin损坏。

Last_SQL_Error: Error initializing relay log position: I/O error reading the header from the binary log

Last_SQL_Error: Error initializing relay log position: Binlog has bad magic number;

It's not a binary log file that can be used by this version of MySQL

1、手工修复

解决方法:找到同步的binlog和POS点,然后重新做同步,这样就可以有新的中继日值了。

例子:

mysql> show slave status\G;

*************************** 1. row ***************************

Master_Log_File: mysql-bin.000010

Read_Master_Log_Pos: 1191

Relay_Log_File: vm02-relay-bin.000005

Relay_Log_Pos: 253

Relay_Master_Log_File: mysql-bin.000010

Slave_IO_Running: Yes

Slave_SQL_Running: No

Replicate_Do_DB:

Replicate_Ignore_DB:

Replicate_Do_Table:

Replicate_Ignore_Table:

Replicate_Wild_Do_Table:

Replicate_Wild_Ignore_Table:

Last_Errno: 1593

Last_Error: Error initializing relay log position: I/O error reading the header from the binary log

Skip_Counter: 1

Exec_Master_Log_Pos: 821

Slave_IO_Running :接收master的binlog信息

Master_Log_File

Read_Master_Log_Pos

Slave_SQL_Running:执行写操作

Relay_Master_Log_File

Exec_Master_Log_Pos

以执行写的binlog和POS点为准。

Relay_Master_Log_File: mysql-bin.000010

Exec_Master_Log_Pos: 821

mysql> stop slave;

Query OK, 0 rows affected (0.01 sec)

mysql> CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000010',MASTER_LOG_POS=821;

Query OK, 0 rows affected (0.01 sec)

mysql> start slave;

Query OK, 0 rows affected (0.00 sec)

mysql> show slave status\G;

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.8.22

Master_User: repl

Master_Port: 3306

Connect_Retry: 10

Master_Log_File: mysql-bin.000010

Read_Master_Log_Pos: 1191

Relay_Log_File: vm02-relay-bin.000002

Relay_Log_Pos: 623

Relay_Master_Log_File: mysql-bin.000010

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Replicate_Do_DB:

Replicate_Ignore_DB:

Replicate_Do_Table:

Replicate_Ignore_Table:

Replicate_Wild_Do_Table:

Replicate_Wild_Ignore_Table:

Last_Errno: 0

Last_Error:

Skip_Counter: 0

Exec_Master_Log_Pos: 1191

Relay_Log_Space: 778

Until_Condition: None

Until_Log_File:

Until_Log_Pos: 0

Master_SSL_Allowed: No

Master_SSL_CA_File:

Master_SSL_CA_Path:

Master_SSL_Cert:

Master_SSL_Cipher:

Master_SSL_Key:

Seconds_Behind_Master: 0

Master_SSL_Verify_Server_Cert: No

Last_IO_Errno: 0

Last_IO_Error:

Last_SQL_Errno: 0

Last_SQL_Error:

2、Ibbackup

各种大招都用上了,无奈slave数据丢失过多,ibbackup(需要银子)该你登场了。

Ibbackup热备份工具,是付费的。xtrabackup是免费的,功能上一样。

Ibbackup备份期间不锁表,备份时开启一个事务(相当于做一个快照),然后会记录一个点,之后数据的更改保存在ibbackup_logfile文件里,恢复时把ibbackup_logfile 变化的数据再写入到ibdata里。

Ibbackup 只备份数据( ibdata、.ibd ),表结构.frm不备份。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/557643.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA中的那些名词解释

1.JDO: (Java Data Object )是Java对象持久化的新的规范,也是一个用于存取某种数据仓库中的对象的标准化API.作用:用于存取某种数据仓库中的对象 2.JPA: JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象&a…

mysql资质_MySQL语句与Java代码实现按需过滤企业员工的资质证书

在企业ERP中,每位员工拥有多个资质证书,资质证书有种类、名称和登记时间,以及变动时间和结束时间的主要属性;现在有一个需求,员工在系统查看自己的信息之时:同一种类、同一名称、同一登记时间的资质证书&am…

java对象的序列化和反序列化详细解释

java对象的序列化和反序列化是什么意思 1、序列化是干啥用的? 序列化的原本意图是希望对一个Java对象作一下“变换”,变成字节序列,这样一来方便持久化存储到磁盘,避免程序运行结束后对象就从内存里消失,另外变换成字…

oracle to mysql demo_oracle to mysql

http://blog.csdn.net/hwhua1986/article/details/53257427oracle到mysql的迁移步骤及各种注意事项http://www.2cto.com/database/201305/210248.htmlhttp://www.cnblogs.com/HondaHsu/p/3641116.htmlhttp://www.cnblogs.com/HondaHsu/p/3641183.htmlhttp://www.cnblogs.com/Ho…

IDEA快捷键调整字体大小 设置 (Ctrl+滚轮) 调整字体大小

IDEA设置Ctrl滚轮调整字体大小 第一步:打开idea 设置界面: 第二步:勾选上下图中红色部分即可实现 保存后,ctrl滚轮就能改变代码字体大小

mysql5.7主从全备恢复_mysql主从,或者全备份

mysql的主从复制依赖bin-log日志,会因为各种问题中断,如flush table,网络问题等,还有一些未知的bug因素,之前使用mysql import方式恢复速度太慢,一个3G的库要恢复一个下午,实在是无法忍受。现在…

IDEA中三种注释方式的快捷键

三种注释方式 单行注释、多行注释、方法或类说明注释(文档注释)。 单行注释 快捷键:Ctrl /   使用Ctrl /, 添加单行注释,再次使用,去掉行注释    多行注释 快捷键:Ctrl Shift /   使用…

lombok @Accessors用法详解(一看就能懂)

Accessors(chaintrue) 链式访问,该注解设置chaintrue,生成setter方法返回this(也就是返回的是对象),代替了默认的返回void。 package com.pollyduan;import lombok.Data; import lombok.experimental.Accessors;Data …

随机森林特征重要性计算_R语言随机森林模型中具有相关特征的变量重要性

原文链接:http://tecdat.cn/?p13546​tecdat.cn变量重要性图是查看模型中哪些变量有趣的好工具。由于我们通常在随机森林中使用它,因此它看起来非常适合非常大的数据集。大型数据集的问题在于许多特征是“相关的”,在这种情况下,…

在IDEA中右键New没有创建Mapper文件选项解决办法

问题解决 1.File–>Settings–>Editor–>File and Code Templates 模板中输入内容 <?xml version"1.0" encoding"utf-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/…

mysql合并多条纪录字段_mysql合并多条记录的单个字段去一条记录

mysql怎么合并多条记录的单个字段去一条记录&#xff0c;今天在网上找了一下&#xff0c;方法如下&#xff1a;测试用表结构&#xff1a;-- ------------------------------------------------------------ 表的结构 tet--CREATE TABLE IF NOT EXISTS tet (id int(11) NOT NULL…

三步教你解决Invalid bound statement (not found): com.xxx.dao.xxxDao.selectByxx错误!!!!很简单

1 问题实质: dao层(又叫mapper接口)跟mapper.xml文件没有映射 2 问题原因: 出现这种映射问题的原因分为低级原因和更低级原因两种 更低级原因: (1)dao层的方法和mapper.xml中的方法不一样; (2)mapper中的namespace resultParameter 和对应的dao层entity层不一样 (3)拼写错误 如…

java mysql lru_Java集合详解5:深入理解LinkedHashMap和LRU缓存

今天我们来深入探索一下LinkedHashMap的底层原理&#xff0c;并且使用linkedhashmap来实现LRU缓存。摘要&#xff1a;HashMap和双向链表合二为一即是LinkedHashMap。所谓LinkedHashMap&#xff0c;其落脚点在HashMap&#xff0c;因此更准确地说&#xff0c;它是一个将所有Entry…

SpringBoot中注入ApplicationContext对象的三种方式

在项目中&#xff0c;我们可能需要手动获取spring中的bean对象&#xff0c;这时就需要通过 ApplicationContext 去操作一波了&#xff01; 1、直接注入&#xff08;Autowired&#xff09; Component public class User {Autowiredprivate ApplicationContext applicationCont…

django2.1支持的mysql版本_一文解决django 2.2与mysql兼容性问题

Django是一个开放源代码的Web应用框架&#xff0c;由Python写成。采用了MTV的框架模式&#xff0c;即模型M&#xff0c;视图V和模版T。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的&#xff0c;即是CMS(内容管理系统)软件。并于2005年7月在BSD许可…

springBoot的自动扫描包范围

springboot扫描包的范围的约定 SpringBoot的注解扫描的默认规则是从SpringBoot的项目入口类。若入口类所在的包是com.example.demo那么自动扫描包的范围是com.example.demo包及其下面的子包&#xff0c;如果service包和dao包不在此包下面&#xff0c;则不会自动扫描。 手动配置…

mysql一共有多少引擎_MySQL存储引擎你们知道多少?

MySQL是我们经常使用的数据库处理系统(DBMS)&#xff0c;不知小伙伴们有没有注意过其中的“存储引擎”(storage_engine)呢&#xff1f;有时候面试题中也会问道MySQL几种常用的存储引擎的区别。这次就简短侃一下存储引擎那些事儿。先去查一下“引擎”概念。引擎(Engine)是电子平…

SpringBoot 中@Autowired 注入失效原因及解决方法

SpringBoot 中Autowired 注入失效原因及解决方法 1、原因分析 1.1 包没有被扫描到通过Autowired注入的类所在的包路径不在Application启动类所在的包/子包路径下。Spring Boot项目的Bean装配默认规则是根据Application类(指项目入口类)所在的包位置从上往下扫描。eg: Applica…

python词云模糊_用Python和WordCloud绘制词云(内附让字体清晰的秘笈)

环境及模块&#xff1a;Win7 64位Python 3.6.4WordCloud 1.5.0Pillow 5.0.0Jieba 0.39目标&#xff1a;绘制安徽省2018年某些科技项目的词云&#xff0c;直观展示热点。思路&#xff1a;先提取项目的名称&#xff0c;再用Jieba分词后提取词汇&#xff1b;过滤掉“研发”、“系列…

shiro框架,自定义realm注入service失败解决办法

shiro框架,自定义realm注入service失败解决办法 报错如下: org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘shiroFilter’ defined in ServletContext resource [/WEB-INF/config/spring-shrio.xml]: Cannot resolve reference …