概述:本质上和传统异步复制没什么区别,就是加了GTID参数。

且可以用传统的方式来配置主从,也可以用GTID的方式来自动配置主从。

这里使用GTID的方式来自动适配主从。

  需要mysql5.6.5以上

目录

一、基于GTID的异步复制(一主一从)

【1】环境

【2】my.cnf 参数配置(主从都配)

【3】在主库创建复制用户

【4】在从库上运行主从配置

【5】核验

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

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

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

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

一、基于GTID的异步复制(一主一从)

【1】环境

操作系统:CentOS linux 7.5

数据库版本:5.7.26

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

主库IP:192.168.135.158  端口:3306

从库IP:192.168.135.159  端口:3306

【2】my.cnf 参数配置(主从都配)

#replication_new
log_bin=/mysql/log//mysql-bin #开启binlog
log_bin_index=/mysql/log//mysql-bin.index
binlog_format=row
binlog_rows_query_log_events=on
max_binlog_size= bind-address=0.0.0.0
server_id=2013306
#注意,这里从库的server_id和主库一定要不一样
expire_logs_days= #超过7天的binlog清理
innodb_support_xa=
binlog_cache_size=1M
log_bin_trust_function_creators= #同步存储过程、函数、触发器
innodb_flush_log_at_trx_commit=
sync_binlog=
transaction-isolation=read-committed #slave replication
relay_log=/mysql/log//relaylog/mysql-relay.log
log-slave-updates=
read_only=
slave-parallel-type=LOGICAL_CLOCK
slave-parallel-workers= 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=
slave_skip_errors=ddl_exist_errors
slave_preserve_commit_order= #增加的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】在主库创建复制用户

这里也会记录到binlog,开启主从同步后会一并复制过去,以便我们做主从且换

create user 'rpl'@'192.168.135.%' identified by '';
grant replication slave on *.* to 'rpl'@'192.168.135.%';
flush privileges;
select user,host from mysql.user;

【4】在从库上运行主从配置

stop slave;

change master to
master_host='192.168.135.158',
master_port=3306,
master_user='rpl',
master_password='',
master_auto_position=1; start slave;

如果是多主一从

对于需要多主一从情况(假设另一主库为157,账号为rpl):
B mysql>
CHANGE MASTER TO
MASTER_HOST='192.168.135.157',
MASTER_USER='rpl',
MASTER_PASSWORD='',
master_auto_position=1 for CHANNEL 'm1'; CHANGE MASTER TO
MASTER_HOST='192.168.1.158',
MASTER_USER='rpl',
MASTER_PASSWORD='',
master_auto_position=1 for CHANNEL 'm2';

【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,可以在主从上对照查看事务是否同步。

二、一主多从

  步骤与一主一从一样,我们这里主要讲一主多从的主从切换

【1】环境

操作系统:CentOS linux 7.5

数据库版本:5.7.26

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

主库IP:192.168.135.158  端口:3306

从库IP:192.168.135.159  端口:3306

从库IP:192.168.135.160  端口:3306

【2】配置新从库192.168.135.160

  【2.1】修改 my.cnf(具体参考上面一主一从)

  【2.2】停止从库 =》运行change master to =》开启从库

  【2.3】验证状态;show slave status\G

【3】主从切换,把158=>159

   158 主库必须是停业务,或者宕机状态。且从库已经同步完现有数据。否则会数据不一致。

  【3.1】在159、160操作,查看数据同步情况

    stop slave io_thread;

    (1)show global variables like '%gtid_executed%' ;  查看gtid值是否一样?

        

    (2)show slave status\G

       

      从库根据这个字段与主库的 show global variables like '%gtid_executed%' ; 对应

      上面的那个字段,Retrieved_Gtid_Set 这个字段,当主库数据比从库多,之后再开启主从,这里记录了最后一个的恢复同步的GTID事务(或者说是回复到的点)

    (3)确保IO线程已经没有事务在跑,状态如下

       

  【3.2】主从切换 158-》159 具体操作

-- 原从1,现主,159:
stop slave; -- 原从2,现从,160: 当159和158有相同的复制账户及端口时,可以只改master_host即可,我们这里my.cnf与账户都是一样的,所以只需要改master_host。否则就要和最初配置一样,5个都要改
stop slave;
change master to
master_host='192.168.135.159';
-- ,master_user='rpl'
-- ,master_password='123456'
-- ,master_port=3306
-- ,master_auto_position=1;
start slave; -- 原主,现从,158:
stop slave; change master to
master_host='192.168.135.159',
master_user='rpl',
master_password='123456',
master_port=3306,
master_auto_position=1;

start slave;

  【3.3】核验

    使用 【一】中的【5】方法核验

参考:

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

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

