(5.8)mysql高可用系列——MySQL中的GTID复制(实践篇)

目录:

【0】概念

一、基于GTID的异步复制(一主一从)无数据/少数据搭建

【1】环境

【2】安装 mysql utilities(本文借助该工具进行安装)

【3】开始配置

#【3.1】在主库上 准备复制账户 
#【3.2】参数配置(主从都配)
#【3.3】重启两台mysql
#【3.4】主库上查看binlog
#【3.5.1】使用mysqlreplicate(mysql utilities工具)命令配置
#【3.5.2】使用传统方式配置
#【3.6】主从数据测试(在主库上跑)

【4】我的其他文章
  【4.1】mysql GTID复制实践
【5】核验
  【5.1】show slave status\G 查看是否有误
  【5.2】核验之前创建的用户是否有同步过来
  【5.3】在主库创建测试数据库与测试表查看同步情况
  【5.4】show global variables like ‘%gtid%‘ ; 查看GTID信息

二、基于GTID的无损半同步复制(一主一从)(mysql5.7)基于大数据量的初始化

正文:

【0】概念

【0.5】GTID 复制(mysql 在 5.6.2 及之后开始支持GTID):

      【2.5.1】GTID(Global Transaction Identifiers)概念:

        对于一个已提交事务的编号,事务的唯一编号,并且是一个全局唯一的编号。GTID和事务会记录到binlog中,用来标识事务。

        GTID是用来替代以前,传统复制方法(binlog+position),mysql 5.6.2开始支持GTID。

        mysql支持GTID后,一个事务在集群中就不再孤单,在每一个节点中,如果存在具相同标识符的情况,可以避免同一个事务,在同一个节点出现多次的情况。

          (可以初步理解成row模式的,和statement的区别,前者记得是具体做了什么事,后者记录的是位置)

        GTID的出现最直接的效果就是,每一个事物在集群中具有了唯一性的意义,相对于行复制来讲数据安全性更高,故障切换更简单。

      【0.5.2】简单案例解释概念:

        比如,当我们一主2从,主出故障后切换到从DB1上去了,那么另外2台机器,需要重新手动构建主从;

        具体为:     

-- 使用传统方式构建的主库宕机重新搭建
-- 麻烦点:每台机器的Binlog名字和Postion位置点都不一样,需要重新定位文件在哪里,位置在哪里
change master to
master_host=‘xxx‘,
master_user=‘xxx‘,
master_password=‘xxx‘,
master_port=‘xxx‘,
master_log_file=‘xxx‘,
master_log_pos=‘xxx‘;

-- 使用GTID方式的主库宕机重新搭建
-- 优势点:每台机器上的GTID都是一样的,不需要管文件是哪个,位置在哪里,可以自动根据GTID定位
change master to
master_host=‘xxx‘,
master_user=‘xxx‘,
master_password=‘xxx‘,
master_port=‘xxx‘,
master_auto_postion=1;

 

      【0.5.3】GTID的组成

          GTID 是由 server_uuid:Sequence_Number 组成;

            (1)server_uuid:是一个mysql实例的全局唯一表示;存放在 ${datadir}/auto.cnf

            (2)Sequence_Number:是mysql内部的一个事务的标号,一个mysql实例不会重复的序列号(保证服务器内唯一),也表示在该实例上已经提交事务的数量,并且随着事务提交而递增。

            (3)根据GTID可以知道事务最初是在哪个实例上提交的,方便故障排查和切换

一、基于GTID的异步复制(一主一从)无数据/少数据搭建

【1】环境

  操作系统:CentOS linux 7.5

  数据库版本:5.7.24

  数据库架构:主从复制,主库用于生产,从库用于数据容灾和主库备机,采用默认传统的异步复制。

  主库IP:192.168.1.203  端口:3306

  从库IP:192.168.1.204  端口:3306

【2】安装 mysql utilities(本文借助该工具进行安装)

cd /download
wget https://cdn.mysql.com/archives/mysql-utilities/mysql-utilities-1.6.5.tar.gz
tar xvf mysql-utilities-1.6.5.tar.gz
cd mysql-utilities-1.6.5
python setup.py build
python setup.py install
mysqldiff --version

没网的话去官网下载,在 download=》Archives=》左边导航栏里有MySQL Utilities

【3】开始配置

#核心语句:mysqlreplicate [email protected]:3306 [email protected]:3306 --rpl-user=rpl:passwd

