mysql gtid是什么_Mysql GTID

1、GTID是什么

GTID 全称A global transaction identifier 全局事务id,是MASTER创建的和事务相匹配的ID号;

它不仅在本机上是唯一的,而且在其他服务器上也是唯一的;

gitd与事物一一对应

master每次commit事物的时候就会自动创建gtid

gitd格式是 GTID = source_id:transaction_id (如 04038bcc-fd0c-11e7-9cc5-000c29db6599:1-2)

source_id 一般是发起事物的uuid, 保存在auto.cnf文件中;

transaction_id是事物id, 1-2代表第二个事物;第1-n代表n个事物

2、为什么要用GTID

在主从复制中,尤其是半同步复制中, 由于Master 的dump进程一边要发送binlog给Slave,一边要等待Slave的ACK消息,这个过程是串行的,即前一个事物的ACK没有收到消息,那么后一个事物只能排队候着; 这样将会极大地影响性能;有了GTID后,SLAVE就直接可以通过数据流获得GTID信息,而且可以同步;

另外,主从故障切换中,如果一台MASTER down,需要提取拥有最新日志的SLAVE做MASTER,这个是很好判断,而有了GTID,就只要以GTID为准即可方便判断;而有了GTID后,SLAVE就不需要一直保存这bin-log 的文件名和Position了;只要启用MASTER_AUTO_POSITION即可

当MASTER crash的时候,GTID有助于保证数据一致性,因为每个事务都对应唯一GTID,如果在恢复的时候某事务被重复提交,SLAVE会直接忽略;

3、什么时候用GTID

一般在主从复制的场景下,如果只有单台就没必要使用;

GTID不支持: CREATE TABLE...SELECT语句,因为一个事物一个GTID,这个语句有2个事物,一个CREATE,一个INSERT,所以不支持

CRETAE TEMPORARY TABLE,或者DROP TEMPORARY TABLE不支持

事物和非事物混合使用; 不支持

4、配置GTID

1)修改主配置文件

[root@20liuzhenchao ~]# vim /etc/my.cnf

[mysqld]

basedir = /usr/local/mysql

datadir = /opt/data

socket = /tmp/mysql.sock

port = 3306

pid-file = /opt/data/mysql.pid

user = mysql

server-id=1 //服务器id

gtid-mode=on //开启gtid模式

enforce-gtid-consistency=on //强制gtid一致性,开启后对于特定create table不被支持

log-bin=master-binlog

log-slave-updates=1

binlog-format=row

skip-slave-start=1

2)修改从配置文件

[root@localhost ~]# vim /etc/my.cnf

[mysqld]

basedir = /usr/local/mysql

datadir = /opt/data

socket = /tmp/mysql.sockport = 3306

pid-file = /opt/data/mysql.piduser = mysql

gtid-mode=on

enforce-gtid-consistency=on

server-id=2

log-bin=slave-binlog

log-slave-updates=1

binlog-format=row

skip-slave-start=1

3)配置基于GTID的复制

//主服务器上创建复制账号

mysql> grant replication slave on *.* to 'repl'@'192.168.56.23' identified by 'repl123!';

Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)

//在从服务器上启动同步(需先重启mysqld服务)

mysql> change master to master_host='192.168.56.20',master_user='repl',master_password='repl123!',master_auto_position=1;

Query OK, 0 rows affected, 2 warnings (0.04 sec)

mysql> start slave;

Query OK, 0 rows affected (0.00 sec)

mysql> show slave status \G

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

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.56.20

Master_User: repl

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: master-binlog.000001

Read_Master_Log_Pos: 154

Relay_Log_File: localhost-relay-bin.000003

Relay_Log_Pos: 375

Relay_Master_Log_File: master-binlog.000001

Slave_IO_Running: Yes //此处为yes表示复制线程已启动

Slave_SQL_Running: Yes //此处为yes表示复制线程已启动

4)验证复制效果

在主库上创建一个数据库liuzhenchao

mysql> show databases;

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

| Database |

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

| information_schema |

| mysql |

| performance_schema |

| sys |

| zabbix |

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

5 rows in set (1.03 sec)

mysql> create database liuzhenchao;

Query OK, 1 row affected (0.00 sec)

在从库上查看是否同步

mysql> show databases;

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

| Database |

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

| information_schema |

| liuzhenchao |

| mysql |

| performance_schema |

| sys |

| zabbix |

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

6 rows in set (0.07 sec)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值