mysql 主从复制如何跳过报错

yizhihongxing

MySQL 主从复制是一种常见的数据库备份和读写分离解决方案。然而,由于各种原因,可能会导致主从复制中出现错误。这时,我们可以使用跳过报错的方式来强制使主从复制继续进行,本文将介绍跳过报错的完整攻略。

跳过报错的方式

在 MySQL 主从复制中,跳过报错的方式有两种:跳过单个 SQL 语句和跳过多个 SQL 语句。

跳过单个 SQL 语句

如果主库中某个 SQL 语句不能被从库正确执行,从库将会停止复制,此时我们可以使用 SQL_SKIP_COUNTER 选项继续复制。

具体步骤如下:

  1. 在从库上查看出错语句的具体信息,使用 SHOW SLAVE STATUS 命令,找到 Last_Error 字段,或者查看从库错误日志。
  2. 在主库上通过 mysqlbinlog 工具查看复制的二进制日志,找到出错语句的位置。
  3. 在从库上使用 STOP SLAVE 命令停止复制。
  4. 在从库上使用 SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1 命令跳过一个语句。如果需要跳过多个语句,将 1 替换成需要跳过的语句数量即可。
  5. 在从库上使用 START SLAVE 命令恢复复制。

这样就可以解决单个 SQL 语句的错误。

跳过多个 SQL 语句

如果多个 SQL 语句出错,可以使用 SET GLOBAL SQL_SLAVE_SKIP_COUNTER 命令跳过多个 SQL 语句。

具体步骤如下:

  1. 在从库上查看出错语句的具体信息,使用 SHOW SLAVE STATUS 命令,找到 Last_Error 字段,或者查看从库错误日志。
  2. 在主库上通过 mysqlbinlog 工具查看复制的二进制日志,找到出错语句的位置。
  3. 在从库上使用 STOP SLAVE 命令停止复制。
  4. 在从库上使用 mysql 命令行客户端连接主库,使用 SELECT @@GLOBAL.gtid_executed; 命令查看主库 GTID(全局事务标识符)。
  5. 在从库上使用 SET GLOBAL gtid_slave_pos='master_uuid:executed_gtid_set' 命令设置 GTID 复制位置,其中 master_uuid 是主库的 UUID,可以在主库上使用 SELECT @@server_uuid; 命令查看,executed_gtid_set 是在主库上使用 SELECT @@GLOBAL.gtid_executed; 命令查看到的 GTID,设置时需要将 UUID 和 GTID 使用逗号隔开。
  6. 在从库上使用 START SLAVE 命令恢复复制。

这样就可以解决多个 SQL 语句的错误。

示例说明

下面是两个关于跳过报错的示例说明:

示例1:跳过单个 SQL 语句

假设主库执行 SQL 语句:

CREATE TABLE `test` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `name` VARCHAR(50) NOT NULL,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB;

当从库执行该语句时,报错了,出错信息为:

ERROR 1060 (42S21): Duplicate column name 'id'

这时,我们可以跳过该语句,在从库上执行以下命令即可:

STOP SLAVE; 
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; 
START SLAVE;

这样就可以跳过报错语句继续复制。

示例2:跳过多个 SQL 语句

假设主库执行了多个 SQL 语句,从库在执行第二个语句时报错,出错信息为:

ERROR 1054 (42S22): Unknown column 'test' in 'field list'

此时我们可以使用以下步骤跳过多个语句。

首先,在从库上执行以下命令:

STOP SLAVE;

然后,在主库上使用 mysqlbinlog 工具查看复制的二进制日志,找到出错语句的位置,假设位置为 320,复制的 SQL 语句如下:

INSERT INTO `test` (`name`) VALUES ('hello');
INSERT INTO `test` (`test`) VALUES ('world');

执行以下命令跳过多个语句:

mysql> SET GLOBAL gtid_slave_pos='bb9f4463-7b89-11ea-9b33-0242ac1c0002:1-320';
mysql> START SLAVE;

这样,就可以跳过多个语句继续复制。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:mysql 主从复制如何跳过报错 - Python技术站

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

