- 浏览: 359673 次
文章分类
最新评论
-
jfeifjlafekae:
另外,为什么存储日志会有拆分过程,而不是rotation方式? ...
HBASE数据架构 -
jfeifjlafekae:
“当然,数据刷写时,一个Region只要有一个列族的memSt ...
HBASE数据架构 -
hmc52107521:
你好,params.keys,params.values以及# ...
mybatis中使用map类型参数,其中key为列名,value为列值 -
zhangxiong0301:
qindongliang1922 写道AM中其它与内存相关的参 ...
(转)YARN内存配置 -
qindongliang1922:
AM中其它与内存相关的参数,还有JVM相关的参数,这些参数可以 ...
(转)YARN内存配置
(本文转载,特此声明)
在MYSQL进行Replication的时候,有时候会由于主从端的POS点不同,导致复制的SQL进程出现错误,从而导致主从复制失败。比如在主端复制一个ID是100的到从端,而此时由于某种原因从端已经有了ID=100的记录,这时进行INSERT操作的时候,就会主键重复,插入失败。这时候需要跳过这条错误。方法如下
1:停止SLAVE 服务
mysql> STOP SLAVE;
2:设置跳过的EVENT个数
mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
3:启动SLAVE服务
mysql> START SLAVE;
下面阐述下N的意思,转帖
大家都知道,当slave出现错误时,可以通过SET GLOBAL sql_slave_skip_counter = N来跳过错误,但是这个N,又真正代表什么呢,开始时,
理解错了,以为对于事务型,N代表N个事务,而非事务型,代表一条sql 语句。后经过linuxtone曹哥指导发现,其实并不是这么回事
文档中有介绍说(http://dev.mysql.com/doc/refman/ ... e-skip-counter.html):
This statement skips the next N events from the master
即他是跳过N个events,这里最重要的是理解event的含义
在mysql中,对于sql的 binary log 他实际上是由一连串的event组成的一个组,即事务组。
我们在master上可以通过
SHOW BINLOG EVENTS 来查看一个sql里有多少个event。
通过例子来说明下,真正的event的含义:
在slave上
show slave status
Last_Errno: 1062
Last_Error: Error 'Duplicate entry '193' for key 'PRIMARY'' on query. Default database: 'ssldb'. Query: 'insert slave_no_skip1 values (193,'y10')'
Skip_Counter: 0
在 master 上,执行
mysql> SHOW BINLOG EVENTS in 'mysql-bin.000010' from 46755013;
+------------------+----------+------------+-----------+-------------+--------------------------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+------------------+----------+------------+-----------+-------------+--------------------------------------------------------+
| mysql-bin.000010 | 46755013 | Query | 1 | 46755082 | BEGIN |
1| mysql-bin.000010 | 46755082 | Query | 1 | 46755187 | use `ssldb`; insert slave_no_skip1 values (193,'y10') |
2| mysql-bin.000010 | 46755187 | Xid | 1 | 46755214 | COMMIT /* xid=4529451 */ |
3| mysql-bin.000010 | 46755214 | Query | 1 | 46755283 | BEGIN |
4| mysql-bin.000010 | 46755283 | Query | 1 | 46755387 | use `ssldb`; insert slave_no_skip1 values (194,'y11') |
5| mysql-bin.000010 | 46755387 | Xid | 1 | 46755414 | COMMIT /* xid=4529452 */ |
6| mysql-bin.000010 | 46755414 | Query | 1 | 46755483 | BEGIN |
7| mysql-bin.000010 | 46755483 | Query | 1 | 46755587 | use `ssldb`; insert slave_no_skip1 values (195,'y12') |
8| mysql-bin.000010 | 46755587 | Xid | 1 | 46755614 | COMMIT /* xid=4529453 */ |
9| mysql-bin.000010 | 46755614 | Query | 1 | 46755683 | BEGIN |
10| mysql-bin.000010 | 46755683 | Query | 1 | 46755788 | use `ssldb`; insert slave_no_skip1 values (196,'y13') |
11| mysql-bin.000010 | 46755788 | Xid | 1 | 46755815 | COMMIT /* xid=4529454 */ |
12| mysql-bin.000010 | 46755815 | Query | 1 | 46755884 | BEGIN |
13| mysql-bin.000010 | 46755884 | Query | 1 | 46755989 | use `ssldb`; insert slave_no_skip1 values (197,'y14') |
14| mysql-bin.000010 | 46755989 | Xid | 1 | 46756016 | COMMIT /* xid=4529455 */ |
15| mysql-bin.000010 | 46756016 | Query | 1 | 46756085 | BEGIN |
16| mysql-bin.000010 | 46756085 | Query | 1 | 46756190 | use `ssldb`; insert slave_no_skip1 values (198,'y15') |
17| mysql-bin.000010 | 46756190 | Xid | 1 | 46756217 | COMMIT /* xid=4529456 */ |
18| mysql-bin.000010 | 46756217 | Query | 1 | 46756286 | BEGIN |
19| mysql-bin.000010 | 46756286 | Query | 1 | 46756391 | use `ssldb`; insert slave_no_skip1 values (199,'y16') |
20| mysql-bin.000010 | 46756391 | Xid | 1 | 46756418 | COMMIT /* xid=4529457 */ |
21| mysql-bin.000010 | 46756418 | Query | 1 | 46756487 | BEGIN |
| mysql-bin.000010 | 46756487 | Query | 1 | 46756592 | use `ssldb`; insert slave_no_skip1 values (190,'y17') |
| mysql-bin.000010 | 46756592 | Xid | 1 | 46756619 | COMMIT /* xid=4529458 */ |
+------------------+----------+------------+-----------+-------------+--------------------------------------------------------+
24 rows in set (0.00 sec)
通过错误可知,他是use `ssldb`; insert slave_no_skip1 values (193,'y10') 这条语句导致错误了
如果我们想跳到最后一条语句“use `ssldb`; insert slave_no_skip1 values (190,'y17')“的话 ,我们必须简单计算下中间有多少个event
很明显,是21,那么我们可以执行SET GLOBAL sql_slave_skip_counter =21(这里你SET GLOBAL sql_slave_skip_counter =19或者20都可以)
在slave 在次执行show slave status查看
Last_Errno: 1062
Last_Error: Error 'Duplicate entry '190' for key 'PRIMARY'' on query. Default database: 'ssldb'. Query: 'insert slave_no_skip1 values (190,'y17')'
Skip_Counter: 0
可见 他已经如我所愿,跳到use `ssldb`; insert slave_no_skip1 values (190,'y17')这里了。
在MYSQL进行Replication的时候,有时候会由于主从端的POS点不同,导致复制的SQL进程出现错误,从而导致主从复制失败。比如在主端复制一个ID是100的到从端,而此时由于某种原因从端已经有了ID=100的记录,这时进行INSERT操作的时候,就会主键重复,插入失败。这时候需要跳过这条错误。方法如下
1:停止SLAVE 服务
mysql> STOP SLAVE;
2:设置跳过的EVENT个数
mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
3:启动SLAVE服务
mysql> START SLAVE;
下面阐述下N的意思,转帖
大家都知道,当slave出现错误时,可以通过SET GLOBAL sql_slave_skip_counter = N来跳过错误,但是这个N,又真正代表什么呢,开始时,
理解错了,以为对于事务型,N代表N个事务,而非事务型,代表一条sql 语句。后经过linuxtone曹哥指导发现,其实并不是这么回事
文档中有介绍说(http://dev.mysql.com/doc/refman/ ... e-skip-counter.html):
This statement skips the next N events from the master
即他是跳过N个events,这里最重要的是理解event的含义
在mysql中,对于sql的 binary log 他实际上是由一连串的event组成的一个组,即事务组。
我们在master上可以通过
SHOW BINLOG EVENTS 来查看一个sql里有多少个event。
通过例子来说明下,真正的event的含义:
在slave上
show slave status
Last_Errno: 1062
Last_Error: Error 'Duplicate entry '193' for key 'PRIMARY'' on query. Default database: 'ssldb'. Query: 'insert slave_no_skip1 values (193,'y10')'
Skip_Counter: 0
在 master 上,执行
mysql> SHOW BINLOG EVENTS in 'mysql-bin.000010' from 46755013;
+------------------+----------+------------+-----------+-------------+--------------------------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+------------------+----------+------------+-----------+-------------+--------------------------------------------------------+
| mysql-bin.000010 | 46755013 | Query | 1 | 46755082 | BEGIN |
1| mysql-bin.000010 | 46755082 | Query | 1 | 46755187 | use `ssldb`; insert slave_no_skip1 values (193,'y10') |
2| mysql-bin.000010 | 46755187 | Xid | 1 | 46755214 | COMMIT /* xid=4529451 */ |
3| mysql-bin.000010 | 46755214 | Query | 1 | 46755283 | BEGIN |
4| mysql-bin.000010 | 46755283 | Query | 1 | 46755387 | use `ssldb`; insert slave_no_skip1 values (194,'y11') |
5| mysql-bin.000010 | 46755387 | Xid | 1 | 46755414 | COMMIT /* xid=4529452 */ |
6| mysql-bin.000010 | 46755414 | Query | 1 | 46755483 | BEGIN |
7| mysql-bin.000010 | 46755483 | Query | 1 | 46755587 | use `ssldb`; insert slave_no_skip1 values (195,'y12') |
8| mysql-bin.000010 | 46755587 | Xid | 1 | 46755614 | COMMIT /* xid=4529453 */ |
9| mysql-bin.000010 | 46755614 | Query | 1 | 46755683 | BEGIN |
10| mysql-bin.000010 | 46755683 | Query | 1 | 46755788 | use `ssldb`; insert slave_no_skip1 values (196,'y13') |
11| mysql-bin.000010 | 46755788 | Xid | 1 | 46755815 | COMMIT /* xid=4529454 */ |
12| mysql-bin.000010 | 46755815 | Query | 1 | 46755884 | BEGIN |
13| mysql-bin.000010 | 46755884 | Query | 1 | 46755989 | use `ssldb`; insert slave_no_skip1 values (197,'y14') |
14| mysql-bin.000010 | 46755989 | Xid | 1 | 46756016 | COMMIT /* xid=4529455 */ |
15| mysql-bin.000010 | 46756016 | Query | 1 | 46756085 | BEGIN |
16| mysql-bin.000010 | 46756085 | Query | 1 | 46756190 | use `ssldb`; insert slave_no_skip1 values (198,'y15') |
17| mysql-bin.000010 | 46756190 | Xid | 1 | 46756217 | COMMIT /* xid=4529456 */ |
18| mysql-bin.000010 | 46756217 | Query | 1 | 46756286 | BEGIN |
19| mysql-bin.000010 | 46756286 | Query | 1 | 46756391 | use `ssldb`; insert slave_no_skip1 values (199,'y16') |
20| mysql-bin.000010 | 46756391 | Xid | 1 | 46756418 | COMMIT /* xid=4529457 */ |
21| mysql-bin.000010 | 46756418 | Query | 1 | 46756487 | BEGIN |
| mysql-bin.000010 | 46756487 | Query | 1 | 46756592 | use `ssldb`; insert slave_no_skip1 values (190,'y17') |
| mysql-bin.000010 | 46756592 | Xid | 1 | 46756619 | COMMIT /* xid=4529458 */ |
+------------------+----------+------------+-----------+-------------+--------------------------------------------------------+
24 rows in set (0.00 sec)
通过错误可知,他是use `ssldb`; insert slave_no_skip1 values (193,'y10') 这条语句导致错误了
如果我们想跳到最后一条语句“use `ssldb`; insert slave_no_skip1 values (190,'y17')“的话 ,我们必须简单计算下中间有多少个event
很明显,是21,那么我们可以执行SET GLOBAL sql_slave_skip_counter =21(这里你SET GLOBAL sql_slave_skip_counter =19或者20都可以)
在slave 在次执行show slave status查看
Last_Errno: 1062
Last_Error: Error 'Duplicate entry '190' for key 'PRIMARY'' on query. Default database: 'ssldb'. Query: 'insert slave_no_skip1 values (190,'y17')'
Skip_Counter: 0
可见 他已经如我所愿,跳到use `ssldb`; insert slave_no_skip1 values (190,'y17')这里了。
发表评论
-
MYSQL乱码问题解决
2015-08-03 12:37 1370在使用mysql过程中遇到乱码问题,具体流程是:同事通过pu ... -
两阶段提交
2015-07-30 18:19 631在分布式系统中,事务往往包含有多个参与者的活动,单个参与者上 ... -
mysql MVCC
2015-07-30 18:15 862Mysql到底是怎么实现MVCC的?这个问题无数人都在问,但 ... -
mysql乐观锁总结和实践
2015-07-30 14:56 773上一篇文章《MySQL悲观 ... -
MySQL InnoDB三大特性之 - 两次写
2015-07-27 14:37 1236今天我们来介绍InnoDB存储引擎的第二个特性 - 两次写( ... -
MySQL InnoDB三大特性之 - 插入缓冲
2015-07-27 14:36 761InnoDB存储引擎有三大特性非常令人激动,它们分别是插入缓 ... -
innodb事务操作过程
2015-07-25 18:08 1987本文是介绍MySQL数据库InnoDB存储引擎重做日志漫游 ... -
myisam和innodb索引实现的不同
2015-07-25 16:24 1114MyISAM引擎使用B+Tree作为索引结构,叶节点的dat ... -
MySQL的InnoDB索引原理详解
2015-07-24 18:06 716本篇介绍下Mysql的InnoDB ... -
mysql表改名
2015-03-30 15:14 12171.方法一 mysql5.1有改名数据库 ... -
MYSQL语句select中使用变量(转载)
2014-11-19 20:24 3351引用set语句的学习: 使用select定义用户变量的实践 ... -
存储过程动态获取表名,然后以表名做参数
2014-06-19 09:27 1328CREATE DEFINER=`coolcloudstat`@ ... -
mysql配置参数
2014-03-05 10:25 854Allocating RAM for MySQL - The ... -
mysql数据整理命令
2014-01-28 15:06 1037Analyze Table(修复索引) MyS ... -
MYSQL innodb 每张表一个数据文件
2014-01-08 11:04 5426默认情况下,innodb引擎的所有表都存储在一个叫ibdata ... -
mysql查询优化
2013-12-18 09:32 924最近在做数据批量查询和更新,即从表1中group by 某个字 ... -
MYSQL优化之关闭文件系统日志
2013-12-12 21:47 2709通常数据库系统在数据大量操作时,会产生很大的磁盘io,关闭li ... -
mysql创建用户命令
2013-12-06 19:29 1078mysql创建用户:需要有root权限的账号 示例:creat ...
相关推荐
MySQL主从复制的基本原理涉及到二进制日志(binlog)和中继日志(relay log)。二进制日志记录了数据库的所有更改,包括表的创建、更改和删除等。当数据库发生变化时,主服务器会将这些更改记录到二进制日志中。从...
- **冲突解决策略**:在配置主从复制时,可以设定错误处理策略,如使用`SLAVE_SQL_SKIP_COUNTER`来跳过错误记录,或者配置`max_allowed_packet`参数以适应大记录的传输。 6. **优化主从复制**: - **异步复制**:...
- **跳过从服务启动**:`skip-slave-start`配置项避免了从服务器在启动时自动开始复制操作,这通常在初始化配置时使用。 - **二进制日志**:虽然从服务器不需要生成二进制日志,但这里也配置了相关的参数,如`log-...
MySQL主从复制是一种数据库高可用性和负载均衡的解决方案,它允许数据从一个主数据库(Master)实时同步到一个或多个从数据库(Slave)。在主从配置中,所有的写操作都在主数据库上执行,而从数据库则接收并应用主...
- 编辑从服务器的配置文件,设置 `server-id=2`,开启日志,并根据需要配置中继日志、跳过某些错误等。 5. **启动从服务器**: - 使用与启动主服务器相似的Docker命令,但映射不同的端口,并挂载从服务器的配置和...
MySQL数据库主从复制是...前者能帮助你在不影响数据一致性的情况下跳过特定错误,而后者则允许你彻底重置从库的复制状态,以应对更复杂的问题。在实施这些解决方案之前,务必评估其对数据完整性和业务连续性的影响。
如果遇到从服务器出现冲突无法复制的情况,可以尝试执行stop slave命令停止复制进程,然后通过set global sql_slave_skip_counter来跳过出现错误的事件。之后再执行start slave重新启动复制进程。如果多次操作仍无法...
1. 安装与配置MySQL主从:设置主库和从库的复制关系,配置主库的日志文件和位置,然后在从库上启动复制进程。 2. 配置Mycat:修改Mycat的schema.xml和server.xml文件,定义数据节点(DN)和数据源(DS),指定主库...
这些命令包括停止从库、跳过一个复制错误的二进制日志事件、重启复制,并退出。 ```shell if [ "$Slave_IO_Running" != "Yes" -a "$Slave_SQL_Running" != "Yes" ]; then echo "$datetime $slave_ip Slave is not ...
需要定位并解决错误,然后手动跳过错误行或重启复制。 5. **主服务器崩溃**:主服务器宕机时,需要尽快恢复服务。可以设置自动故障切换,或者手动将从服务器提升为主服务器。 6. **性能优化**:随着数据量的增长,...
- **错误处理**:在复制过程中遇到错误时,可以跳过错误继续复制,或者根据错误类型决定是否需要人工干预修复。 - **级联复制**:除了简单的主从结构,还可以实现多级主从复制,以支持更大规模的分布式数据库架构。 ...
- **注释**:跳过从库上的某个错误记录。 - **手动同步** - 在主库上执行: ```sql SHOW MASTER STATUS; ``` - 在从库上执行: ```sql STOP SLAVE; CHANGE MASTER TO MASTER_LOG_FILE='binlog_file_name',...
然而,需要注意的是,虽然跳过错误可以避免复制中断,但可能会导致数据不一致,因此在实际操作中需要根据具体业务需求权衡利弊。同时,随着MySQL版本的更新,配置方法和选项可能有所变化,使用时应参考最新的官方...
总之,MySQL主从复制是一种有效提高数据安全性与服务连续性的解决方案,其配置涉及多个步骤,包括服务器环境的准备、数据库的安装、复制用户的创建、日志文件的配置以及从服务器的初始化和同步。在整个过程中,确保...
### MySQL主从服务器配置知识点详解 #### 一、配置背景及目标 在Linux环境下进行MySQL双机互备(即主从复制)配置是一项常见的数据库管理任务。本文档旨在通过一个具体的实例来展示如何实现两台服务器之间的数据...
- **错误处理**:通过`slave_skip_errors`选项可以跳过复制过程中的一些错误,防止复制中断。 - **数据不一致**:确保Master和Slave上的数据完全一致,可以通过导出导入的方式初始化数据。 - **性能优化**:根据实际...
以下是根据提供的文件内容,对MySQL主从部署的详细步骤和相关知识点的解释: 1. **下载MySQL**:首先需要从官方下载MySQL的安装包,例如在`https://dev.mysql.com/downloads/mysql/`,选择适合操作系统的版本。 2....
`slave-skip-errors=all`允许从库跳过错误,以确保即使遇到问题也能继续复制。最后,调整`slave-net-timeout`以避免因网络延迟导致的复制中断。 在从库上,我们需要停止复制服务,然后使用`change master to`命令...
- 查看从服务器 B 中的 `mysql_error.log` 日志文件来排查错误。 #### 故障排除 - **主从不能同步**:如果遇到主从不能同步的情况,可以使用 `show slave status\G;` 命令查看详细状态。如果显示 `Error xxx doesn...