【3.2】【mysql基本实验】mysql GTID复制(基于空数据的配置)的更多相关文章

  1. mysql 5.6在gtid复制模式下复制错误,如何跳过??

    mysql 5.6在gtid复制模式下复制错误,如何跳过?? http://www.xuchanggang.cn/archives/918.html

  2. 深入MySQL复制(二):基于GTID复制

    相比传统的MySQL复制,gtid复制无论是配置还是维护都要轻松的多.本文对gtid复制稍作介绍. MySQL基于GTID复制官方手册:https://dev.mysql.com/doc/refman ...

  3. mysql的GTID复制和多源复制

    配置基于GTID的复制--------------------------------------------在参数文件/etc/my.cnf增加下面内容:主库master_info_reposito ...

  4. MySQL GTID复制

    什么是GTID 什么是GTID呢, 简而言之,就是全局事务ID(global transaction identifier ),最初由google实现,官方MySQL在5.6才加入该功能.GTID是事 ...

  5. MHA-手动Failover流程(传统复制&GTID复制)

    本文仅梳理手动Failover流程.MHA的介绍详见:MySQL高可用架构之MHA 一.基本环境 1.1.复制结构 VMware10.0+CentOS6.9+MySQL5.7.21 ROLE HOST ...

  6. [mysql] MariaDB 10.0.10 GTID复制

    一:概念理解:    1.TID:Transaction ID,即Mysql服务器的事务ID号. 2.GTID:Global Transaction ID,全局事务ID,在整个主从复制架构中任何两个事 ...

  7. mysql之 MySQL 主从基于 GTID 复制原理概述

    一. 什么是GTID ( Global transaction identifiers ):MySQL-5.6.2开始支持,MySQL-5.6.10后完善,GTID 分成两部分,一部分是服务的UUid ...

  8. mysql之 mysql 5.6不停机主从搭建(一主一从基于GTID复制)

    环境说明:版本 version 5.6.25-log 主库ip: 10.219.24.25从库ip:10.219.24.22os 版本: centos 6.7已安装热备软件:xtrabackup 防火 ...

  9. MysqL主从复制_模式之GTID复制

    基于GTID的复制是从Mysql5.6开始支持的一种新的复制方式,此方式与传统基于日志的方式存在很大的差异,在原来的基于日志的复制中,从服务器连接到主服务器并告诉主服务器要从哪个二进制日志的偏移量开始 ...

随机推荐

  1. 【Python之路】特别篇--ECMA对象、DOM对象、BOM对象

    ECMA对象 从传统意义上来说,ECMAScript 并不真正具有类.事实上,除了说明不存在类,在 ECMA-262 中根本没有出现“类”这个词. ECMAScript 定义了“对象定义”,逻辑上等价 ...

  2. 状压dpHDU - 4856

    J - Tunnels HDU - 4856 题目大意:地图上有些管道,在管道行走里不需要花费时间,但从一个管道的出口走到另一个管道的入口则需要花费时间,问走完所有管道最短的时间,如果不行,则输出-1 ...

  3. [SCOI2009]windy数 代码 (对应数位dp入门)

    Code1 (DP版) #include<bits/stdc++.h> #define in(i) (i=read()) using namespace std; int read() { ...

  4. webuploader的一些体验

    WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件.支持大文件分片并发上传. 具体api文档参考:http://fex.b ...

  5. 树状数组(BIT)

    树状数组 树状数组是在线段树的结构上改造而来数据结构,主要用于完成: 给定一个初始值全为0的数列 ①给定i,计算返回a1+a2+--+ai的值 ②给定i和x,执行ai+=x BIT的求和 ll sum ...

  6. hive连接hbase

    使用hive连接hbase 前提说明:一个hive表指向一个hbase表,一对一,不能多对一 建立外部表 CREATE EXTERNAL TABLE test_hbase( key string, m ...

  7. typedef void(*Fun) (void)是什么意思 函数指针(回调函数) 和函数对象总结

    https://blog.csdn.net/FreeApe/article/details/49124043 bool (*pf)(const string &,const string &a ...

  8. window环境下 恢复odoo数据库备份文件时产生的 Database restore error: Command `psql` not found.

    1,首先先查看 PostgreSQL 是否安装在C盘,如果安装在其他盘 则需要配置环境变量 配置完成后重启服务就可以了 2, 如果还不行,只需在odoo.conf中添加一个配置设置.也就是在odoo项 ...

  9. 如何使用Heartbeat,组建一个高可用性的mysql集群

    转了好多次帖子,其实就是为了使用heartbeat来搭建mysql集群,网上很多都是用make来生成RPM来安装,我也找了很多资料,mysql 自带的cluster用户不满意,只能再次vmware虚拟 ...

  10. What happens in an async method

    https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/task-asynchronous-pr ...