所以MySQL的組複製出來了MySQL 5.7。 現在已經有一段時間了,人們開始更多地詢問它。
# GTID 简介 GTID (global transaction
identifier)在MySQL5.6时引入,GTID是事务的全局唯一标识。GTID结构如下 ``` GTID =
source_id:transaction_id ``` source_id:执行事务的原始实例的sever_uuid,
此事务GTID在备库apply时也不变。 transaction_id:事务的
【数据存储与数据库】 【mysql】 【线程】 【阿里技术协会】 【binlog】 【mysql5.7】 …
前题:
-
要求MySQL 5.7.6及以后版本。
-
所有组中成员gtid_mode 为off状态。
实现步骤:
-
所有的Server执行
set @@global.enforce_gtid_consistency = warn;
特别注意: 这一步是关建的一步使用不能出现警告。
2.所有的server上执行:
set @@global.enforce_gtid_consistency = on;
3.所有的Server上执行(不关心最先最后,但要执行完):
set @@global.gtid_mode = off_permissive;
-
执行:
set @@global.gtid_mode=on_permissive;
实质在这一步骤生的日志都是带GTID的日志了,这个步骤号称是不关心任何节点,但从实管理上推荐在slave上先执行,然后再去master上执行。
-
…
导读
在MySQL复制中,如何忽略slave节点上发生的主键冲突、数据不存在等错误。
在MySQL复制中,如果slave节点上遇到错误,比如数据不存在或者主键冲突等错误时,想要忽略这些错误,可以采用以下几种方法:
1、未启用GTID模式时
只需通过设定 SQL_SLAVE_SKIP_COUNTER 的值,即可忽略一些复制事件。例如:
#需要先关闭SLAVE服务
root@imysql.com [test]> STOP SLAVE;
#忽略N个事件(event),通常一个SQL是一个事件
root@imysql.com [test]> SET SQL_SLAVE_SKIP_COUNTER=N;
#再次启动SLAVE服务
root@imysql.com [test]> START SLAVE;
2、启用GTID模式时
启用GTID,想要忽略某些错误事件就稍微麻烦一点点了。
首先,我们需要先查看当前SLAVE复制的进度:
mysql> SHOW SLAVE STATUS\G …
[获取更多]昨天处理了一个MySQL 5.6版本下开启GTID模式复制异常案例,MASTER上的任何操作都无法在SLAVE上应用,SLAVE的RELAY LOG里有记录,但SLAVE的BINLOG却找不到蛛丝马迹。由于开启了GTID,所以排查起来也简单,只需要在SLAVE上把RELAY LOG和BINLOG分别解析成文本文件,再直接搜索MASTER的UUID,就能找到SLAVE上是否应用了MASTER复制过来的事务。 排查过程中,曾经一度怀疑是因为设置了BINLOG-DO或者IGNORE规则,或者设置了REPLICATION-DO或IGNORE规则,甚至是GTID的严重BUG,但都没发现端倪。直到从 SHOW SLAVE STATUS 里发现下面这个信息:
[yejr@imysql.com]> show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event ... Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 2539 …[获取更多]
同一机器上三个实例,3307为maser,新造两个mariadb实例,端口分别为3309 和3310,开始搭建复制关系,版本为mariadb 10.0.10
3307 导出: mysqldump --master-data=2
导入:
mysql -u -p --socket=/tmp/mysql3309.sock
</apps/bak_3307.sql
mysql -u -p --socket=/tmp/mysql3310.sock </apps/bak_3307.sql
在做主从复制关系前,
dba@192.168.50.111(test_3309) : (none) 05:20:31>select
@@global.gtid_current_pos;
+---------------------------+
| @@global.gtid_current_pos |
+---------------------------+
| 0-501113309-31329 |
+---------------------------+
1 row in set (0.02 sec)
dba@192.168.50.111(test_3309) : (none) 05:21:10>select
@@global.gtid_current_pos;
+---------------------------+
| @@global.gtid_current_pos |
+---------------------------+
| 0-501113309-32311 |
…
同一机器上三个实例,3307为maser,新造两个mariadb实例,端口分别为3309 和3310,开始搭建复制关系,版本为mariadb 10.0.10
3307 导出: mysqldump --master-data=2
导入:
mysql -u -p --socket=/tmp/mysql3309.sock
</apps/bak_3307.sql
mysql -u -p --socket=/tmp/mysql3310.sock </apps/bak_3307.sql
在做主从复制关系前,
dba@192.168.50.111(test_3309) : (none) 05:20:31>select
@@global.gtid_current_pos;
+---------------------------+
| @@global.gtid_current_pos |
+---------------------------+
| 0-501113309-31329 |
+---------------------------+
1 row in set (0.02 sec)
dba@192.168.50.111(test_3309) : (none) 05:21:10>select
@@global.gtid_current_pos;
+---------------------------+
| @@global.gtid_current_pos |
+---------------------------+
| 0-501113309-32311 |
…
同一机器上三个实例,3307为maser,新造两个mariadb实例,端口分别为3309 和3310,开始搭建复制关系,版本为mariadb 10.0.10
3307 导出: mysqldump --master-data=2
导入:
mysql -u -p --socket=/tmp/mysql3309.sock
</apps/bak_3307.sql
mysql -u -p --socket=/tmp/mysql3310.sock </apps/bak_3307.sql
在做主从复制关系前,
dba@192.168.50.111(test_3309) : (none) 05:20:31>select @@global.gtid_current_pos; |
---|
@@global.gtid_current_pos |
0-501113309-31329 |
1 row in set (0.02 sec)
dba@192.168.50.111(test_3309) : (none) 05:21:10>select @@global.gtid_current_pos; |
---|
@@global.gtid_current_pos |
0-501113309-32311 |