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

  • 相关阅读:
    centos出现“FirewallD is not running”怎么办
    Centos7开放及查看端口
    phpRedis函数使用总结
    如何在Windows的PHPstudy中使用redis
    Redis命令操作详解
    不可不知 DDoS的攻击原理与防御方法
    DDoS 攻击与防御:从原理到实践
    ORM Integrity constraint violation: 1052 Column 'id' in where clause is ambiguous
    PHP常用函数大全500+
    Linux彻底卸载Nginx
  • 原文地址:https://www.cnblogs.com/guantou1992/p/12779841.html
Copyright © 2011-2022 走看看