目录:

【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/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=2048bind-address=0.0.0.0server_id=2013306#从库务必记得修改

expire_logs_days=7#超过7天的binlog清理

innodb_support_xa=1binlog_cache_size=1M

log_bin_trust_function_creators=1#同步存储过程、函数、触发器

innodb_flush_log_at_trx_commit=1sync_binlog=1transaction-isolation=read-committed

#slave parameter 如果是从库,务必放开

#relay_log=/mysql/log/3306/relaylog/mysql-relay.log

#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#5.7的增强半同步

#如果是5.7,参数前面加上loose_,如下列,如果是5.6 则直接使用 rpl_semi_sync_master_enabled=1之类的就好了。

#我这里是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=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 value,增强半同步) &AFTER_COMMIT(传统半同步)

#GTID mode

gtid_mode=on

enforce_gtid_consistency=1log-slave-updates=1

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

create user 'rpl'@'192.168.1.%' identified by '123456';grant replication slave on *.* to 'rpl'@'192.168.1.%';

flushprivileges;select user,host from mysql.user;

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

--【2.2.1】构造test库和test库下的test1,test2,test3表。test4表用于模拟业务一直在运行

create databasetest;usetest;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表,模拟业务运行

usetest;drop procedure if existssp_test4;

delimiter $$create proceduresp_test4()begin

declare n int;set n=11;while(n<=20)

doinsert into test.test4 values(n);commit;set n=n+1;end while;end$$

delimiter ;--【2.2.3】构造事件,来调度sp_test4过程

usetest;set global event_scheduler=1;

delimiter $$create event if not existsevent_test4on schedule every 5secondoncompletion preserve

enable

dobegincall sp_test4();end$$

delimiter ;--为了防止测试数据量累计导致卡顿,我这里5小时做一次truncate

delimiter $$create event if not existsevent_truncate_test4on schedule every 5houroncompletion preserve

enable

dobegin

truncate tabletest.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 mastertomaster_host='192.168.1.202',

master_user='rpl',

master_password='123456',

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.1】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.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.3】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 slaveall;

change mastertomaster_host='192.168.1.201',

master_port=3306,

master_user='rpl',

master_password='123456',

master_auto_position=1

for channel 'master_201';

change mastertomaster_host='192.168.1.202',

master_port=3306,

master_user='rpl',

master_password='123456',

master_auto_position=1

for channel 'master_202';

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

【3.4.1】关于channel 的常规操作

show slavefor '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 statusfor 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

mysql 多主一从备份_(5.14)mysql高可用系列——级联复制与多主一从(多源复制)...相关推荐

  1. 14、高可用keepalived搭建及切换

    14.高可用keepalived搭建及切换 keepalived主从切换试验: 1.先搭建192.168.1.20与192.168.1.21的主主架构     192.168.1.76为VIP 2.在 ...

  2. mysql(三)路由器读写分离、MHA高可用

    1 mysql 路由器实现读写分离 简介: MySQL 路由器是 InnoDB 集群的一部分,是轻量级中间件,可在应用程序和后端 MySQL 服务器之间提供透明路由.它可用于各种用例,例如通过有效地将 ...

  3. Windows2008管理---第14章 高可用群集和QoS

    第14章 高可用群集和QoS 目录 第1章 高可用群集和QoS. 1<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com ...

  4. 带哨兵节点的链_深入学习Redis高可用架构:哨兵原理及实践

    原标题:深入学习Redis高可用架构:哨兵原理及实践 " 在上篇文章<深入学习 Redis 高可用的基石:主从复制>中曾提到,Redis 主从复制的作用有数据热备.负载均衡.故障 ...

  5. mysql数据库后台命令备份_使用MySQL命令行备份及恢复数据库

    使用MySQL命令行备份及恢复数据库 下文对使用MySQL命令行备份及恢复数据库的方法及步骤进行了详细的介绍,如果您对MySQL命令行方面感兴趣的话,不妨一看. AD: 使用MySQL命令行,可以实现 ...

  6. mysql数据库视图备份_数据库篇-mysql详解( 六 )之视图与数据备份

    data.png 一 : 视图 视图: view, 是一种有结构(有行有列)但是没结果(结构中不真实存放数据)的虚拟表, 虚拟表的结构来源不是自己定义, 而是从对应的基表中产生(视图的数据来源). ( ...

  7. 阿里云 mysql 导出数据库备份_导出整个mysql数据库备份

    mysql和mssql的备份和恢复数据的方法 mysql数据库的备份方法可以用 导出要用到MySQL的mysqldump工具,基本用法是: shell> mysqldump [OPTIONS] ...

  8. mysql不停止重启服务器_不停止MySQL服务增加从库的两种方式

    现在生产环境MySQL数据库是一主一从,由于业务量访问不断增大,故再增加一台从库.前提是不能影响线上业务使用,也就是说不能重启MySQL服务,为了避免出现其他情况,选择在网站访问量低峰期时间段操作. ...

  9. mysql主键自增长_全面的MySQL优化面试解析

    本文概要 文章内图片有损,需要高清可以在公众号内回复"大图" 概述 为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理 ...

最新文章

  1. 关于MySql数据库设计表与查询耗时分析
  2. MySQL分片 --转自Peter Zaitsev对MySQL分片的建议
  3. 10分钟就能学会的.NET Core配置
  4. 【渝粤教育】电大中专电子商务网站建设与维护 (7)作业 题库
  5. Git教程——如何创建一个版本库(Repository)
  6. python能不能自动写代码_微软最强 Python 自动化工具开源了!不用写一行代码!...
  7. [汇编]汇编学习笔记(6):MASM32编译器编译链接16位汇编
  8. Wmware虚拟机装黑苹果时,镜像格式转换的方法
  9. 【Web技术】1395- Esbuild Bundler HMR
  10. 再谈Qt实现Rasdial拨号问题(说说项目中遇到的问题和解决方案)
  11. CSS 用图片实现圆角方框(一张图片吆)
  12. 服务器可视化显示空间,云服务器可视化面板
  13. SetDlgItemText
  14. 《薛兆丰的经济学课》课程总结3--生命有限
  15. JQuery之工具类函数
  16. B树索引,面向海量数据的金钥匙
  17. Struts2快速入门实例代码教程
  18. Java项目:医药进销存系统(java+SSM+JSP+Layui+jQuery+Maven+mysql)
  19. 投入产出核算的知识应用于业务数据分析的思路
  20. 推荐个占用内存很小的经典音乐播放器CHKen Player

热门文章

  1. Kotlin 4 构造,对象,修饰符,关键字,委托
  2. golang sync WaitGroup
  3. 甜、酸、苦、辣、咸与健康
  4. 引用:编写高性能Web应用程序的10个技巧(一)
  5. sql 递归查询所有的下级
  6. @Configuration 和 @Bean
  7. 深入分析 Javascript 单线程
  8. Android数据存储与访问
  9. Python | numpy | np.split()与np.array_split()函数
  10. php5和php7的bccomp计算精度区别