#【3.1】在主库上 准备复制账户 
create user ‘rpl‘@‘192.168.1.%‘ identified by ‘123456‘;
grant replication slave on *.* to ‘rpl‘@‘192.168.1.%‘;
flush privileges;
select user,host from mysql.user;

#【3.2】参数配置(主从都配)
#replication_new
log_bin=/mysql/log/3306/binlog/mysql-bin #开启binlog
log_bin_index=/mysql/log/3306/mysql-bin.index
binlog_format=row
binlog_rows_query_log_events=on
max_binlog_size=2048

bind-address=0.0.0.0
server_id=2013306 #注意,这里从库的server_id和主库一定不能一样
expire_logs_days=7 #超过7天的binlog清理
innodb_support_xa=1
binlog_cache_size=1M
log_bin_trust_function_creators=1 #同步存储过程、函数、触发器
innodb_flush_log_at_trx_commit=1
sync_binlog=1
transaction-isolation=read-committed
#slave replication
relay_log=/mysql/log/3306/relaylog/mysql-relay.log
log-slave-updates=1
read_only=1
slave-parallel-type=LOGICAL_CLOCK
slave-parallel-workers=4
master_info_repository=table #master_info 会记录到 mysql.slave_master_info
relay_log_info_repository=table #relay_log 会记录到,mysql.slave_relay_log_info
relay_log_recovery=1
slave_skip_errors=ddl_exist_errors
slave_preserve_commit_order=1

#增加的GTID参数gtid_mode=onenforce_gtid_consistency=1 #on:当发现语句/事务不支持GTID时,返回错误信息log-slave-updates=1binlog_gtid_simple-recovery=1 #5.7.6以下默认为off,5.7.6以上默认为on

#【3.3】重启两台mysqlservice mysql restart

#【3.4】主库上查看binlogmysql -uroot -p123456show master stauts; -- 记录下file_name 和 file_pos

#【3.5.1】使用mysqlreplicate(mysql utilities工具)命令配置在从库上使 slave 与 master 建立连接,从而同步  #(1)从库配置(但是在主库上跑就好,这样多个从库都只需要在主库上跑即可)mysqlreplicate --master=root:[email protected]:3306 --slave=root:[email protected]:3306 --rpl-user=rpl:123456 -b

  #(2)测试#测试test库是否一致(主库运行)mysqlreplicate --master=root:[email protected]:3306 --slave=root:[email protected]:3306 --rpl-user=rpl:123456 --test-db=testdb#检查复制(主从均可以运行,检查从库)mysqlrplcheck --master=root:[email protected]:3306 --slave=root:[email protected]:3306 -s#检查复制数据一致性mysqlrplsync --master=root:[email protected]:3306 --slave=root:[email protected]:3306

#【3.5.2】使用传统方式配置
-- 使用GTID方式的主库宕机重新搭建
-- 优势点:每台机器上的GTID都是一样的,不需要管文件是哪个,位置在哪里,可以自动根据GTID定位
change master to
master_host=‘xxx‘,
master_user=‘xxx‘,
master_password=‘xxx‘,
master_port=‘xxx‘,
master_auto_position=1;

#【3.6】主从数据测试(在主库上跑)create database test1;use test1;create table test1(id int);insert into test1 values(1),(2),(3);commit;select * from test1;主库

从库

同步成功!

【4】我的其他文章

  【4.1】mysql GTID复制实践:https://www.cnblogs.com/gered/p/11417019.html

【5】核验

【5.1】show slave status\G 查看是否有误

  

  OK。两个线程启动了,Error字样的字段也没有任何问题。

【5.2】核验之前创建的用户是否有同步过来

  

  OK,没有问题。

【5.3】在主库创建测试数据库与测试表查看同步情况

#创建test2库,以及test2.test1表
create database test2;
create table test2.test1(id int);
insert into test2.test1 values(1);commit;
select * from test2.test1;

  从库查看

  select * from test2.test1;

    

  OK 核验完成。

【5.4】show global variables like ‘%gtid%‘ ; 查看GTID信息

    

    可以查看是否开启,图中框出来的是最新事务的GTID,可以在主从上对照查看事务是否同步。

【5.5】查看gtid执行情况(系统表 mysql.gtid_executed)

  看,正好执行了3个事务

  

  

二、基于GTID的无损半同步复制(一主一从)(mysql5.7)基于大数据量的初始化

