目录:

【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】核验

【3】多主一从

正文:

【0】实验需求

  级联复制,201为主库,202为从库/同时为203的主库,203为202的从库

  一般建议2级级联,如上描述,不建议更多层次。

【1】实验环境

  操作系统:CentOS 7.5

  数据库版本:MySQL 5.7.24

  数据库架构:主从复制,基于主库搭建3个从库,采用Xtrabackup + GTID + 无损同步复制

  A:主库IP:192.168.1.201  port:3306

  B:主库/从库IP:192.168.1.202  port:3306

  C:从库IP:192.168.1.203  port:3306

     级联:A->B->C

  简单思路:

    (1)B用A的全备初始化,然后B先作为从库连上主库A。

    (2)等B至少产生一个gtid事务后,停止B的 io线程,然后全备B 以初始化C。

    (3)C用B的全备来初始化后,再配置B->C的主从

  实践思路:

    (1)直接拿A的xtrabackup的全备到 B和C 还远即可

    (2)然后设置gtid_purged,最后change master 即可;

【2】操作

【2.0】配置文件 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 #从库务必记得修改
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 parameter 如果是从库,务必放开
#relay_log=/mysql/log//relaylog/mysql-relay.log
#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= #.7的增强半同步
#如果是5.,参数前面加上loose_,如下列,如果是5. 则直接使用 rpl_semi_sync_master_enabled= 之类的就好了。
#我这里是5.7就直接做增强半同步了(loseless Semisynchronous ) plugin_dir=/mysql/app/mysql/lib/plugin/
plugin_load=rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so
loose_rpl_semi_sync_master_enabled= #MySQL开启主的半同步复制(rpl_semi_sync_master_enabled)
loose_rpl_semi_sync_slave_enabled= #MySQL5.6开启从的半同步复制
loose_rpl_semi_sync_master_timeout= #超时5秒,切回异步
rpl_semi_sync_master_wait_for_slave_count= #至少收到1个slave发会的ack
rpl_semi_sync_master_wait_point=AFTER_SYNC #MySQL .7的方法,AFTER_SYNC(default value,增强半同步) & AFTER_COMMIT(传统半同步)
#GTID mode
gtid_mode=on
enforce_gtid_consistency=
log-slave-updates=

【2.1】在主库201创建复制用户

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

【2.2】在主库201创建测试数据

-- 【2.2.1】构造test库和test库下的test1,test2,test3表。test4表用于模拟业务一直在运行
create database test;
use test;
create table test1(id int);
insert into test1 values(1);
create table test2(id int);
insert into test2 values(2);
create table test3(id int);
insert into test3 values(3);
commit;
create table test4(id int);
insert into test4 values(4);
commit; -- 【2.2.2】构造存储过程sp_test4来循环插入test4表,模拟业务运行
use test;
drop procedure if exists sp_test4;
delimiter $$
create procedure sp_test4()
begin
declare n int;
set n=11;
while(n<=20)
do
insert into test.test4 values(n);
commit;
set n=n+1;
end while;
end $$
delimiter ; -- 【2.2.3】构造事件,来调度sp_test4过程
use test;
set global event_scheduler=1; delimiter $$
create event if not exists event_test4
on schedule every 5 second
on completion preserve
enable
do
begin
call sp_test4();
end $$
delimiter ; -- 为了防止测试数据量累计导致卡顿,我这里5小时做一次truncate
delimiter $$
create event if not exists event_truncate_test4
on schedule every 5 hour
on completion preserve
enable
do
begin
truncate table test.test4;
end $$
delimiter ;

【2.3】备份与还原

#在主库A:201
innobackupex --defaults-file=/etc/my.cnf -uroot -p123456 --no-timestamp /mysql/backup/full.bak #在从库B/C:202,203
scp -r root@192.168.1.201:/mysql/backup/full.bak /mysql/backup/
innobackupex --apply-log --user-memory=800M /mysql/backup/full.bak #应用redo/undo
mv data data1
mkdir data
innobackupex --defaults-file=/etc/my.cnf --copy-back /mysql/backup/full.bak/ #复制还原
chown -R mysql:mysql /mysql
chmod -R 755 /mysql

【2.4】构建级联主从复制

#从xtrabackup备份中的,info文件 or binlog_info文件中找到 gtid;
  
