mysql 5.6 gtid 复制_Mysql-5.6基于GTID主从复制

本文介绍了GTID(全局事务ID)在MySQL 5.6中的作用,包括如何生成、用途和配置,以及如何通过配置binlog_format、gtid_mode等优化复制性能,确保数据一致性。涵盖了主从复制、事务ID管理和一致性保障的关键步骤。

一、术语解析

1.TID:Transaction ID,事务的ID号:也就是说在mysql复制中每一个事务都有自己的ID号(随机数)

2.GTID:Global Transaction ID,全局事务ID,在整个事务架构中每一个事务ID号是全局唯一的,不止是在一个节点上而是整个主从

复制架构中每任何两个事务的ID号都不会相同。

3.全局事务ID是怎么生成的?简单来讲是由mysql服务器自动管理的,在mysql5.6以后每一个mysql服务器都有一个全局唯一的ID号叫

做uuid,通用唯一识别码 (Universally Unique Identifier),而GTID就是由当前节点的UUID(一个128位的随机数)和为当前

节点生成的随机数(TID)组成的,因此只要UUID不同再在此基础上保证事务ID不同就保证全局不一样了。

4.全局事务ID有何用处?简单来讲GTID能够保证让一个从服务器到其他的从服务器那里实现数据复制而且能够实现数据整合的。GTID

在分布式架构中可以保证数据的一致性。从而也实现了mysql的高可用性。

5.GTID相关操作:默认情况下将一个事务记录进二进制文件时将首先记录它的GTID而且GTID和事务相关信息一并要发送给从服务器由

从服务器在在本地应用认证但是绝对不会改变原来的事务ID号。

6.因此在GTID的架构上就算有了N层架构,复制是N级架构、事务ID依然不会改变;有效的保证了数据的完整和安全性。

二、新增选项

1.MySQL5.6引入的GTID(Global Transaction IDs)使得其复制功能的配置、监控及管理变得更加易于实现,且更加健壮。

2.要在MySQL 5.6中使用复制功能,其服务配置段[mysqld]中于少应该定义如下选项:

2.1. binlog-format:二进制日志的格式,有row、statement和mixed几种类型;

需要注意的是:当设置隔离级别为读提交READ-COMMITED必须设置二进制日志格式为ROW,现在MySQL官方认为STATEMENT

这个已经不再适合继续使用;但mixed类型在默认的事务隔离级别下,可能会导致主从数据不一致;log-slave-updates

(slave更新是否记入日志)、gtid-mode(gtid类型)、enforce-gtid-consistency(强制gtid一致性)、report-port和

report-host:用于启动GTID及满足附属的其它需求;

2.2.master-info-repository(资源库)和relay-log-info-repository:启用此两项,可用于实现在崩溃时保证二进制及从服务器安全的功能;

2.3.sync-master-info:确保服务器崩溃时无信息丢失;

2.4.slave-paralles-workers:设定从服务器的SQL线程数;0表示关闭多线程复制功能;值与你要复制的数据库数目相同即可;

2.5.binlog-checksum校验码、master-verify-checksum和slave-sql-verify-checksum:启用复制有关的所有校验功能;

2.6.binlog-rows-query-log-events:用于在二进制日志详细记录事件相关的信息,可降低故障排除的复杂度;

2.7.log-bin:启用二进制日志,这是保证复制功能的基本前提;

2.8.server-id:同一个复制拓扑中的所有服务器的id号必须惟一;

三、操作步骤

主:station20:192.168.1.20

从:station21:192.168.1.21

support-files/my-default.cnf 几乎为空文件,mysql-5.6不提供my.cnf

------------------------------------------------------------------------------------------------------

master 配置

server_id=11

log-bin=mysql-bin

log-slave-updates=true          # slave更新是否记入日志

binlog_format=row               # 二进制格式 row模式 三种模式statement语句模式,row行模式,mixed混合模式

gtid-mode=on                    # 启用gtid类型,否则就是普通的复制架构

enforce-gtid-consistency=true   # 强制GTID的一致性

master-info-repository=TABLE    # Master信息记录库=表/文件

relay-log-info-repository=TABLE # 中继日志信息记录库

sync-master-info=1              # 同步主库信息

slave-parallel-workers=2        # 从服务器的SQL线程数,与复制库数目相同

binlog-checksum=CRC32           # 校验码

master-verify-checksum=1        # 主服校验

