MySQL gtid详解

1. 什么是GTID

从MySQL 5.6.5 开始新增了一种基于 GTID 的复制方式。GTID (Global Transaction ID)是全局事务ID,由主库上生成的与事务绑定的唯一标识,这个标识不仅在主库上是唯一的,在MySQL复制环境内也是唯一的。

2. GTID格式及含义

GTID = source_uuid:transaction_id

source_uuid是发起事务服务器的server_uuid,是一个MySQL实例的唯一标识,可以通过show variables like 'server_uuid'查看。transaction_id代表了该实例上已经提交的事务数量,是一个单调递增的序列号,从1开始,1-2代表第二个事务;第1-n代表n个事务。

GTID复制拓扑中,无论事务被复制了多少次,事务的GTID都保持不变。一旦某个事务在服务器上提交后,后续所有相同GTID的事务都会被忽略,这种机制可以有效避免重复复制的现象,保持数据一致。

示例17a7f2A47-71CA-11E1-9E33-00163e429562:1
含义: 7a7f2A47-71CA-11E1-9E33-00163e429562 是这个节点的server_uuid,1为这个节点上提交的第1个事务的事务号,如果提交了10个事务,GTID会是: 7a7f2A47-71CA-11E1-9E33-00163e429562:1-10

【如果有多个范围要表示,则事务编号的范围可以用冒号分隔】
示例27a7f2A47-71CA-11E1-9E33-00163e429562:1-3:11:47-49
含义:执行了源自7a7f2A47-71CA-11E1-9E33-00163e429562服务器的第1-3个事务、第11个事务、第47-49个事务

【GTID集还能表示来自不同数据源的事务集】
示例37a7f2A47-71CA-11E1-9E33-00163e429562:1-77439,82b6d927-81cc-11ee-9edf-00163e202091:1-98191
含义:执行了源自7a7f2A47-71CA-11E1-9E33-00163e429562服务器的第1-77439个事务和源自82b6d927-81cc-11ee-9edf-00163e202091服务器的第1-98191个事务

MySQL 8.3 创新版于 2024 年 1 月 16 号发布,该版本扩展了 MySQL
复制和组复制中使用全局事务标识(GTID)的格式,支持给 GTID 打标签,以支持识别事务组。此增强功能可以为特定事务组的 GTID
分配唯一标识。例如:包含数据操作的事务可以很容易地与管理操作产生的事务区分开来,只需要比较他们的 GTID。
带标签的格式
扩展后的 GTID 格式是 source_id:<tag>:transaction_id,其中 tag 是最长为 8 个字符的任意字符串。通过设置系统变量 gtid_next 的值为 automatic: 启用,或者设置 gtid_next 为 uuid::transaction_id 以将单个事务的 uuid 设置为任意值,并为其分配自定义标签。

3. GTID相关参数

查看关于gtid的系统参数:

mysql> show variables like '%gtid%';
+-----------------------------------+-----------------------------------------------+
| Variable_name                     | Value                                         |
+-----------------------------------+-----------------------------------------------+
| binlog_gtid_simple_recovery       | ON                                            |
| enforce_gtid_consistency          | ON                                            |
| gtid_executed                     | be423c64-90c8-11ed-bf93-00163e0fcdea:1-1169392|
| gtid_executed_compression_period  | 1000                                          |
| gtid_mode                         | ON                                            |
| gtid_next                         | AUTOMATIC                                     |
| gtid_owned                        |                                               |
React Hooks 是 React 16.8 中新增的特性,它可以让你在函数组件中使用 state、生命周期钩子等 React 特性。使用 Hooks 可以让你写出更简洁、可复用且易于测试的代码。 React Hooks 提供了一系列的 Hook 函数,包括 useState、useEffect、useContext、useReducer、useCallback、useMemo、useRef、useImperativeHandle、useLayoutEffect 和 useDebugValue。每个 Hook 都有特定的用途,可以帮助你处理不同的问题。 下面是 React Hooks 的一些常用 Hook 函数: 1. useState useState 是最常用的 Hook 之一,它可以让你在函数组件中使用 state。useState 接受一个初始状态值,并返回一个数组,数组的第一个值是当前 state 值,第二个值是更新 state 值的函数。 ``` const [count, setCount] = useState(0); ``` 2. useEffect useEffect 可以让你在组件渲染后执行一些副作用操作,比如订阅事件、异步请求数据等。useEffect 接受两个参数,第一个参数是一个回调函数,第二个参数是一个数组,用于控制 useEffect 的执行时机。 ``` useEffect(() => { // 这里可以执行副作用操作 }, [dependencies]); ``` 3. useContext useContext 可以让你在组件树中获取 context 的值。它接受一个 context 对象,并返回该 context 的当前值。 ``` const value = useContext(MyContext); ``` 4. useRef useRef 可以让你在组件之间共享一个可变的引用。它返回一个对象,该对象的 current 属性可以存储任何值,并在组件的生命周期中保持不变。 ``` const ref = useRef(initialValue); ref.current = value; ``` 5. useCallback useCallback 可以让你缓存一个函数,以避免在每次渲染时都创建一个新的函数实例。它接受一个回调函数和一个依赖数组,并返回一个 memoized 的回调函数。 ``` const memoizedCallback = useCallback(() => { // 这里是回调函数的逻辑 }, [dependencies]); ``` 6. useMemo useMemo 可以让你缓存一个计算结果,以避免在每次渲染时都重新计算。它接受一个计算函数和一个依赖数组,并返回一个 memoized 的计算结果。 ``` const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]); ``` 以上就是 React Hooks 的一些常用 Hook 函数,它们可以帮助你更好地处理组件状态、副作用、上下文和性能优化等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值