• MySQL 5.7基于GTID的主从复制实践


    GTID是基于mysql事务实现的,如果对mysql事务没啥概念的话,建议先看看

    『浅入深出』MySQL 中事务的实现

    不在单独说明如何搭建mysql单点 请参考

    使用二进制包安装mysql

    然后再看这个gtid的

    https://www.hi-linux.com/posts/47176.html

    现在有这样一个需求:

    主1mysql 是个单点的mysql库,库里有很多数据,想给主1增加个从库,并且使用gtid

    具体操作可以在https://www.hi-linux.com/posts/47176.html 里寻找

    思路如下:

    1.备份主1的数据或者拿主1最新的备份(主1已经开启gtid)

    通过配置文件my.cnf 开启gtid
    gtid-mode = ON
    enforce-gtid-consistency = ON
    log-slave-updates = ON
    
    在线开启gtid 不用重启
    mysql> set global gtid_mode='OFF_PERMISSIVE';
    Query OK, 0 rows affected (0.01 sec)
    mysql> set global gtid_mode='ON_PERMISSIVE';
    Query OK, 0 rows affected (0.01 sec)
    mysql> set global enforce_gtid_consistency=ON;
    Query OK, 0 rows affected (0.00 sec)
    mysql> set global gtid_mode='ON';
    Query OK, 0 rows affected (0.00 sec)
    
    
     查看主库与从库的GTID是否开启
    
    mysql> show variables like "%gtid%";
    
    +----------------------------------+-----------+
    | Variable_name                    | Value     |
    +----------------------------------+-----------+
    | binlog_gtid_simple_recovery      | ON        |
    | enforce_gtid_consistency         | ON        |
    | gtid_executed_compression_period | 1000      |
    | gtid_mode                        | ON        |
    | gtid_next                        | AUTOMATIC |
    | gtid_owned                       |           |
    | gtid_purged                      |           |
    | session_track_gtids              | OFF       |
    +----------------------------------+-----------+
    8 rows in set (0.00 sec)
    
    mysql> show variables like '%gtid_next%';
    +---------------+-----------+
    | Variable_name | Value     |
    +---------------+-----------+
    | gtid_next     | AUTOMATIC |
    +---------------+-----------+
    1 row in set (0.00 sec)
    
    备份常用指令
     /usr/local/mysql/bin/mysqldump --all-databases --single-transaction --master-data=2 --set-gtid-purged=off -F --triggers --routines --events  --user=root -p --socket=/data/mysql3306/logs/mysql.sock > all111_0423.sql
    所需命令

    2.导入从库(从库开启gtid)

    3.主1创建授权同步用户

    在MySQL主服务器上创建
    mysql> grant replication slave on *.* to 'repl'@'192.168.2.%' identified by '000000';
    mysql> flush privileges;
    所需命令

    4.从库指定主库

    CHANGE MASTER TO MASTER_HOST='xxxxx',MASTER_USER='xxxx',MASTER_PASSWORD='xxxx',MASTER_AUTO_POSITION=1;
    
    start slave;

    show slave status G 查看是否两个yes
    如果有报错 就去查看errorlog

    这里我做的时候出现一个错误
    我把root删除了,创建了新的特权用户 结果就报错如下
    018-04-24T14:55:06.459876+08:00 25 [ERROR] Slave SQL for channel '': Error 'Operation ALTER USER failed for 'root'@'localhost'' on query. Default database: ''. Query: 'ALTER USER 'root'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*FAAFFE644E901CFAFAEC7562415E5FAEC243B8B2'', Error_code: 1396
    然后我把root加回来后 就可以了

    好处就是 不用再关心日志的位置,gtid会自己去寻找位置进行同步,多省心。

    还有个需求

    从库需要切换主库

    1.首先查看主库的binlog日志 是否全完整,是否连续

    因为从库从主库同步的时候,得利用binlog日志,日志都没了,从库咋同步

    如果确定日志全呢  直接进行上边的 步骤3和4即可

    否则 按照上边的流程 重新来一遍

  • 相关阅读:
    python基础学习之路No.2 数据类型
    练习题 --- 猜数字游戏
    python基础学习之路No.1
    python+selenium第一步
    Self-introduction
    oracle中的number类型
    简单选项卡切换(二)
    简单选项卡切换(一)
    简单焦点轮播(二)(图片可滚动)
    简单焦点轮播(一)
  • 原文地址:https://www.cnblogs.com/lazyball/p/8927556.html
Copyright © 2020-2023  润新知