乐趣区

关于mysql:MySQL83-可以给-GTID-打标签了

本文介绍了 MySQL 8.3 的一个新个性,给 GTID 打标签~

作者:李富强,爱可生 DBA 团队成员,相熟 MySQL,TiDB,OceanBase 等数据库。置信继续把对的事件做好一点,会有不一样的播种。

爱可生开源社区出品,原创内容未经受权不得随便应用,转载请分割小编并注明起源。

本文约 900 字,预计浏览须要 3 分钟。

摘要

MySQL 8.3 翻新版于 2024 年 1 月 16 号公布,该版本扩大了 MySQL 复制和组复制中应用全局事务标识(GTID)的格局,反对给 GTID 打标签,以反对辨认事务组。此加强性能能够为特定事务组的 GTID 调配惟一标识。例如:蕴含数据操作的事务能够很容易地与治理操作产生的事务辨别开来,只须要比拟他们的 GTID。

GTID 格局

原始格局

原始 GTID 格局是 source_id:transaction_id

  • source_id 标识源服务器,通常用 server_uuid 示意。
  • transaction_id 代表事务在源上提交的程序,例如要提交第一个事务的 transaction_id 为 1,要在同一源服务器上提交的第十个事务的 transaction_id 就是 10。

全局惟一标识符(GTID)是创立并与源服务器上提交的每个事务相关联的惟一标识符。此标识符不仅对其发动的服务器是惟一的,在给定复制拓扑中所有服务器上都是惟一的。

带标签的格局

扩大后的 GTID 格局是 source_id:\<tag>:transaction_id,其中 tag 是最长为 8 个字符的任意字符串。通过设置零碎变量 gtid_next 的值为 automatic:\<tag> 启用,或者设置 gtid_nextuuid:\<tag>:transaction_id 以将单个事务的 uuid 设置为任意值,并为其调配自定义标签。

操作试验

通过 mysql-shell 工具,疾速部署一个 MySQL 8.3 版本的实例(过程略)。

参数 参数值
主机 IP 10.186.58.39
主机名 node 1
端口 3333
MySQL 版本 8.3.0

环境查看

#node1
SQL > select @@hostname,@@version,@@port,@@gtid_mode,@@gtid_executed;
+------------+-----------+--------+-------------+------------------------------------------+
| @@hostname | @@version | @@port | @@gtid_mode | @@gtid_executed                          |
+------------+-----------+--------+-------------+------------------------------------------+
| node1      | 8.3.0     |   3333 | ON          |
+------------+-----------+--------+-------------+------------------------------------------+

给 GTID 打标签,以创立一个用户并赋权操作举例(治理操作)。

# 创立用户和赋权操作,给 GTID 打的标签为 dba

 SQL > set gtid_next="AUTOMATIC:dba";
 Query OK, 0 rows affected (0.0032 sec)

 SQL > create user dba@'%'  identified with mysql_native_password by 'dba';
 Query OK, 0 rows affected (0.0332 sec)

 SQL > select @@hostname,@@version,@@port,@@gtid_mode,@@gtid_executed;
+------------+-----------+--------+-------------+------------------------------------------------+
| @@hostname | @@version | @@port | @@gtid_mode | @@gtid_executed                                |
+------------+-----------+--------+-------------+------------------------------------------------+
| node1      | 8.3.0     |   3333 | ON          | a45d9e72-c33b-11ee-a645-02000aba3a27:dba:1     |
+------------+-----------+--------+-------------+------------------------------------------------+


 SQL > grant all privileges on *.* to dba@'%';
 Query OK, 0 rows affected (0.0126 sec)


 SQL > select @@hostname,@@version,@@port,@@gtid_mode,@@gtid_executed;
+------------+-----------+--------+-------------+--------------------------------------------------+
| @@hostname | @@version | @@port | @@gtid_mode | @@gtid_executed                                  |
+------------+-----------+--------+-------------+--------------------------------------------------+
| node1      | 8.3.0     |   3333 | ON          | a45d9e72-c33b-11ee-a645-02000aba3a27:dba:1-2     |
+------------+-----------+--------+-------------+--------------------------------------------------+

小结:a45d9e72-c33b-11ee-a645-02000aba3a27:dba:1a45d9e72-c33b-11ee-a645-02000aba3a27:dba:2 这两个 GTID 是咱们创立用户并赋权的操作,能够简略了解为 dba:1-2 这两个事务(打标签事务)。

切换为原始 GTID 生成模式,执行创立库和表操作(业务操作)。

# 执行创立库,表操作

 SQL > set gtid_next="AUTOMATIC";
 Query OK, 0 rows affected (0.0032 sec)

 SQL > create database lfq;
 Query OK, 1 row affected (0.0182 sec)


 SQL > select @@hostname,@@version,@@port,@@gtid_mode,@@gtid_executed;
+------------+-----------+--------+-------------+--------------------------------------------------+
| @@hostname | @@version | @@port | @@gtid_mode | @@gtid_executed                                  |
+------------+-----------+--------+-------------+--------------------------------------------------+
| node1      | 8.3.0     |   3333 | ON          | a45d9e72-c33b-11ee-a645-02000aba3a27:1:dba:1-2   |
+------------+-----------+--------+-------------+--------------------------------------------------+

 SQL > create table lfq.t1(c1 int primary key ,c2 varchar(10));
Query OK, 0 rows affected (0.0685 sec)


 SQL > select @@hostname,@@version,@@port,@@gtid_mode,@@gtid_executed;
+------------+-----------+--------+-------------+--------------------------------------------------+
| @@hostname | @@version | @@port | @@gtid_mode | @@gtid_executed                                  |
+------------+-----------+--------+-------------+--------------------------------------------------+
| node1      | 8.3.0     |   3333 | ON          | a45d9e72-c33b-11ee-a645-02000aba3a27:1-2:dba:1-2 |
+------------+-----------+--------+-------------+--------------------------------------------------+

小结:a45d9e72-c33b-11ee-a645-02000aba3a27:1:dba:1-2a45d9e72-c33b-11ee-a645-02000aba3a27:2:dba:1-2 这两个 GTID 是咱们创立库,表的操作,能够简略了解为 a45d9e72-c33b-11ee-a645-02000aba3a27:1-2 这两个事务(非打标签事务)。

总结

  1. 通过对 GTID 打标签,能够比拟容易地把蕴含治理操作产生的事务与数据操作的事务辨别开来。
  2. 性能稍微简略,期待相干性能的进一步丰盛。
退出移动版