slave-sql-verify-checksum=1     # 从服校验

binlog-rows-query-log_events=1  # 二进制日志详细记录事件

------------------------------------------------------------------------------------------------------

slave 配置

server_id=12

log-bin=mysql-bin

log-slave-updates=true

binlog_format=row

gtid-mode=on

enforce-gtid-consistency=true

master-info-repository=TABLE

relay-log-info-repository=TABLE

sync-master-info=1

slave-parallel-workers=2

binlog-checksum=CRC32

master-verify-checksum=1

slave-sql-verify-checksum=1

binlog-rows-query-log_events=1

skip-slave-start               # slave复制进程不随mysql启动而启动

------------------------------------------------------------------------------------------------------

read_only 只读参数

查看show variables like 'read_only';

mysql5.6以后每台mysql服务器都有一个全局唯一的ID号叫做uuid,GTID就是由当前节点的UUID(一个128位的随机数)和

为当前节点生成的随机数(TID)组成的,因此只要UUID不同再在此基础上保证事务ID不同就保证全局不一样。

mysql -e "show global variables like '%uuid%';"

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

|Variable_name  | Value                                |

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

|server_uuid    |3eda76df-e355-11e3-8d42-000c294698bf  |

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

创建复制用户 (在所有主从上都执行一次并开放3306,方便故障切换)

grant replication slave,replication client on *.* to replicator@'10.%'identified by 'replicator';

flush privileges;

mysqldump 参数 --set-gtid-purged=OFF 导出时忽略GTID

mysqldump -uowluser -h 10.251.209.211 -ppasswd  --set-gtid-purged=OFF --single-transaction  --databases owl22 >/root/owl22.sql

从库连接主库

change master to master_host='10.251.209.211', master_user='replicator',master_password='replicator', master_port=3306, master_auto_position=1;

start slave;

stop  slave;提升为主

reset slave;删除日志

延时30秒执行

change master to master_host='10.251.209.211', master_user='replicator',master_password='replicator', master_port=3306,master_auto_position=1, master_delay=30;

mysql>show slave status \G

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

Slave_IO_State: Waiting formaster to send event

Master_Host: 192.168.1.20

Master_User: repluser

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql-bin.000003

Read_Master_Log_Pos: 151

Relay_Log_File:station21-relay-bin.000002     不用配置,自动生成中继日志

Relay_Log_Pos: 361

Relay_Master_Log_File: mysql-bin.000003

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: 151

Relay_Log_Space: 569

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:

Replicate_Ignore_Server_Ids:

Master_Server_Id: 1

Master_UUID:3eda76df-e355-11e3-8d42-000c294698bf

Master_Info_File:mysql.slave_master_info

SQL_Delay: 0

SQL_Remaining_Delay: NULL

Slave_SQL_Running_State: Slave has readall relay log; waiting for the slave I/O thread to update it

Master_Retry_Count: 86400

Master_Bind:

Last_IO_Error_Timestamp:

Last_SQL_Error_Timestamp:

Master_SSL_Crl:

Master_SSL_Crlpath:

Retrieved_Gtid_Set:

Executed_Gtid_Set:

Auto_Position: 1

mysql>show processlist;

| Id | User       | Host      | db   | Command | Time | State                                                                      | Info            |

|  1 | systemuser |           | NULL | Connect |  164 | Slave has read all relay log; waitingfor the slave I/O thread to update it | NULL            |

|  2 | systemuser |           | NULL | Connect |  164 | Waiting for master to send event                                           | NULL            |

|  3 | systemuser |           | NULL | Connect |  164 | Waiting for an event fromCoordinator                                       | NULL            |

|  4 | systemuser |           | NULL | Connect |  164 | Waiting for an event fromCoordinator                                       | NULL            |

|  5 | systemuser |           | NULL | Connect |  164 | Waiting for an event fromCoordinator                                       | NULL            |

|  6 | systemuser |           | NULL | Connect |  164 | Waiting for an event fromCoordinator                                       | NULL            |

|  7 | root       | localhost | NULL | Query   |     0| init                                                                       | show processlist|

4个复制线程,主库上同时创建4个数据库,每个数据库事务启动一个复制线程,这些复制线程可同时启动;

主从同步测试

创建数据库测试同步 方法一  create table t1(id int);

创建数据库测试同步 方法二

create database o1;

use o1;

create table t1 (id int(3),name char(10));

insert into t1 values(001,'ming');

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值