zoukankan      html  css  js  c++  java
  • (十四)基于GTID的主从复制

    (1)GTID主从复制

    1)环境介绍

    /etc/redhat-release 
    CentOS Linux release 7.3.1611 (Core)
    

    MySQL版本:5.7

    mysql> select version();
    +------------+
    | version()  |
    +------------+
    | 5.7.22-log |
    +------------+
    

    2) master端配置

    • 准备数据
    mysql>	create database testdb;
    mysql>	create table testdb.t1(id int,name varchar(50));
    mysql>	insert into testdb.t1 values(1,'jack'),(2,'alex');
    
    • 开启二进制日志和配置server-id
    #vim /etc/my.cnf
    log-bin
    server-id=1
    gtid_mode=ON
    enforce_gtid_consistency=1
    
    • 重启服务器
    #systemctl restart mysqld
    
    • 创建授权账号
    mysql> grant replication slave,replication client on *.* to 'rep'@'192.168.111.%' identified by 'Reprep@123';
    mysql> flush privileges;
    
    • 备份数据库
    mysqldump -uroot -pRedhat@123 -A -R --triggers --routines --events  --single-transaction --master-data=1 --flush-logs >$(date +%F)-mysql-all.sql
    
    • 把备份的数据库文件拷贝到从库主机上
    scp -r 2018-04-26-mysql-all.sql root@192.168.111.152:/root
    
    • 在完整备份后在创建一些数据
    mysql> insert into testdb.t1 values(3,'www');
    mysql> insert into testdb.t1 values(4,'yyyy');
    

    3)slave端配置

    • 验证主库创建的账号是否能够正常登陆,也验证是否有防火墙问题
    # mysql -h192.168.111.151 -urep -p'Reprep@123'
    
    • 配置从库的server-id和设置从库只读
      注意应用程序连接从库的权限不要给所有权限,只让从库只读
    #vim /etc/my.cnf
    log-bin
    server-id=2
    read-only 
    gtid_mode=ON
    enforce_gtid_consistency=1
    master-info-repository=TABLE     \把mysql连接主库的信息保存在表中
    relay-log-info-repository=TABLE
    log_slave_updates = ON
    
    • 重启数据库
    #systemctl restart mysqld
    
    • 把备份导入到从库上
    mysql -uroot -pRedhat@123 </root/2018-04-26-mysql-all.sql  
    
    • 连接主库
    mysql> change master to 
        -> master_host='192.168.111.151',               \生成环境建议使用主机名,不建议使用ip地址
        -> master_user='rep',
        -> master_password='Reprep@123',
    	-> master_auto_position=1;
    change master to master_host='192.168.111.151',master_user='rep',master_password='Reprep@123',master_auto_position=1;
    
    • 开启复制和验证状态
    mysql> start slave;
    mysql> show slave statusG
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
    

    主库上创建数据库:

    从库上验证:

    (2)GTID主主复制

    • 在master1作为从库上指向master2,注意:master2作为从库之前已经change过master1
      这里的host是master2,不要弄错了;同时生产环境建议不要使用ip
    mysql> change master to master_host='192.168.111.152',master_user='rep',master_password='Reprep@123',master_auto_position=1;
    mysql> start slave;
    mysql>show slaveG
    
    • master1插入数据
    mysql>  insert into testdb.t1 values(10,'aaaa');
    
    • master2插入数据同时把master2以前是slave的read-only删除
    mysql> insert into testdb.t1 values(11,'bbbb');
    
    • 验证:发现两边master的数据都能正常同步,very good
    mysql> select * from testdb.t1;
    +------+------+
    | id   | name |
    +------+------+
    |   10 | aaaa |
    |   11 | bbbb |
    

    (3)GTID多主一从

    MySQL5.7中使用的是多源复制

    • 在master1上备份全库,同时把备份文件传给slave1
    #mysqldump -uroot -pRedhat@123 -A -R  --triggers --routines --events --single-transaction --master-data=1 --flush-logs > `date +%F`-mysql-all.sql
    #scp -r 2018-04-26-mysql-all.sql 192.168.111.153:/root
    
    • slave配置
    #vim /etc/my.cnf
    server-id=3
    read-only 
    gtid_mode=ON
    enforce_gtid_consistency=1
    master-info-repository=TABLE     
    relay-log-info-repository=TABLE
    log_slave_updates = ON
    
    • 重启数据库
    systemctl restart mysqld
    
    • 导入备份
    mysql> reset master;
    #mysql -uroot -pRedhat@123 </root/2018-04-26-mysql-all.sql
    
    • 连接主库
    master> change master to master_host='192.168.111.151',master_user='rep',master_password='Reprep@123',master_auto_position=1 for channel 'rep-master1';
    
    master> change master to master_host='192.168.111.152',master_user='rep',master_password='Reprep@123',master_auto_position=1 for channel 'rep-master2';
    
    mysql> start slave;
    ``
  • 相关阅读:
    2015 Multi-University Training Contest 2 1004 Delicious Apples(DP)
    开门人和关门人
    数据降维 实例
    Leetcode题解(5):L58/Length of Last Word
    JavaWeb开发环境搭建
    Linux配置hugepage
    lua的函数初识
    有人离职时经理的反应是?
    svn如何回滚到之前版本
    python用httplib模块发送get和post请求
  • 原文地址:https://www.cnblogs.com/lovelinux199075/p/8956060.html
Copyright © 2011-2022 走看看