目录:
【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 --master=root@localhost:3306 --slave=root@localhost: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/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=on
enforce_gtid_consistency=1 #on:当发现语句/事务不支持GTID时,返回错误信息
log-slave-updates=1
binlog_gtid_simple-recovery=1 #5.7.6以下默认为off,5.7.6以上默认为on
#【3.3】重启两台mysql
service mysql restart
#【3.4】主库上查看binlog
mysql -uroot -p123456
show master stauts; -- 记录下file_name 和 file_pos
#【3.5.1】使用mysqlreplicate(mysql utilities工具)命令配置
在从库上使 slave 与 master 建立连接,从而同步
#(1)从库配置(但是在主库上跑就好,这样多个从库都只需要在主库上跑即可)
mysqlreplicate --master=root:123456@192.168.1.203:3306 --slave=root:123456@192.168.1.204:3306 --rpl-user=rpl:123456 -b
#(2)测试
#测试test库是否一致(主库运行)
mysqlreplicate --master=root:123456@192.168.1.203:3306 --slave=root:123456@192.168.1.204:3306 --rpl-user=rpl:123456 --test-db=testdb
#检查复制(主从均可以运行,检查从库)
mysqlrplcheck --master=root:123456@192.168.1.203:3306 --slave=root:123456@192.168.1.204:3306 -s
#检查复制数据一致性
mysqlrplsync --master=root:123456@192.168.1.203:3306 --slave=root:123456@192.168.1.204:3306
#【3.5.2】使用传统方式配置
-- 使用GTID方式的主库宕机重新搭建 -- 优势点:每台机器上的GTID都是一样的,不需要管文件是哪个,位置在哪里,可以自动根据GTID定位 change master to master_host=‘xxx‘, master_user=‘xxx‘, master_password=‘xxx‘, master_port=‘xxx‘, master_auto_postion=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,可以在主从上对照查看事务是否同步。
二、基于GTID的无损半同步复制(一主一从)(mysql5.7)基于大数据量的初始化
【1】基于大数据量备份初始化从库的核心代码
-- 利用备份初始化核心代码 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;
【2】mysqldump备份恢复实现
【3】xtrabackup备份恢复实现
参考文档:
GTID详解:https://blog.csdn.net/wmq880204/article/details/53160078
GTID详解:https://blog.csdn.net/thundermeng/article/details/50401150
(5.8)mysql高可用系列——MySQL中的GTID复制(实践篇)
原文:https://www.cnblogs.com/gered/p/11420941.html