• mysql主从之gtid主从搭建


    1. 准备主从环境(1主2从)

    1.1 准备数据路径及配置文件

    数据库软件目录: /opt/mysql/
    数据库数据目录: /data/{master20,slave21,slave22}/{data,binlog}
    主库端口3320
    从库端口分别为3321,3322
    配置文件如下: cat
    > /data/master20/my.cnf <<EOF [mysqld] basedir=/opt/mysql/ datadir=/data/master20/data socket=/data/master20/mysql.sock server_id=100 port=3320 secure-file-priv=/tmp # 配置的数据库安全路径, 能在数据库界面中直接导出结果到该目录下. autocommit=0 log_bin=/data/master20/binlog/master20-bin binlog_format=row gtid-mode=on enforce-gtid-consistency=true log-slave-updates=1 user=mysql character_set_server = utf8mb4 [mysql] prompt=master20 [\d]> EOF
    cat
    > /data/slave21/my.cnf <<EOF [mysqld] basedir=/opt/mysql/ datadir=/data/slave21/data socket=/data/slave21/mysql.sock server_id=110 port=3321 secure-file-priv=/tmp autocommit=0 log_bin=/data/slave21/binlog/slave21-bin binlog_format=row gtid-mode=on enforce-gtid-consistency=true log-slave-updates=1 user=mysql character_set_server = utf8mb4 [mysql] prompt=slave21 [\d]> EOF
    cat
    > /data/slave22/my.cnf <<EOF [mysqld] basedir=/opt/mysql/ datadir=/data/slave22/data socket=/data/slave22/mysql.sock server_id=120 port=3322 secure-file-priv=/tmp autocommit=0 log_bin=/data/slave22/binlog/slave22-bin binlog_format=row gtid-mode=on enforce-gtid-consistency=true log-slave-updates=1 user=mysql character_set_server = utf8mb4 [mysql] prompt=slave22 [\d]> EOF

    1.2 初始化三个实例

    mysqld --initialize-insecure --user=mysql --basedir=/opt/mysql  --datadir=/data/master20/data
    mysqld --initialize-insecure --user=mysql --basedir=/opt/mysql  --datadir=/data/slave21/data
    mysqld --initialize-insecure --user=mysql --basedir=/opt/mysql  --datadir=/data/slave22/data

    1.2 配置systemd启动

    cd /etc/systemd/system
    
    cp mysqld.service master20.service
    cp mysqld.service slave21.service
    cp mysqld.service slave22.service
    
    vim master20.service
    ExecStart=/opt/mysql/bin/mysqld  --defaults-file=/data/master20/my.cnf
    vim slave21.service
    ExecStart=/opt/mysql/bin/mysqld  --defaults-file=/data/slave21/my.cnf
    vim slave22.service
    ExecStart=/opt/mysql/bin/mysqld  --defaults-file=/data/slave22/my.cnf
    chown -R mysql.mysql /data/*
    
    systemctl start master20.service
    systemctl start slave21.service
    systemctl start slave22.service

    1.3 补充:

    以上步骤详情可参考本人另一篇数据库安装: https://www.cnblogs.com/quzq/p/12904956.html

    2. GTID复制

    2.1 GTID介绍

    GTID(Global Transaction ID)是对于一个已提交事务的唯一编号,并且是一个全局(主从复制)唯一的编号。
    它的官方定义如下:
    GTID = source_id :transaction_id
    7E11FA47-31CA-19E1-9E56-C43AA21293967:29    # gtid编号的格式
    什么是sever_uuid,和Server-id 区别?
    核心特性: 全局唯一,具备幂等性

    2.2 GTID核心参数

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

    2.3 构建主从

    master:3320
    slave:3321,3322
    
    3320:
    grant replication slave  on *.* to repl@'%' identified by '123';
    
    2122:
    change master to 
    master_host='10.0.0.51',
    MASTER_PORT=3320, master_user
    ='repl', master_password='123' , MASTER_AUTO_POSITION=1;
    # 该参数会自动读取relaylog中的最后一个gtid号,来向主库申请日志, 如未从relaylog中读取到,则从第一个gtid开始同步
    # 该参数值代表从哪个gtid号开始请求, 如从库是使用xbk物理恢复的,则此处值需要是恢复文件中最后一个gtid号+1 start slave;

    2.4 关于gtid主从的备忘

    1. 主库开启gtid后, 导出的备份文件如果用于从库的恢复, 则在导出时一定不能加 --set-gtid-purged=OFF 参数
      该参数会忽略gtid号, 导致恢复的从库没有gtid号记录.
    2. 不使用以上参数导出的备份, 在恢复从库后, 从库中也会记录有gtid号
    3. 参考: https://www.cnblogs.com/quzq/p/12885971.html

    2.5 GTID 复制和普通复制的区别

    CHANGE MASTER TO
    MASTER_HOST='10.0.0.51',
    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='10.0.0.51',
    master_user='repl',
    master_password='123' ,
    MASTER_AUTO_POSITION=1;
    start slave;

    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就行。
  • 相关阅读:
    POJ 1789
    南华大学 复读机(并查集)
    C
    F
    POJ 1988 Cube Stacking
    并查集(一)
    把采集到的数据发送到一个Google Docs或者Google Form上 这个网站提供了参考和例子
    几种空气颗粒物和空气质量传感器
    整流桥
    STM32 中的CEC
  • 原文地址:https://www.cnblogs.com/quzq/p/12941531.html
Copyright © 2020-2023  润新知