今天用到了MariaDB的主从复制,就梳理一下MariaDB的GTID。如果英语不错,请看文档,须知文档为主,博客为辅。
英文文档:https://mariadb.com/kb/en/mariadb/global-transaction-id/
MariaDB的GTID是单独的一种形式,默认就开启。
MariaDB的GTID的组成是 DOMAIN ID-SERVER ID-sequence。举例来说,假设domain id是0,server id是1, sequence 是2334.
那么这个GTID 就是 0-1-2334.
再介绍两个概念:
1. gtid_slave_pos :这个变量的含义是当前的slave在master上面已经读到哪一个位置了。在还没有读的时候,这个值应该为空。
2. gitd_master_pos:这个变量是记载着当前这个机器的binlog中最后一个事务的gtid的值。在还没有任何写操作的时候,应该为空。
最后,命令的介绍:
当建立一个空的slave的时候,命令为:
CHANGE MASTER TO master_host=192.168.1.22, master_port=3310, master_user=root, master_use_gtid=current_pos;
start slave;
当已经知道要从某个gtid开始同步的时候,用slave_pos, 命令为:
set global gtid_slave_pos="0-1-2334"; #Option
CHANGE MASTER TO master_host=192.168.1.22, master_port=3310, master_user=root, master_use_gtid=slave_pos;
start slave;
至此,MariaDB 的 Replication 介绍结束。
一种常见错误:之前成功建立主从关系,运行一段时间,后来断掉主从关系,在主上执行reset master;在从节点上执行stop slave;reset slave all;
然后再按照上面的步骤,就会出错。出现的错误时主从同步可以建立起来,但是一旦开始同步就出错。
解决方法: 在change master to 之前执行 set global gtid_slave_pos=‘’;