GTID (全局事务)介绍
GTID(global transation id)称为全局事务(事件)ID,标识binlog日志记录的唯一性;
mysql> select @@server_uuid;
+---------------------------------------------------+
| @@server_uuid |
+---------------------------------------------------+
| 7afe4f8c-5e36-11ed-b083-000c29d44f34 |
+---------------------------------------------------+
1 row in set (0.00 sec)
-- 表示数据库每次初始化之后自动生成,不建议手工进行修改;
[root@oldboyxiaoq ~]# cat /data/3306/data/auto.cnf
[auto]
server-uuid=7afe4f8c-5e36-11ed-b083-000c29d44f34
-- 在数据库的数据目录文件中也可以查询到
GTID功能作用:
利用GTID方式管理binlog,实质上就是对于数据库的每个事务产生事件信息打上唯一标识信息(id号);
利用GTID方式管理binlog,主要目的是处理数据库主从问题,解决主从数据库的数据一致性问题;
简单描述:标识事务的唯一性,保证日志恢复时的一致性,并且具备"幂等性";
GTID功能配置:
GTID功能相关参数介绍:
# GTID功能参数信息介绍(3个重要的配置参数)
mysql> select @@gtid_mode;
+-------------------+
| @@gtid_mode |
+-------------------+
| OFF |
+-------------------+
1 row in set (0.00 sec)
-- 设置是否开启显示gtid信息功能(在5.7之后是有个匿名的gtid,是数据库系统自己维护的)
mysql> select @@enforce_gtid_consistency;
+-------------------------------------+
| @@enforce_gtid_consistency |
+-------------------------------------+
| OFF |
+-------------------------------------+
1 row in set (0.00 sec)
-- 设置是否开启GTID强制一致性功能
-- 对某些 SQL 会有限制,例如 CREATE TABLE ... SELECT 必须得分成两条语句执行。
-- OFF: 表示事务允许违反 GTID 一致性。
-- ON: 表示事务不允许违反 GTID 一致性,有相关 SQL 会直接返回异常。
-- WARN:表示事务允许违反 GTID 一致性,但会将警告信息记录到 ERROR LOG。
mysql> select @@log_slave_updates;
+----------------------------+
| @@log_slave_updates |
+----------------------------+
| 1 |
+----------------------------+
1 row in set, 1 warning (0.01 sec)
-- 和配置主从有关(在8.0.26开始 推荐配置log_replica_updates替代log_slave_updates参数)
-- 此参数表示从服务器从主服务器接收的更新信息,是否也会记录在从服务器本地的二进制文件中
GTID功能相关参数激活:
[root@xiaoq ~]# vim /etc/my.cnf
[mysqld]
gtid_mode=on
enforce_gtid_consistency=1
log_slave_updates=on
-- 配置文件信息修改完毕后,重启数据库服务使配置生效
GTID信息查看:
mysql> show master status;
+------------------+-----------+-------------------+-----------------------+-------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+-----------+-------------------+-----------------------+-------------------------+
| binlog.000004 | 156 | | | |
+------------------+-----------+-------------------+-----------------------+-------------------------+
1 row in set (0.03 sec)
-- 在GTID功能被激活后,就会在Executed_Gtid_Set列中显示GTID集合信息;
mysql> create database test3;
Query OK, 1 row affected (0.08 sec)
-- 模拟创建数据库,产生新的事件信息
mysql> show master status;
+------------------+----------+--------------+------------------+----------------------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+----------------------------------------+
| binlog.000004 | 344 | | | 7afe4f8c-5e36-11ed-b083-000c29d44f34:1 |
+------------------+----------+--------------+------------------+----------------------------------------+
1 row in set (0.01 sec)
-- GTID信息随着新的事件产生,随之发生变化
mysql> create database test4;
Query OK, 1 row affected (0.03 sec)
-- 模拟创建数据库,产生新的事件信息
mysql> show master status;
+---------------+----------+--------------+------------------+------------------------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+------------------------------------------+
| binlog.000004 | 532 | | | 7afe4f8c-5e36-11ed-b083-000c29d44f34:1-2 |
+---------------+----------+--------------+------------------+------------------------------------------+
1 row in set (0.00 sec)
-- GTID信息随着新的事件产生,随之发生变化
mysql> show binlog events in 'binlog.000004';
+---------------+-----+----------------+-----------+-------------+-------------------------------------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+---------------+-----+----------------+-----------+-------------+-------------------------------------------------------------------+
| binlog.000004 | 4 | Format_desc | 1 | 125 | Server ver: 8.0.26, Binlog ver: 4 |
| binlog.000004 | 125 | Previous_gtids | 1 | 156 | |
| binlog.000004 | 156 | Gtid | 1 | 233 | SET @@SESSION.GTID_NEXT= '7afe4f8c-5e36-11ed-b083-000c29d44f34:1' |
| binlog.000004 | 233 | Query | 1 | 344 | create database test3 /* xid=6 */ |
| binlog.000004 | 344 | Gtid | 1 | 421 | SET @@SESSION.GTID_NEXT= '7afe4f8c-5e36-11ed-b083-000c29d44f34:2' |
| binlog.000004 | 421 | Query | 1 | 532 | create database test4 /* xid=8 */ |
+---------------+-----+----------------+-----------+-------------+-------------------------------------------------------------------+
6 rows in set (0.00 sec)
-- 在每个数据库操作事件之前,会显示GTID的唯一标识信息