【1】基于大数据量备份初始化从库的核心代码

-- 从库:利用备份初始化核心代码reset master;reset slave;
set @TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN;
set @@SESSION.SQL_LOG_BIN = 0;
set @@GLOBAL.GTID_PURGED = ‘backup infomation‘s GTID‘; -- 核心
set @@SESSION.SQL_LOG_BIN = @TEMP_LOG_BIN;

-- 为了避免报错:@@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED is empty. 必须要加上reset master;

-- 5.7增强半同步额外参数
plugin_dir=/mysql/app/mysql/lib/plugin/
plugin_load=rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so

#如果是5.7,参数前面加上loose_,如下列,如果是5.6 则直接使用 rpl_semi_sync_master_enabled=1 之类的就好了。
#我这里是5.7就直接做增强半同步了(loseless Semisynchronous )
loose_rpl_semi_sync_master_enabled=1 #MySQL开启主的半同步复制(rpl_semi_sync_master_enabled)
loose_rpl_semi_sync_slave_enabled=1 #MySQL5.6开启从的半同步复制
loose_rpl_semi_sync_master_timeout=5000 #超时5秒,切回异步
rpl_semi_sync_master_wait_for_slave_count=1 #至少收到1个slave发会的ack
rpl_semi_sync_master_wait_point=AFTER_SYNC #MySQL 5.7的方法,AFTER_SYNC(default,增强半同步) & AFTER_COMMIT(传统半同步)
 

【2】mysqldump备份恢复实现

【2.1】mysqldump备份与查看  

mysqldump的方式:

1、在备份的时候指定--master-data=2(来保存binlog的文件号和位置的命令)。

2、使用mysqldump的命令在dump文件里可以看到下面两个信息:

SET @@SESSION.SQL_LOG_BIN=0;

SET @@GLOBAL.GTID_PURGED=‘7800a22c-95ae-11e4-983d-080027de205a:1-8‘;

3、将备份还原到slave后,使用change master to命令挂载master端。

备份命令示例:

mysqldump -A -uroot -p123456 --single-transaction --master-data=2 --flush-privileges --routines --flush-logs >/mysql/backup/fulldb.bak

产生警告:告诉我们,数据会转储成GTID模式,如果想要拿一个完整的备份,请加上参数 --set-gtid-purged=OFF..这里我们不必理会

  Warning: A partial dump from a server that has GTIDs will by default include the GTIDs of all transactions, even those that changed suppressed parts of the database.

  If you don‘t want to restore GTIDs, pass --set-gtid-purged=OFF. To make a complete dump, pass --all-databases --triggers --routines --events.

查阅mysqldump出来的文件,发现里面有设置GTID 的gtid_purged的配置,无需我们操心

  

【2.2】查看GTID配置参数

   

【2.3】开始5.7基于GTID的增强半同步配置

  

-- 在主库上
create user ‘rpl‘@‘192.168.1.%‘ identified by ‘123456‘;
grant replication slave on *.* to ‘rpl‘@‘192.168.1.%‘;
flush privileges;
select user,host from mysql.user;

-- 在从库上stop slave;reset slave;
change master to
master_host=‘192.168.1.201‘,
master_user=‘rpl‘,
master_password=‘123456‘,
master_port=3306,
master_auto_position=1;

start slave;

【2.4】核验

  利用【一】中的【5】核验

  

  利用【5.5】查看gtid执行情况(系统表 mysql.gtid_executed)

  看,正好创建用户、授权、刷盘,一共执行了3个事务

  

【2.5】查看半同步情况

  左边主库,右边从库,都开起来了。

  但从no_tx参数中,发现有3个事务是没有通过半同步传输复制的(如果没有通过半同步就会通过异步)

  原因是为什么呢,很简单,因为我们操作的三个事务,都是属于DDL的

  

  然后我们再在主库插入一条DML试试。

    

  果然,已经出来了,并且使用半同步复制过去的。

【3】xtrabackup备份恢复实现

  

参考文档:

  

  GTID详解:https://blog.csdn.net/wmq880204/article/details/53160078

  GTID详解:https://blog.csdn.net/thundermeng/article/details/50401150

原文地址:https://www.cnblogs.com/gered/p/11420941.html

时间: 2024-10-22 18:33:53

(5.8)mysql高可用系列——MySQL中的GTID复制(实践篇)的相关文章

(5.6)mysql高可用系列——MySQL中的GTID异步复制