相关文章

  • SPSS26怎么激活?IBM SPSS Statistics 26中文许可授权安装教程(Mac/Win/Linux)

    SPSS26激活及安装教程 什么是SPSS? SPSS是一种商业化的统计分析软件,可以进行数据挖掘、决策支持、预测分析等。在科研、统计分析领域中广泛应用,是目前全球领先的统计分析软件之一。 SPSS26激活方法 方式一:手动输入序列号激活 打开SPSS Statistics软件,选择“许可证管理器”。 在“许可证管理器”中选择“授权”,手动输入产品序列号,然…

    database 2023年5月22日
    00
  • 快速解决PostgreSQL中的Permission denied问题

    下面是针对PostgreSQL中的权限问题的完整攻略。 问题概述 在使用PostgreSQL数据库时,可能会遇到Permission denied(权限被拒绝)的问题。这通常是由于当前用户没有足够的权限操作数据库或文件系统导致的。这篇攻略介绍了如何识别和解决这类问题。 识别问题 当你在PostgreSQL中尝试执行某些操作时,如果出现Permission d…

    database 2023年5月18日
    00
  • LINUX启动/重启/停上MYSQL的命令(详解)

    LINUX启动/重启/停止MYSQL的命令详解 概述 MySQL是一个开放源码的关系型数据库管理系统,常用于web应用程序开发,是LAMP(Linux+Apache+MySQL+PHP/Python/Perl)中的重要组成部分。在Linux系统中,正确的启动、重启和停止MySQL是保证数据库正常工作的基础。 启动MySQL 在启动MySQL之前,需要检查My…

    database 2023年5月22日
    00
  • Entity Framework使用Code First模式管理事务

    首先我们需要了解Entity Framework是什么。Entity Framework是由微软开发的一种ORM(对象关系映射)框架,它可以将关系型数据库中的数据映射到对象上,使我们能够以面向对象的方式操作数据库。其中,Code First是Entity Framework的一种模式,它允许我们先编写实体类,然后通过实体类来生成数据库表,在这个过程中,我们可…

    database 2023年5月22日
    00
  • Linux系统中的rc.local自启动服务

    下面是详细讲解“Linux系统中的rc.local自启动服务”的完整攻略。 1. 简介 在Linux系统中,rc.local是一个管理系统启动时自动执行的脚本文件。它位于/etc目录下,可以用来实现系统启动时自动启动一些程序或服务。 2. rc.local的使用步骤 2.1 编写脚本 首先,在/etc目录下创建一个rc.local文件,可以使用命令: sud…

    database 2023年5月22日
    00
  • Oracle中PL/SQL中if语句的写法介绍

    下面是详细讲解 Oracle 中 PL/SQL 中 if 语句的写法介绍的攻略。 1. if 语句的概述 if 语句一般用于在程序中根据某些条件是否成立来执行相应的代码块,其语法如下: if [condition1] then –执行语句块1 elsif [condition2] then –执行语句块2 else –执行语句块3 end if; 其中…

    database 2023年5月21日
    00
  • Centos7如何备份和还原Redis数据的方法

    以下是CentOS 7下如何备份和还原Redis数据的方法攻略: 备份Redis数据 1. 执行快照命令 Redis提供了快照命令,可以将当前Redis数据库快照保存为一份持久化文件。可以通过以下命令来执行: redis-cli save 执行此命令后,Redis将会在后台执行快照操作,将数据保存到默认的持久化文件中。 2. 设置自动快照 除了手动执行快照命…

    database 2023年5月22日
    00
  • MySQL 语句注释方式简介

    MySQL 语句注释可以为SQL语句提供可读性,并且可以方便开发者在调试和维护时理解代码。本文将为大家介绍MySQL 语句注释方式,包括单行注释、多行注释以及行尾注释。 单行注释 单行注释的格式为”– 注释内容”,其中”–“表示注释符号,后面紧跟着注释内容,可以用来对SQL语句中的一行进行注释,如下所示: SELECT f_name, l_name, e…

    database 2023年5月21日
    00
合作推广
合作推广
分享本页
返回顶部