stop slave;
reset master;
reset slave all;
set session sql_log_bin=0;
set global gtid_purged='de853101-b165-11e9-900a-000c291f4171:1-1697';
set session sql_log_bin=1;
change master to
master_host='192.168.1.202',
master_user='rpl',
master_password='',
master_auto_position=1; #核验主从,在从库执行
show slave status\G
show processlist;
select count(1) from test.test4;

【2.5】核验

#在主库A:201  执行
create database test1;
create table test1.test1(id int);
insert into test1.test1 values(1);
commit;
select * from test1.test1; #核验三个库
select * from test1.test1;

【3】多主一从(多源复制)

【3.1】实验环境

  操作系统:CentOS 7.5

  数据库版本:MySQL 5.7.24

  数据库架构:主从复制,基于主库搭建3个从库,采用Xtrabackup + GTID + 无损同步复制

  A:主库IP:192.168.1.201  port:3306

  B:主库IP:192.168.1.202  port:3306

  C:从库IP:192.168.1.203  port:3306\

  A服务器之复制 test库,B服务器之复制test1库

【3.2】主从库参数 my.cnf

#【3.2.】A服务器参数额外配置  

binlog-do-db=test  #binlog只把该库的操作记录到binlog,每一行一个数据库,多个数据库需要另起行
binlog-ignore-db=sys  #表示忽略某个数据库,除了这个数据库之外都复制,每一行一个数据库,多个数据库需要另起行
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema #【3.2.】B服务器参数额外配置 binlog-do-db=test1  #binlog只把该库的操作记录到binlog,每一行一个数据库,多个数据库需要另起行
binlog-ignore-db=sys  #表示忽略某个数据库,除了这个数据库之外都复制,每一行一个数据库,多个数据库需要另起行
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema #【3.2.】C服务器参数额外配置 replicate_do_db=test
replicate_do_db=test1
replicate_wild_do_table=test.%
replicate_wild_do_table=test1.%
replicate_ignore_db=mysql
replicate_ignore_db=sys
replicate_ignore_db=information_schema
replicate_ignore_db=performance_schema

【3.3】配置主从(channel)

#在从库C操作
#核心就是channel 加频道,以便可以接收多个主库的复制 stop slave;
reset master;
reset slave all; change master to
master_host='192.168.1.201',
master_port=3306,
master_user='rpl',
master_password='',
master_auto_position=1
for channel 'master_201'; change master to
master_host='192.168.1.202',
master_port=3306,
master_user='rpl',
master_password='',
master_auto_position=1
for channel 'master_202';

【3.4】关于channel的管理与维护

【3.4.1】关于channel 的常规操作

show slave for 'master_201'\G   -- 查看单个channel 的状态
stop slave for channel 'master_201'; -- 停止单个channel的同步
start slave for channel 'master_202'; -- 开始单个channel的同步
reset slave all for channel 'master_201'; -- 重置单个channel -- 如果是关于全部的,那么和正常的主从一样
stop slave; reset slave all; show slave status\G -- 跳过一个channel 的报错
   show slave status for channel 'master_201'\G -- 处理办法,先停止所有的channel(stop slave;),处理错误,接着开启报错所在的 channel ,最后开启所有的channel
-- 启用GTID 模式时 stop slave; -- stop slave for channel 'master_201';
set session gtid_next='de853101-b165-11e9-900a-000c291f4171:1-1697';
begin;
commit;
set session gtid_next='automatic';
start slave; -- 未启用GTID模式时
stop slave; -- stop slave for channel 'master_201';
set global sql_slave_skip_counter=N --N为数字,表示跳过N个事件
start slave; 【3.4.2】监控通道channel 信息,在performance_schema 增加了一些 replication 的监控表;
use performance_schema;
show tables like 'replicat%';
select * from performance_schema.replication_connection_status\G

