51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

GTID (全局事务)介绍

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的唯一标识信息
赞(6)
未经允许不得转载:工具盒子 » GTID (全局事务)介绍