Centos7 Mysql5.6.40 主从结构 GTID 复制

10 篇文章 0 订阅

往期历史

1.docker安装MySQL源码编译
2.Centos7 Mysql5.6.40 主从服务搭建
3.Mysql5.6.40 主从复制故障
4.Centos7 Mysql5.6.40 主从结构 过滤复制
5.Centos7 Mysql5.6.40 主从结构 半同步复制

GTID 复制(5.6新特性,5.7主流)

  1. 介绍

GTID(Global Transaction ID)是对于一个已提交事务的编号,并且是一个全局唯一的编号。
它的官方定义如下:
由两部分组成:GTID = source_id : transaction_id
7E11FA47-31CA-19E1-9E56-C43AA21293967:29

[root@43812cb2f48a data]# cat auto.cnf
[auto]
server-uuid=c8813507-33c2-11ec-8461-0242ac110002
  1. 什么是sever_uuid,和server-id区别?
    server_uuid 是自动生成的,server_id是手工设置的
    uuid是每次重新初始化数据库或者人工删除auto.cnf文件再次重启就会生成新的uuid
  2. :29指的是事务的编号,mysql要求必须是连续,不能断点。
    表现方式:
    :29
    :1-29
    :29-100
  3. 重要参数介绍:
  1. 启动gtid类型,否则就是普通的复制架构
    giid-mode=on
mysql> show variables like 'gtid%';  #查看是否开启,默认关闭
+---------------+-----------+
| Variable_name | Value     |
+---------------+-----------+
| gtid_executed |           |
| gtid_mode     | OFF       |
| gtid_next     | AUTOMATIC |
| gtid_owned    |           |
| gtid_purged   |           |
+---------------+-----------+
5 rows in set (0.00 sec)
  1. 强制GTID一致性
    enforce-geid-consistency=true
    3.(强制更新从库binlog) slave更新是否记录二进制日志(binlog),主要在双主和高可用中必须要加
    log-slave-updates=1

查看参数配置情况命令:
mysql> show variables like ‘%gtid%’;
mysql> show variables like ‘%updates%’;

GTID复制配置过程(准备MHA环境,1主2从)

  1. 服务器环境准备这里使用VMware 创建3个独立的centos服务器
    db01:10.0.0.128
    db02:10.0.0.129
    db03:10.0.0.130

  2. 准备配置文件
    cat > /etc/my.cnf << eof
    [mysqld]
    basedir=/application/mysql
    datadir=/application/mysql/data
    socket=/tmp/mysql.sock
    log-error=/var/log/mysql.log
    log_bin=/data/mysql/mysql-bin
    binlog_format=row
    skip-name-resolve
    server-id=53
    gtid-mode=on
    enforce-gtid-consistency=true
    log-slave-updates=1
    [client]
    socket=/tmp/mysql.sock
    eof

  3. 创建软链接
    ln -s /application/mysql-5.6.40/ /application/mysql
    创建binlog日志存放目录
    mkdir -p /data/mysql

  4. 目录授权
    chown -R mysql.mysql /data/mysql

  5. 创建mysql错误日志文件,并且授权
    touch /var/log/mysql.log
    chown -R mysql.mysql /var/log/mysql.log

  6. 设置mysql_install_db脚本权限
    chmod 700 /application/mysql/scripts/mysql_install_db

  7. 初始化mysql
    /application/mysql/scripts/mysql_install_db --user=mysql --basedir=/application/mysql --datadir=/application/mysql/data

  8. 设置环境变量
    echo ‘PATH=/application/mysql/bin/:$PATH’ >/etc/profile.d/mysql.sh
    source /etc/profile.d/mysql.sh

  9. 设置mysql启动脚本
    cp /application/mysql/support-files/mysql.server /etc/init.d/mysqld

  10. 设置权限
    chmod 700 /etc/init.d/mysqld

  11. 启动mysql服务
    /etc/init.d/mysqld start

  12. 主库创建复制用户
    grant replication slave on . to repl@‘10.0.0.%’ identified by ‘123’;

  13. 配置从库
    change master to
    master_host=‘10.0.0.128’,
    master_user=‘repl’,
    master_password=‘123’,
    MASTER_AUTO_POSITION=1;

  14. 启动主从
    start slave;

  15. 查看主从状态
    show slave status \G
    在这里插入图片描述

GTID 复制和普通复制区别

  1. 在主从复制环境中,主库发生过的事务,在全局都是 由唯一GTID记录,更方便failover和数据补偿
  2. change master to 的时候不在需要binlog 文件名和position 号
  3. 需要配置额外3个参数
  4. 在复制过程中,从库不在依赖master.info文件中记录的file name和position号,而是直接读取最后一个relaylog的 GTID号
  5. mysqldump 备份时,默认会将备份中包含的事务操作,以以下方式:
  1. 关闭日志记录:
    SET @@SESSION.SQL_LOG_BIN= 0;
  2. 告诉从库跳过1-5个GTID号的事务,自动从6开始往后复制(备份中已经有以上事务,直接从下一个GTID开始请求binlog就行):
    SET @@GLOBAL.GTID_PURGED='262483af-5a47-11ec-bf8a-000c29bafee0:1-5';

Gtid错误情况处理

  1. mysql 初始化出现问题
    解决办法:cat /var/log/mysql.log #查看mysql错误日志
[root@oldboy data]# /application/mysql/scripts/mysql_install_db --user=mysql --basedir=/application/mysql --datadir=/application/mysql/data
Installing MySQL system tables...2021-12-11 13:37:24 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2021-12-11 13:37:24 0 [Note] Ignoring --secure-file-priv value as server is running with --bootstrap.
2021-12-11 13:37:24 0 [Note] /application/mysql/bin/mysqld (mysqld 5.6.40-log) starting as process 6147 ...
  1. IO线程启动失败,无法连接主库(检查防火墙是否打开,如果打开关闭防火墙) 从库无法连接主库
[root@oldboy application]# mysql -urepl -p123 -h10.0.0.128
Warning: Using a password on the command line interface can be insecure.
ERROR 2003 (HY000): Can't connect to MySQL server on '10.0.0.128' (113)

查看防火墙是否打开
firewall-cmd --state
关闭防火墙(测试环境)
systemctl stop firewalld.service
在这里插入图片描述
3. GTID 从库误写入操作处理(从库创建dada表,主库在创建dada表)
从库主从已经出错
在这里插入图片描述

解决:注入空事务方法
stop slave; #停止出错从库
set gtid_next='262483af-5a47-11ec-bf8a-000c29bafee0:5'; #找到出错事务
begin;commit; #执行空事务
set gtid_next=‘AUTOMATIC’ #跳过当前错误,后续事务自动同步
start slave #启动主从
在这里插入图片描述
最好的解决方案是从库设置只读

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值