[1]实验环境 操作系统:CentOS linux 7.5 数据库版本:5.7.24 数据库架构:主从复制,主库用于生产,从库用于数据容灾和主库备机,采用默认传统的异步复制. 主库IP:192.168.1.201 端口:3306 从库IP:192.168.1.202 端口:3306 原文地址:https://www.cnblogs.com/gered/p/11405864.html

(5.4)mysql高可用系列——MySQL异步复制

关键词:mysql复制,mysql异步复制,mysql传统异步复制 [1]实验环境 操作系统:CentOS linux 7.5 数据库版本:5.7.24 数据库架构:主从复制,主库用于生产,从库用于数据容灾和主库备机,采用默认传统的异步复制. 主库IP:192.168.1.201 端口:3306 从库IP:192.168.1.202 端口:3306 [2]配置启动主从复制 #[2.1]配置my.cnf配置文件 #主库参数 # 主库增加参数 [mysqld]log-error_verbosity=

(5.5)mysql高可用系列——MySQL半同步复制(实践)

[1]配置my.cnf [1.1]通用复制配置 #replication_new log_bin=/mysql/log/3306/mysql-bin #开启binlog log_bin_index=/mysql/log/3306/mysql-bin.index binlog_format=row binlog_rows_query_log_events=on max_binlog_size=2048 bind-address=0.0.0.0 server_id=2013306 expire_lo

MySQL高可用系列之MHA(二)

一.参数说明 MHA提供了一系列配置参数,深入理解每个参数的具体含义,对优化配置.合理使用MHA非常重要,很多高可用性也都是通过合理配置一些参数而实现的. MHA包括如下配置参数,分别说明如下: hostname/ip/port (Local Only) hostname为MySQL Server的IP地址或主机名: ip为MySQL Server的IP地址,缺省从$hostname中获取:port为MySQL Server的端口号,缺省为3306 ssh_host/ssh_ip/ssh_por

MySQL高可用系列之MHA(一)

MHA,即Master High Availability Manager and Tools for MySQL,是日本的一位MySQL专家采用Perl语言编写的一个脚本管理工具,该工具仅适用于MySQL Replication(二层)环境,目的在于维持Master主库的高可用性. 一.简介 学习一个高可用小软件,不但要熟悉其功能,还要了解其架构及工作原理. 1.  架构 从架构上来说,MHA分为如下两大部分: (1) Node 我们知道,MHA是基于MySQL Replication环境的,

MySQL 高可用:mysql+mycat实现数据库分片(分库分表)

本文引用于http://blog.csdn.net/kk185800961/article/details/51147029 MySQL 高可用:mysql+mycat实现数据库分片(分库分表) 什么是MYCAT: 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务.ACID.可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群 一个融合内存缓存技术.NoSQL技术.HDFS大数据的新型SQL Server 结合传统数据库和新型分布式数

MySQL 高可用:mysql+Lvs+Keepalived 负载均衡及故障转移

转自 MySQL 高可用:mysql+Lvs+Keepalived 负载均衡及故障转移 - KK ——专注数据 - 博客频道 - CSDN.NEThttp://blog.csdn.net/kk185800961/article/details/51115264# 系统信息: mysql主库 192.168.1.152 CentOS 5.6 mysql 5.6.22 mysql从库 192.168.1.153 CentOS 5.6 mysql 5.6.22 VIP 192.168.1.150 my

MySQL高可用基础之keepalived+双主复制【转】

环境:MySQL-VIP:192.168.1.3MySQL-master1:192.168.1.1MySQL-master2:192.168.1.2 OS版本:CentOS release 6.4 (Final) Linux 2.6.32-358.el6.x86_64MySQL版本:5.6.14Keepalived版本:1.2.13 一.MySQL master-master配置 1.修改MySQL配置文件/etc/my.cnf   # Server1配置[mysqld]basedir = /u

(5.14)mysql高可用系列——级联复制

目录: [0]实验需求 级联复制,201为主库,202为从库/同时为203的主库,203为202的从库[1]实验环境 级联:A->B->C 实践思路: (1)直接拿A的xtrabackup的全备到 B和C 还远即可 (2)然后设置gtid_purged,最后change master 即可:[2]操作 [2.0]配置文件 my.cnf [2.1]在主库201创建复制用户 [2.2]在主库201创建测试数据 [2.3]备份与还原 [2.4]构建级联主从复制 [2.5]核验 正文: [0]实验需求