zoukankan      html  css  js  c++  java
  • MySQL主从GTID复制

    一、GTID简介

    GTID是对于一个已提交事务的唯一编号,并且是一个全局(主从复制)唯一的编号!

    GTID官方定义如下:

    GTID = source_id :transaction_id
    7E11FA47-31CA-19E1-9E56-C43AA21293967:29
    

    什么是sever_uuid,和Server-id 区别?
    核心特性: 全局唯一,具备幂等性!

    二、GTID重要参数

    gtid-mode=on #启用gtid类型,否则就是普通的复制架构 
    enforce-gtid-consistency=true #强制GTID的一致性 
    log-slave-updates=1 #slave更新是否记入日志 
    

    三、实验环境

    OS IP hostname service
    centos 7.5 192.168.1.1 db01 mysql 5.7.29
    centos 7.5 192.168.1.2 db02 mysql 5.7.29
    centos 7.5 192.168.1.3 db03 mysql 5.7.29

    搭建mysql过程略!

    四、清理环境

    [root@db01 ~]# systemctl stop mysqld
    [root@db01 ~]# rm -rf /usr/local/mysql/data/*
    #删除原始数据库下的目录,并且保证数据库是停止状态
    

    五、准备配置文件

    master(db01)
    [root@db01 ~]# cat > /etc/my.cnf << EOF
    [mysqld]
    basedir=/usr/local/mysql
    datadir=/usr/local/mysql/data
    socket=/usr/local/mysql/mysql.sock
    server_id=1
    port=3306
    secure-file-priv=/tmp
    autocommit=0
    log_bin=/usr/local/mysql/data/mysql-bin
    binlog_format=row
    gtid-mode=on
    enforce-gtid-consistency=true
    log-slave-updates=1
    [mysql]
    prompt=db01[\d]>
    EOF
    
    slave1(db02)
    [root@db02 ~]# cat > /etc/my.cnf << EOF
    [mysqld]
    basedir=/usr/local/mysql
    datadir=/usr/local/mysql/data
    socket=/usr/local/mysql/mysql.sock
    server_id=2
    port=3306
    secure-file-priv=/tmp
    autocommit=0
    log_bin=/usr/local/mysql/data/mysql-bin
    binlog_format=row
    gtid-mode=on
    enforce-gtid-consistency=true
    log-slave-updates=1
    [mysql]
    prompt=db02[\d]>
    EOF
    
    slave2(db03)
    [root@db03 ~]# cat > /etc/my.cnf << EOF
    [mysqld]
    basedir=/usr/local/mysql
    datadir=/usr/local/mysql/data
    socket=/usr/local/mysql/mysql.sock
    server_id=3
    port=3306
    secure-file-priv=/tmp
    autocommit=0
    log_bin=/usr/local/mysql/data/mysql-bin
    binlog_format=row
    gtid-mode=on
    enforce-gtid-consistency=true
    log-slave-updates=1
    [mysql]
    prompt=db03[\d]>
    EOF
    

    六、初始化数据、启动数据库

    [root@db01 ~]# mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql  --datadir=/usr/local/mysql/data
    [root@db01 ~]# systemctl start mysqld
    #三台数据都需进行操作
    

    七、构建主从

    db01[(none)]>grant replication slave on *.* to repl@'192.168.1.%' identified by '123';
    #主库创建主从复制专用用户
    db02[(none)]>change master to
      master_host='192.168.1.1',
      master_user='repl',
      master_password='123',
      master_auto_position=1;
    db02[(none)]> start slave;  
    db03[(none)]>change master to
      master_host='192.168.1.1',
      master_user='repl',
      master_password='123',
      master_auto_position=1;
    db03[(none)]> start slave;    
    

    八、验证主从复制

    db01[(none)]>show master status;
    +------------------+----------+--------------+------------------+----------------------------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                      |
    +------------------+----------+--------------+------------------+----------------------------------------+
    | mysql-bin.000002 |      447 |              |                  | 8365c1b0-813e-11ea-a031-000c29667213:1 |
    +------------------+----------+--------------+------------------+----------------------------------------+
    #注意GTID号
    db02[(none)]>show slave status G
               Retrieved_Gtid_Set: 8365c1b0-813e-11ea-a031-000c29667213:1   #需要恢复的GTID号
                Executed_Gtid_Set: 8365c1b0-813e-11ea-a031-000c29667213:1   #已经执行的GTID号
    db03[(none)]>show slave status G
               Retrieved_Gtid_Set: 8365c1b0-813e-11ea-a031-000c29667213:1
                Executed_Gtid_Set: 8365c1b0-813e-11ea-a031-000c29667213:1
    #从库上的GTID号与主库上的GTID号保持一致,表示同步没有问题			
    

    九、GTID 复制和普通复制的区别

    CHANGE MASTER TO
    MASTER_HOST='192.168.1.1',
    MASTER_USER='repl',
    MASTER_PASSWORD='123',
    MASTER_PORT=3307,
    MASTER_LOG_FILE='mysql-bin.000001',
    MASTER_LOG_POS=444,
    MASTER_CONNECT_RETRY=10;
    
    change master to 
    master_host='192.168.1.1',
    master_user='repl',
    master_password='123' ,
    MASTER_AUTO_POSITION=1;
    
    0)在主从复制环境中,主库发生过的事务,在全局都是由唯一GTID记录的,更方便Failover
    1)额外功能参数(3个)
    2)change master to 的时候不再需要binlog 文件名和position号,MASTER_AUTO_POSITION=1;
    3)在复制过程中,从库不再依赖master.info文件,而是直接读取最后一个relaylog的 GTID号
    4) mysqldump备份时,默认会将备份中包含的事务操作,以以下方式
        SET @@GLOBAL.GTID_PURGED='8c49d7ec-7e78-11e8-9638-000c29ca725d:1';
        告诉从库,我的备份中已经有以上事务,你就不用运行了,直接从下一个GTID开始请求binlog就行。
    

    注意:gtid的主从复制,第一次开启时,读取relaylog的最后gtid+gtid_purge参数,确认复制起点!

    *************** 当你发现自己的才华撑不起野心时,就请安静下来学习吧!***************
  • 相关阅读:
    2018-2019-1 20165208 实验三 实时系统
    2018-2019-1 20165208 《信息安全系统设计基础》第七️周学习总结
    2018-2019-1 20165211 20165230 20165208 实验二 固件程序设计
    2018-2019-1 20165208 《信息安全系统设计基础》第六周学习总结
    2018-2019-1 20165208 《信息安全系统设计基础》第5周学习总结
    2017-2018-2 20155315《网络对抗技术》Exp5 :MSF基础应用
    2017-2018-2 20155315《网络对抗技术》Exp4:恶意代码分析
    2017-2018-2 20155315《网络对抗技术》Exp3:免杀原理与实践
    2017-2018-2 20155315《网络对抗技术》Exp2:后门原理与实践
    2017-2018-2 20155315《网络对抗技术》Exp1:PC平台逆向破解
  • 原文地址:https://www.cnblogs.com/lvzhenjiang/p/14197265.html
Copyright © 2011-2022 走看看