(5.14)mysql高可用系列——级联复制与多主一从的更多相关文章

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

    一.基于GTID的异步复制(一主一从)无数据/少数据搭建 二.基于GTID的无损半同步复制(一主一从)(mysql5.7)基于大数据量的初始化 正文: [0]概念 [0.5]GTID 复制(mysql ...

  2. MySQL高可用之组复制(1):组复制技术简介

    MySQL组复制系列文章: MySQL组复制大纲 MySQL组复制(1):组复制技术简介 MySQL组复制(2):配置单主模型的组复制 MySQL组复制(3):配置多主模型的组复制 MySQL组复制( ...

  3. (5.1)mysql高可用系列——高可用架构方案概述

    关键词:mysql高可用概述,mysql高可用架构 常用高可用方案 20190918 现在业内常用的MySQL高可用方案有哪些?目前来说,用的比较多的开源方案分内置高可用与外部实现,内置高可用有如下: ...

  4. MySQL高可用系列之MHA(二)

    一.參数说明 MHA提供了一系列配置參数.深入理解每一个參数的详细含义,对优化配置.合理使用MHA非常重要.非常多高可用性也都是通过合理配置一些參数而实现的. MHA包含例如以下配置參数,分别说明例如 ...

  5. (5.15)mysql高可用系列——MHA实践

    关键词:MHA,mysql mha [1]需求 采用mysql技术,实现MHA高可用主从环境,预计未来数据量几百G MHA概念参考:MYSQL高可用技术概述 [2]环境技术架构 [2.1]MHA简介 ...

  6. MySQL高可用之组复制(4):详细分析组复制理论

    MySQL组复制系列文章: MySQL组复制大纲 MySQL组复制(1):组复制技术简介 MySQL组复制(2):配置单主模型的组复制 MySQL组复制(3):配置多主模型的组复制 MySQL组复制( ...

  7. (5.6)mysql高可用系列——MySQL Utilities 管理工具

    关键词:mysql工具集,mysql管理工具,mysql utilities [1]安装mysql utilities cd /download wget https://cdn.mysql.com/ ...

  8. (5.3)mysql高可用系列——mysql复制(理论篇)【续写中】

    关键词:mysql主从复制,mysql复制,MGR,mysql并行复制 目录 [1]mysql支持的复制类型 [2]mysql的主从4种同步方式介绍 (1)异步 (2)同步 (3)5.6 半同步 (4 ...

  9. (5.3)mysql高可用系列——mysql复制之复制的参数

    参考:https://www.iteye.com/blog/shift-alt-ctrl-2269539 详情 [1]参数 #[1.1]基本参数 bind-address=192.168.1.201 ...

随机推荐

  1. 如何打开Mac OSX 终端的颜色

    如何打开Mac OSX 终端的颜色 听语音 | 浏览:8453 | 更新:2015-12-15 16:48 1 2 3 4 5 6 7 分步阅读 Mac 终端默认颜色很单一,文件夹和文件无法区分,可以 ...

  2. 关于JPA动态SQL查询

    1.继承接口 2.下面是简单的操作---自己写过的,下次再整理一下 public Page<IdddsMember> list(MemberSearch search, Pageable ...

  3. linux系统编程--文件IO

    系统调用 什么是系统调用: 由操作系统实现并提供给外部应用程序的编程接口.(Application Programming Interface,API).是应用程序同系统之间数据交互的桥梁. C标准函 ...

  4. JAVA实现四则运算的简单计算器

    开发环境eclipse java neon. 今天用JAVA的swing界面程序设计制作了一个四则运算的简易计算器.代码以及截图如下: computer.java: ///////////////// ...

  5. 【csp模拟赛5】购物(shopping.cpp)--常规

    多项式,因为每次的x相同,所以把a和b相加就行了,然后找对称轴,找离对称轴最近的整数点,然而我却写了个暴力,没看x #include <iostream> #include <cst ...

  6. C语言中的指针加减偏移量

    C语言指针偏移技巧(也是一个要注意的坑) - 陈杰柱的博客 - CSDN博客  https://blog.csdn.net/cjzjolly/article/details/82116772 C语言中 ...

  7. [Shell]常用语法

    赋值 FILE=$1 //=两边不能有空格 echo $FILE 逻辑判断 表达式 .if [ expression ]; then ... fi //[]两边必须有空格 . if [[ expres ...

  8. Android性能优化-电量优化

    前言 电量优化,这个名词在传统PC时代,我们基本很少听见.然而到了诺基亚时代,我们也同样很少关注.直到了移动互联的智能机时代.电量优化才被慢慢的重视起来.可能的原因如下: 移动设备,不能一直使用电源供 ...

  9. 1.2 Go语言基础之变量和常量

    变量和常量是编程中必不可少的部分,也是很好理解的一部分. 一.标识符与关键字 1.1 标识符 在编程语言中标识符就是程序员定义的具有特殊意义的词,比如变量名.常量名.函数名等等. Go语言中标识符由字 ...

  10. HttpURLConnection 多线程下载

    影响下载的速度 * 宽带的带宽 * 服务器的限制 * 服务器的资源固定,开启的线程越多抢占的资源就越多 import java.io.InputStream; import java.io.Rando ...