zoukankan      html  css  js  c++  java
  • Mysql GTID

    1、GTID是什么

    GTID 全称A global transaction identifier 全局事务id,是MASTER创建的和事务相匹配的ID号;

    • 它不仅在本机上是唯一的,而且在其他服务器上也是唯一的;
    • gitd与事物一一对应
    • master每次commit事物的时候就会自动创建gtid

    gitd格式是 GTID = source_id:transaction_id (如 04038bcc-fd0c-11e7-9cc5-000c29db6599:1-2)

    source_id 一般是发起事物的uuid, 保存在auto.cnf文件中;

    transaction_id是事物id, 1-2代表第二个事物;第1-n代表n个事物

    2、为什么要用GTID

    在主从复制中,尤其是半同步复制中, 由于Master 的dump进程一边要发送binlog给Slave,一边要等待Slave的ACK消息,这个过程是串行的,即前一个事物的ACK没有收到消息,那么后一个事物只能排队候着; 这样将会极大地影响性能;有了GTID后,SLAVE就直接可以通过数据流获得GTID信息,而且可以同步;

    另外,主从故障切换中,如果一台MASTER down,需要提取拥有最新日志的SLAVE做MASTER,这个是很好判断,而有了GTID,就只要以GTID为准即可方便判断;而有了GTID后,SLAVE就不需要一直保存这bin-log 的文件名和Position了;只要启用MASTER_AUTO_POSITION即可

    当MASTER crash的时候,GTID有助于保证数据一致性,因为每个事务都对应唯一GTID,如果在恢复的时候某事务被重复提交,SLAVE会直接忽略;

    3、什么时候用GTID

    一般在主从复制的场景下,如果只有单台就没必要使用;

    GTID不支持: CREATE TABLE...SELECT语句,因为一个事物一个GTID,这个语句有2个事物,一个CREATE,一个INSERT,所以不支持

    CRETAE TEMPORARY TABLE,或者DROP TEMPORARY TABLE不支持

    事物和非事物混合使用; 不支持

    4、配置GTID

    1)修改主配置文件

    [root@20liuzhenchao ~]# vim /etc/my.cnf
    [mysqld]
    basedir = /usr/local/mysql
    datadir = /opt/data
    socket = /tmp/mysql.sock
    port = 3306
    pid-file = /opt/data/mysql.pid
    user = mysql
    server-id=1    //服务器id
    gtid-mode=on   //开启gtid模式
    enforce-gtid-consistency=on  //强制gtid一致性,开启后对于特定create table不被支持
    log-bin=master-binlog
    log-slave-updates=1
    binlog-format=row
    skip-slave-start=1

    2)修改从配置文件

    [root@localhost ~]# vim /etc/my.cnf
    [mysqld]
    basedir = /usr/local/mysql
    datadir = /opt/data
    socket = /tmp/mysql.sock
    port = 3306
    pid-file = /opt/data/mysql.pid
    user = mysql
    gtid-mode=on
    enforce-gtid-consistency=on
    server-id=2
    log-bin=slave-binlog
    log-slave-updates=1
    binlog-format=row
    skip-slave-start=1

    3)配置基于GTID的复制

    //主服务器上创建复制账号
    mysql> grant replication slave on *.* to 'repl'@'192.168.56.23' identified by 'repl123!';
    Query OK, 0 rows affected, 1 warning (0.00 sec)
    
    mysql> flush privileges;
    Query OK, 0 rows affected (0.00 sec)
    
    //在从服务器上启动同步(需先重启mysqld服务)
    mysql>  change master to master_host='192.168.56.20',master_user='repl',master_password='repl123!',master_auto_position=1;
    Query OK, 0 rows affected, 2 warnings (0.04 sec)
    
    mysql> start slave;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> show slave status G
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: 192.168.56.20
                      Master_User: repl
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: master-binlog.000001
              Read_Master_Log_Pos: 154
                   Relay_Log_File: localhost-relay-bin.000003
                    Relay_Log_Pos: 375
            Relay_Master_Log_File: master-binlog.000001
                 Slave_IO_Running: Yes //此处为yes表示复制线程已启动
                Slave_SQL_Running: Yes //此处为yes表示复制线程已启动

    4)验证复制效果

    在主库上创建一个数据库liuzhenchao
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | sys                |
    | zabbix             |
    +--------------------+
    5 rows in set (1.03 sec)
    
    mysql> create database liuzhenchao;
    Query OK, 1 row affected (0.00 sec)
    
    在从库上查看是否同步
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | liuzhenchao        |
    | mysql              |
    | performance_schema |
    | sys                |
    | zabbix             |
    +--------------------+
    6 rows in set (0.07 sec)
  • 相关阅读:
    juniper ALARM亮红灯
    笔记本设置wifi热点
    基于apache+php+mysql 编译安装详解(转载)
    CentOS6.X 安装MySQL 5.X
    spring 多数据源切换
    Java Reflection(十二):动态类加载与重载
    Java Reflection(十一):动态代理
    Java Reflection(十):数组
    Java Reflection(九):泛型
    Java Reflection(八):注解
  • 原文地址:https://www.cnblogs.com/liuzhenchao/p/10889776.html
Copyright © 2011-2022 走看看