zoukankan      html  css  js  c++  java
  • mysql的GTID主从复制方式

    Mysql 的GTID主从复制方式

    GTID的作用

    GTID 是‘全局事务ID’的意思,在 MySQL5.6 中被添加进来

    以前 MySQL 的主从复制是基于复制点的,slave 从 master 二进制日志的某个位置开始复制

    有了 GTID 之后,就多了一种复制方式,MySQL 在每个事务操作时都会分配一个全局唯一的ID,slave 就可以基于这个ID进行复制,只要是自己没有复制过的事务,就拿过来进行复制,可以不用关心具体的复制位置了

    基于GTID复制的优缺点

    优点

    可以更方便的故障转移,出现问题时,多个slave不用根据新master的二进制偏移量来同步了

    主从配置更简单,在后面的配置过程中就可以看到

    缺点

    增加了SQL限制,例如不可以使用 create table ... select ... 这种方式直接建表插数据,必须分开,而在基于偏移量复制时是没有任何限制的

    MySQL版本限制,GTID是5.6时加入的,在5.7中被进一步完善,建议在5.7或者5.6的后期版本中使用,所以老版本无法使用,而且如果你的MySQL集群高可用方案使用的是MMM,那么也无法使用GTID,MMM只支持偏移量复制,MHA可以支持GTID

    GTID主从复制的配置思路

     
     

    配置过程

    准备两台MySQL

    Master中的操作

    (1)确定 server uuid 不同

    首先要确保两个MySQL的 server_uuid 不同,例如使用复制出来的两台虚机,或者在Docker中使用同一MySQL镜像的两个容器时,就会出现 uuid 相同的情况,会使复制失败

    检查两个MySQL的uuid

    mysql> SHOW VARIABLES like '%server_uuid%';

    值相同时需要修改,查看 my.cnf 中 datadir 的位置,其目录下有一个文件 auto.cnf,把其中的 server-uuid 值改一下,注意不要增减长度,例如把最后一个字符改下即可

    (2)配置GTID

    修改 /etc/my.cnf,在[mysqld]下添加:

    [mysqld]

    ...

    log-bin=mysql-bin

    server-id=221

    gtid_mode=on

    enforce-gtid-consistency=true

    ...

    重启MySQL,登录客户端检查一下GTID是否已经开启

    mysql> show global variables like '%gtid%';

    配置的那两项为'ON'时说明配置成功

    (3)导出数据

    开始复制之前要使master与slave中的初始数据相同,使用适合自己的工具进行数据同步,例如使用 mysqldump

    mysqldump --single-transaction --master-data=2 --triggers --routines --all-databases -uroot -p111111 > all.sql

    把生成的 all.sql 发送到 slave

    (4)创建复制用户

    创建一个用户,用于slave执行复制

    mysql> GRANT REPLICATION SLAVE ON *.* to 'gtidrepli'@'%' identified by '123456';

    Slave中的操作

    (1)配置GTID

    修改 /etc/my.cnf,在[mysqld]下添加:

    server_id=207

    log-bin=mysql-bin

    read_only=on

    gtid_mode=on

    enforce-gtid-consistency=true

    master_info_repository=TABLE

    relay_log_info_repository=TABLE

    保存后重启MySQL

    (2)导入数据

    mysql -uroot -p111111 < all.sql

    (3)指定Master

    使用 change master 命令配置 master 信息

    mysql> change master to master_host='192.168.31.221',master_user='gtidrepli',master_password='123456',master_auto_position = 1;

    (4)启动slave

    mysql> start slave;

    检查slave状态

    mysql> show slave status G;

    以下两项为 YES 说明复制成功

    Slave_IO_Running: Yes

    Slave_SQL_Running: Yes

    可以到master中做一些测试操作,到slave中检查是否已经同步



    链接:https://www.jianshu.com/p/edf278c360b4

  • 相关阅读:
    Java实现各种内部排序算法
    Java实现堆排序(大根堆)
    Java对象的序列化和反序列化
    Java实现链式存储的二叉查找树(递归方法)
    337. House Robber III(包含I和II)
    318. Maximum Product of Word Lengths
    114. Flatten Binary Tree to Linked List
    106. Construct Binary Tree from Inorder and Postorder Traversal
    105. Construct Binary Tree from Preorder and Inorder Traversal
    96. Unique Binary Search Trees(I 和 II)
  • 原文地址:https://www.cnblogs.com/guantou1992/p/12779841.html
Copyright © 2011-2022 走看看