开发者

MySQL主从复制基于binlog与GTID详解

开发者 https://www.devze.com 2024-10-08 08:59 出处:网络 作者: 郭小路
目录一、基于binlog的主从复制搭建1、准备环境2、数据库中创建并授权有主从复制权限账户3、主库的配置5、修改UUID6、查看从库当前监听主库状态7、其余从库配置与以上相同二、基于GTID的主从复制搭建1、准备三台mysql
目录
  • 一、基于binlog的主从复制搭建
    • 1、准备环境
    • 2、数据库中创建并授权有主从复制权限账户
    • 3、主库的配置
    • 5、修改UUID
    • 6、查看从库当前监听主库状态
    • 7、其余从库配置与以上相同
  • 二、基于GTID的主从复制搭建
    • 1、准备三台mysql机器环境,并且创建mysql并赋予权限,同上
    • 2、主库配置
    • 3、从库配置
    • 4、其余从库做相同配置,查看主从复制状态
  • 总结

    一、基于binlog的主从复制搭建

    1、准备环境

    提前准备三台搭建了MySQL以及关闭防火墙的linux,并保证三台MySQL起始数据一致

    实战中最好是新的mysql,方便操作

    如果无法新建编程客栈需使用数据备份方式将数据库数据恢复一致

    2、数据库中创建并授权有主从复制权限账户

    mysql> grant replication  slave,reload,super on *.*  to 'testslave'@'%' identified by '123456';
    mysql> flush privileges;
    #注意:生产环境中密码采用高级别的密码,实际生产环境中将'%'换成具体的ip
    #注意:该用户理论上只需要主库存在,从库不需要创建,但在实战中,由于各种突发情况从库随时有可能升级为主库,所以所有从库也要创建
    
    replication slave:拥有此权限可以查看从服务器,从主服务器读取二进制日志。
    super权限:允许用户使用修改全局变量的SET语句以及CHANGE  MASTER语句
    reload权限:必须拥有reload权限,才可以执行flush  [tables | logs | privileges]

    3、主库的配置

    修改数据js库配置文件  /etc/my.cnf
    保证主库以下两点
    1.binlog日志功能打开
    2.拥有server-id,并且在该主从复制集群中唯一编程客栈
    log-bin=/opt/xiaolu/log/a.log  (自己写目录)
    server-id=153  (要保持唯一)
    
    重启数据库

    MySQL主从复制基于binlog与GTID详解

    #进入主库查看当前主库状态
    mysql> show master status\G
    # 注意:此次查询关注file和position两条信息,从库配置时使用

    MySQL主从复制基于binlog与GTID详解

    4、从库的配置

    修改数据库配置文件  /etc/my.cnf
    保证从库有唯一的server-id
     
    重启数据库

    MySQL主从复制基于binlog与GTID详解

    进入从库
    
    #查看从库当前监听主库状态
    mysql> show slave status\G    
    Empty set (0.00 sec)          #默认未开启监听
    
    
    # 执行如下命令
    mysql> CHANGE MASTER TO
         MASTER_HOST='192.168.37.153',   #主库ip
         MASTER_USER='testslave',         #主库用户名(第二步创建的)
         MASTER_PASSWORD='123456',        #主库密码(第二步创建的)
         MASTER_LOG_FILE='a.000002',    #主库配置文件(第三步主库配置时截图的参数)
         MASTER_LOG_POS=154;              #主库日志偏移量(第三步主库配置时截图的参数)
    
    # 开启监听    
    mysql> start slave;  
    
    #查看从库当前监听主库状态
    mysql> show slave status\G   
    如果报UUID错误信息就去/opt/xiaolu/data/mysql/auto.cnf文件去改UUID

    提示:重置从库的复制配置命令:RESET SLAVE ALL;

    MySQL主从复制基于binlog与GTID详解

    5、修改UUID

    # vim /opt/xiaolu/data/mysql/auto.cnf
    
    [auto]
    server-uuid=e2ee6d4c-80c9-11ef-9bac-000c297e2bf5
    随便改个数字就可以
    
    [root@localhost mysql]# service mysqld stop
    Shutting down MySQL.. SUCCESS!
    [root@localhost 编程客栈mysql]# service mysqld start
    Starting MySQL. SUCCESS!
    重启数据库
    

    MySQL主从复制基于binlog与GTID详解

    MySQL主从复制基于binlog与GTID详解

    6、查看从库当前监听主库状态

    mysql> show slave status\G

    MySQL主从复制基于binlog与GTID详解

    7、其余从库配置与以上相同

    配置完成后查看主从复制是否实现

    # 查看线程
    mysql> SHOW PROCESSLIST\G

    MySQL主从复制基于binlog与GTID详解

    • 第 1 行 - 表示当前有一个由 root 用户在本地(localhost)执行的 SHOW PROCESSLIST 查询,状态为 starting,说明该命令刚刚开始执行,花费的时间为 0。
    • 第 2 行第 3 行 - 这两行显示的是来自用户 testslave 的两个 Binlog Dump 进程,其主机分别为 192.168.37.154192.168.37.155。它们的状态均为 Master has sent all binlog to slave; waiting for more updates,这意味着从库正在等待来自主库的新更新。

    二、基于GTID的主从复制搭建

    1php、准备三台mysql机器环境,并且创建mysql并赋予权限,同上

    mysql> grant replication  slave,reload,super on *.*  to 'testslave'@'%' identified by '123456';
    mysql> flush privileges;
    #注意:生产环境中密码采用高级别的密码,实际生产环境中将'%'换成具体的ip
    #注意:该用户理论上只需要主库存在,从库不需要创建,但在实战中,由于各种突发情况从库随时有可能升级为主库,所以所有从库也要创建
    
    replication slave:拥有此权限可以查看从服务器,从主服务器读取二进制日志。
    super权限:允许用户使用修改全局变量的SET语句以及CHANGE  MASTER语句
    reload权限:必须拥有reload权限,才可以执行flush  [tables | logs | privileges]

    2、主库配置

    修改数据库配置文件  /etc/my.cnf
    保证以下四点
    log-bin=/opt/xiaolu/log/a.log  #开启binlog日志,master必写
    server-id=153    #定义server id master必写 并保持唯一
    gtid_mode=ON     #开启gtid
    enforce_gtid_consistency=1 #强制gtid  
    
    重启数据库

    MySQL主从复制基于binlog与GTID详解

    3、从库配置

    修改数据库配置文件 /etc/my.cnf
    server-id=154
    gtid_mode=ON
    enforce_gtid_consistency=1
    
    重启数据库

    MySQL主从复制基于binlog与GTID详解

    #进入从库
    mysql> stop slave;   #停止数据库监听
    Query OK, 0 rows affected (0.01 sec)
    
    #设置从库监听信息
    mysql> change master to
    master_host='192.168.37.153',      #主ip 地址  最好用域名
    master_user='testslave',     #主服务上面创建的用户
    master_password='111111', 
    master_auto_position=1;
    Query OK, 0 rows affected, 2 warnings (0.00 sec)
    
    # 开启监听
    mysql> start slave;
    Query OK, 0 rows affected (0.00 sec)
    
    # 查看从库监听状态
    mysql> show slave status\G

    4、其余从库做相同配置,查看主从复制状态

    # 查看线程
    mysql> SHOW PROCESSLIST\G

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号