什么是GTIDs ?
global transaction identifiers mysql 5.6.5新加的一项技术
GTIDs是完全基于事务的,因此不支持MYISAM存储引擎(兼容性不好)
添加新的slave或者当发生故障转移需要将master身份迁移到slave时,无需考虑是那一个二进制日志以及那一个position
GTID 由source_UUID transaction_id两部分组成
source_id 来源于server_id,可以再aoto.cnf中看到
transaction_id 是一个序列数字,从小到大自动生成 123
<code>server_uuid</code>
<code>[auto]</code>
<code>server-uuid=9d0f0069-9d66-11e4-8a94-000c292cfb85</code>
使用GTIDs的一些限制条件
1,不支持MYISAM。导致多个GTID分配给同一个事务
2,create table 。。。。select语句不支持
3,create/DROP temporary table 语句不支持
4,必须使用enforce-gtid-consistency参数 强制GTID一致
5,sql-slave-skip-counter不支持 配置replication时候,可以使用此参数跳过一些错误。在GDIT模式不支持
6,在mysql5.6.9之后的版本导入使用mysqldump制作的备份时,需要保证二进制日志不包含GTIDs
7,mysql5.6.7之前,使用mysql_upgrade命令会出现问题
配置基于GTIDs的replication
配置GTID的replication需要binlog的format=row
step1:
将master和slave服务器设置为read_only
<code>set</code> <code>global</code> <code>read_only=</code><code>ON</code><code>;</code>
step2:停止master和slave服务器的mysql
service mysqld stop
step3:开启GTIDs
开启GTID需要在两台机器上都配置
<code>gtid-mode=</code><code>on</code>
<code>log-bin</code>
<code>log-slave-updates</code>
<code>enforce-gtid-consistency</code>
<code>另外,slave在这个环节还需要增加skip-slave-start参数 ,( 先不启动slave,还需要其他配置)</code>
<code>serveice mysqld start;</code>
step4:
<code>change master </code><code>to</code>
<code> </code><code>master_host=</code><code>'192.168.20.238'</code><code>,</code>
<code> </code><code>master_user=</code><code>'repl'</code><code>,</code>
<code> </code><code>master_password=</code><code>'123456'</code><code>,</code>
<code> </code><code>master_auto_position=1;</code>
<code>start slave;</code>
<code>show slave status\G;</code>
显示Auto_Position: 1 说明已经运行在GTIDs的模式下了 。
接下来更新master
<code>show slave status\G;</code>
<code> </code><code>Retrieved_Gtid_Set: 61816754-9d68-11e4-8a9f-000c29c1d1ea:1-8</code>
<code> </code><code>Executed_Gtid_Set: 61816754-9d68-11e4-8a9f-000c29c1d1ea:1-8</code>
相同表示和master数据完全一致
如果需要切换 ,只需将slave指向新的master、
(change master to .....................................)
本文转自crazy_charles 51CTO博客,原文链接:http://blog.51cto.com/douya/1606169,如需转载请自行联系原作者