MySQL 5.6主从报错的实战记录

yizhihongxing

下面就详细讲解“MySQL 5.6主从报错的实战记录”的完整攻略。

问题描述

在 MySQL 5.6 主从复制环境中,从库报错如下:

Error 'Duplicate entry '12345' for key 'PRIMARY'' on query...

问题分析

这个错误提示的含义是,由于从库上已经存在一条与主库上相同的记录,从而导致主从同步失败。查看数据库表的结构和数据,发现从库上的表确实存在主键相同的记录。这可能是由于以下原因导致的:

  • 从库上手动改写了记录,并将主键改为了与主库相同的值。
  • 从库上的同步线程发生了错误,导致主键冲突。

我们需要进一步分析错误日志,查找导致主从同步失败的具体原因。

解决方案

  1. 首先需要通过 show slave status\G 命令查看从库的同步状态,确认同步是否正常。
(...)
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
(...)

如果以上两个状态都为 Yes,则表示从库同步正常,在解决主从同步问题时需要考虑其他方面的问题。

  1. 如果同步状态正常,需要进一步查看错误日志,找到导致主从同步失败的具体 SQL 语句。

在从库上运行 show slave status\G 命令,查看 Last_Error 项的内容。

(...)
Last_Errno: 1062
Last_Error: Error 'Duplicate entry '12345' for key 'PRIMARY'' on query...
(...)

可以看到,报错信息中包含了具体的 SQL 语句。根据这个 SQL 语句,可以确认是从库上手动修改记录导致的冲突。

  1. 解决主从同步问题的方法是,删除从库上的重复记录。在删除记录前,需要先停止同步线程,否则删除操作可能会在主库和从库上都执行,导致再次出现冲突。

停止同步线程的命令为:

stop slave;

然后,可以通过以下命令,在从库上删除重复记录:

delete from 表名 where 主键=12345;

删除完成后,重新启动同步线程:

start slave;

等待一段时间后,可以通过 show slave status\G 命令查看同步状态,确认同步是否恢复正常。

示例说明

示例一

在从库上手动改写了记录,并将主键改为了与主库相同的值。在这种情况下,可以通过删除从库上的冲突记录解决主从同步问题。

例如,从库上的表为 user,主键为 id,其中有一条记录的 id 值为 12345,与主库中的 user 表中的记录重复。通过以下命令可以删除重复的记录:

stop slave;
delete from user where id=12345;
start slave;

示例二

从库上的同步线程发生了错误,导致主键冲突。在这种情况下,需要查找导致同步失败的具体原因,并解决问题。

例如,从库上的 Last_Error 项中包含的错误信息如下:

Last_Errno: 1213
Last_Error: Error 'Deadlock found when trying to get lock; try restarting transaction' on query...

这说明同步线程在执行 SQL 语句时发生了死锁,需要进一步分析原因并解决问题。可以通过查看 Last_SQL_ErrorLast_IO_Error 项的内容,进一步定位问题并解决。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MySQL 5.6主从报错的实战记录 - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • MySQL8.0+版本1045错误的问题及解决办法

    下面是完整攻略。 MySQL 8.0+版本1045错误的问题及解决办法 问题描述 在使用 MySQL 8.0+ 版本的时候,有时候会出现 1045 错误,提示无权访问 MySQL 服务器。如下图所示: ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: …

    MySQL 2023年5月18日
    00
  • MySql中的Full Text Search全文索引优化

    当我们在MySQL中需要对一些包含文本内容的字段进行搜索时,使用全文索引就可以提高搜索效率。在这份攻略中,我们将讲解如何在MySQL中使用Full Text Search全文索引进行优化。 1. 创建全文索引 在MySQL中,我们可以使用以下语法来创建一个包含全文索引的表: CREATE TABLE `mytable` ( `id` int(11) NOT …

    MySQL 2023年5月19日
    00
  • MySQL Limit性能优化及分页数据性能优化详解

    MySQL Limit性能优化及分页数据性能优化详解 MySQL的分页查询在应用中经常出现,然而对于大表数据,分页查询会严重影响性能,特别是采用MySQL limit分页时,性能瓶颈更加明显。本篇文章将从两个方面讲解MySQL分页数据的性能优化,包括MySQL Limit性能优化、分页数据的性能优化,帮助读者更好地优化MySQL分页查询性能。 MySQL L…

    MySQL 2023年5月19日
    00
  • MySQL修改存储过程(ALTER PROCEDURE)方法详解

    MySQL的ALTER PROCEDURE语句可以用于修改已经存在的存储过程。修改存储过程通常包括修改存储过程的名称、参数、注释、以及存储过程中的SQL语句等。 ALTER PROCEDURE的语法如下: ALTER PROCEDURE procedure_name [characteristic …] 其中procedure_name为要修改的存储过程…

    MySQL 2023年3月10日
    00
  • 解决MySQL数据库链接超时报1129错误问题

    接下来我将详细讲解“解决MySQL数据库链接超时报1129错误问题”的完整攻略,过程中会示范两条具体的解决方案。 解决MySQL数据库链接超时报1129错误问题的完整攻略 问题描述 在使用MySQL数据库时,经常会遇到如下错误信息: ERROR 1129 (HY000): Host ‘xxx.xxx.xxx.xxx’ is blocked because o…

    MySQL 2023年5月18日
    00
  • 实验六 存储过程

    实验六 存储过程 第1关:增加供应商相关列sqty use demo; #代码开始 #在S表中增加一列供应零件总数量(sqty),默认值为0。 altertable s add sqty intdefault0; #代码结束 desc s; 第2关:定义、调用简单存储过程 use demo; #代码开始 #1、定义简单存储过程:计算所有供应商供应零件总数量并…

    MySQL 2023年5月10日
    00
  • InnoDB的关键特性-插入缓存,两次写,自适应hash索引详解

    InnoDB是MySQL数据库管理系统中的一种存储引擎,其特性有很多,其中比较重要的特性包括插入缓存、两次写和自适应hash索引。 插入缓存 插入缓存是InnoDB中的一种缓存机制,它能够提高插入性能。当数据被插入到表中时,InnoDB并不会立即将数据写入磁盘,而是先将数据写入缓存中,然后等待一定的时间再将缓存中的数据写入磁盘。这个时间是通过配置参数inno…

    MySQL 2023年5月19日
    00
  • 缓存与数据库双写一致性几种策略分析

    作者:京东零售 于泷 一、背景 在高并发场景中,为防止大量请求直接访问数据库,缓解数据库压力,常用的方式一般会增加缓存层起到缓冲作用,减少数据库压力。引入缓存,就会涉及到缓存与数据库中数据如何保持一致性问题,本文将对几种缓存与数据库保证数据一致性的使用方式进行分析。为保证高并发性能,以下分析场景不考虑执行的原子性及加锁等强一致性要求的场景,仅追求最终一致性。…

    MySQL 2023年4月19日
    00
合作推广
合作推广
分享本页
返回顶部