MySQL学习笔记:GTID

来源:互联网 发布:网络零售的特点与模式 编辑:程序博客网 时间:2024/05/01 22:49

GTID简介

  • MySQL 5.6以上版本
  • 全局事务标识符(Global Transaction Identifiers,简称GTID),每个事务都有一个唯一的标识符
  • 服务器按照事务提交的顺序,为每一个事务分配一个64位的非零数值,这个值为local类型,其他服务器可以给自己的事务分配相同的值
  • 唯一性:加上服务器的UUID后,可变为全局唯一。例如:7a07cd08-ac1b-11e2-9fcf-0010184e9e08:1477
  • GTID组:7a07cd08-ac1b-11e2-9fcf-0010184e9e08:1477-1593
  • GTID只会分配给已经写入binlog的事务,因此,如果关闭了binlog,事务就不会被分配GTID了

GTID配置复制

  • 配置文件启用GTID,修改如下:
...#必须开启binloglog-bin = master-binlon-bin-index = master-bin.index...#开启GTIDgtid-mode = ONlog-slave-updatesenforce-gtid-consistency...
  • 重启服务器,生效配置
  • 切换Master语句:
CHANGE MASTER TOMASTER_HOST = host_of_new_master,MASTER_PORT = port_of_new_master,MASTER_USER = replication_user_name,MASTER_PASSWORD = replication_user_password,MASTER_AUTO_POSITION = 1
  • MASTER_AUTO_POSITION 保证slave在连接master后,自动与master协商应该发送什么事务
  • 可以使用SHOW SLAVE STATUS查看复制的GTID位置

使用GTID选主

  • 如果slave比备用master滞后,可以使用CHANG MASTER TO进行failover
  • 如果slave比备用master新,则需要备用master作为slave的slave进行事务同步后,再执行CHANG MASTER TO
  • 如果是一主多从,则通过比较GTID_EXECUTED来确定newest slave,再对其他slave执行CHANG MASTER TO

GTID在服务器之间的复制

  • GTID事件处理:

    • 如果GTID已经在GTID_EXECUTED中,则跳过该事务
    • 否则,GTID分配给下一个事务继续执行
    • 如果事务提交,事务的GTID就用来产生新的GTID事件,这个事件在事务之前写入binlog
    • GTID事件之后,事务缓存的内容被写入binlog
  • 通过GTID_NEXT生成GTID(一般为AUTOMATIC)

  • 使用GTID_OWNED查看GTID的拥有者(属于哪个session)

Other

  • 可以使用mysqlfailover工具进行启用了GTID的故障转移,简单高效
0 0
原创粉丝点击