mysql学习——GTID的理解

mysql主从复制原理

1 master的dump线程从二进制日志中读取事件,发送给IO线程

2 slave的IO线程接受到事件,写入relay log

3 slave的SQL线程从relay log中读取事件并执行

GTID是mysql5.6的新功能

UUID(服务器ID)+GTID(全局事物ID),可以唯一标识一个事务

事务从master复制到slave时,二进制pos位置可能会发生变化,由于slave配置可能与master不同,这个位置差别可能很大。但是GTID是一样的。

GTID存在于二进制日志中,关闭二进制日志就不会记录GTID。

开启GTID:

1.binlog

2.gtid-mode=on   --这个就够了,开启GTID

3.log-slave-updates  --保障master的事物也会写入slave的binlog,默认关闭

4.enforce-gtid-consistency  --如果语句记录与GTID不一致,报错

change master方式略有不同,不需要记录master的

change master to

master_host='127.0.0.1',

master_port=3306,

master_user='replicator',

master_password='oracle',

master_log_file='master-bin.000002',

master_log_pos=154;

change master to

master_host='127.0.0.1',

master_port=3306,

master_user='replicator',

master_password='oracle',

master_auto_postion=1   --不需要指定master bin文件和postion。slave与master自动协商发送什么事务

show slave status的GTID描述

Retrieved_Gtid_Set=存储在relay log一组GTID

Executed_Gtid_Set=slave已经执行,且已经写入bin log的一组GTID

mysql> show variables like '%GTID%';

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

| Variable_name                    | Value     |

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

| binlog_gtid_simple_recovery      | ON        |

| enforce_gtid_consistency         | OFF       |

| gtid_executed_compression_period | 1000      |

| gtid_mode                        | OFF       |

| gtid_next                        | AUTOMATIC |

| gtid_owned                       |           |

| gtid_purged                      |           |

| session_track_gtids              | OFF       |

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

8 rows in set (0.02 sec)

在没有GTID的情况下,主备切换要保证数据一致性,需要先把master,slave停下来,

使用start slave until命令启动slave到指定的position,这个时候主从就一致了。

猜你喜欢

转载自blog.csdn.net/qq_40687433/article/details/107847842
今日推荐