(5.5)mysql高可用系列——MySQL半同步复制(实践)
关键词,mysql半同步复制
【0】实验环境
操作系统:CentOS linux 7.5
数据库版本:5.7.24
数据库架构:主从复制,主库用于生产,从库用于数据容灾和主库备机,采用默认传统的异步复制。
主库IP:192.168.1.201 端口:3306
从库IP:192.168.1.202 端口:3306
正文:
【1】配置my.cnf
【1.1】通用复制配置
#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=
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 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=
【2】半同步复制配置的2种办法(5.7)
两种办法 【.】手动安装半同步复制插件(在mysql环境下,主从都安装) 【step 】安装半同步插件
install plugin rpl_semi_sync_master soname 'semisync_master.so';
install plugin rpl_semi_sync_slave soname 'semisync_slave.so'; show plugins; -- 查看插件安装情况 or select * from mysql.plugin;
【step 】设置开启半同步参数 建议都开启,以免主备切换时需要重新加;如果分开,如下图; 在主库上:set global rpl_semi_sync_master_enabled=; 在从库上:set global rpl_semi_sync_slave_enabled=; 如果异步复制正在运行,需要在从库运行一下命令 才会使用半同步; stop slave io_thread;start slave io_thread; 【step 】检查状态 在主库查看半同步状态:show status like '%rpl_semi%';
圈出第1行表示,连接主库的客户端个数。 圈出第2行表示,该实例做为半同步的主库状态,是on,是开启的。 最后1行,Rpl_semi_sync_slave_status,表示该实例,作为半同步的从库状态,是off,不是从库。 (但是从库上进行查看时,图中的 master_status 与 slave_status 应该正好相反,作为主库是关闭的,作为从库是开启的) 其他重要参数, Repl_semi_sync_master_yes_tx:表示已经同步的事务数,0表示还没有任何一个事务以半同步的方式复制到从库 Repl_semi_sync_master_no_tx:假如为3,表示当前有3事务不是半同步模式下从库及时响应的(比如可能有网络延迟,导致半同步超时切换成异步) 【.】写入配置文件(推荐使用,my.cnf) show variables like 'plugin%'; -- 查看插件路径 #修改my.cnf 复制代码
#如果已经有异步复制了,也不需要改其他的,只需要把下面参数加入到my.cnf,重启mysql服务即可。
#如果业务不允许宕机重启实例,那么可以参考方法1,并且把该段代码加上,就可以直接用了。
plugin_dir=/mysql/app/mysql/lib/plugin/
plugin_load=rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so #如果是5.,参数前面加上loose_,如下列,如果是5. 则直接使用 rpl_semi_sync_master_enabled= 之类的就好了。
#我这里是5.7就直接做增强半同步了(loseless Semisynchronous )
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,增强半同步) & AFTER_COMMIT(传统半同步)
【3】进行初始化操作
【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;
#【】在主库上,设置读锁定有效。以便获取一个一致性的快照
mysql下操作:(锁表,获取一致性)
flush tables with read lock; #【】在主库上 show master status;获取主库当前的二进制名和偏移量pos位置。
show master status;
-- 查看到的日志名记录下来,比如:mysql-bin. , postion: #【】备份主库还原到从库
逻辑方式:mysqldump。然后scp拷贝过去。然后登录上从库的mysql,直接把dump的文件加载进去即可。
物理方式:直接拷贝,备份删除从库原有data目录,然后把主库的data目录复制过去。
复制到从库后记得删除拷贝过来data/下的auto.cnf,否则uuid会一样,导致无法复制。
不管是物理还是逻辑方式,CP或者mysqldump完后,就都可以解锁主库了
在主库的mysql登录下,使用命令,unlock tables;
【3.2】如果业务正在跑,利用备份还原恢复同步
#【】在主库和从库上 准备复制账户
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; #【】利用备份
#mysqldump,如果备份时加了--master-data=2参数,是有记录binlog文件和位置的。
#XtraBackup,也会复制Binlog文件和位置信息
#【】开始还原
利用备份去进行还原,这个时候多半是不一致的,因为业务在跑。
这个时候利用备份中的binlog 来做 change master to #【4】change master to 示例
change master to
master_host='192.168.1.201',
master_port=3306,
master_user='rep',
master_password='123456',
master_log_file='mysql-bin.000002',
master_log_pos=154;
【4】参数解析
【4.1】show status like '%rpl%'; -- 查看半同步状态
主库:
Variable_name
--------------------------------------------
Rpl_semi_sync_master_clients --已连接到本机主库的客户端输了
Rpl_semi_sync_master_net_avg_wait_time --平均等待时间
Rpl_semi_sync_master_net_wait_time --总等待时间
Rpl_semi_sync_master_net_waits --等待次数
Rpl_semi_sync_master_no_times --关闭半同步的次数
Rpl_semi_sync_master_no_tx --没有成功同步提交的事务个数
Rpl_semi_sync_master_status --主库半同步状态(on为打开半同步,off为异步)
Rpl_semi_sync_master_timefunc_failures --调用函数失败的次数
Rpl_semi_sync_master_tx_avg_wait_time --事务平均等待时间、平均传输时间
Rpl_semi_sync_master_tx_wait_time --事务总等待时间 、总传输时间
Rpl_semi_sync_master_tx_waits --事务的总等待次数
Rpl_semi_sync_master_wait_pos_backtraverse -- 后来的事务先来了,先来的事务还没有到的次数
Rpl_semi_sync_master_wait_sessions -- 当前有多少Session 因为slave 而造成的等待
Rpl_semi_sync_master_yes_tx -- 成功被slave恢复同步的事务个数
Rpl_semi_sync_slave_status -- 表示当前本词库是异步还是半同步(主库应该为off,从库因为on)
【4.2】show variables like '%rpl%'; -- 查看半同步配置参数
【5】复制的日常管理
#复制的日常管理与维护
(1)show slave status\G :在从库查看从库线程状态
(2)flush tables with read lock; :主从不一致后锁表。
然后 show master status\G
然后 show slave status\G 来查看从库同步状态 或者重新 change master to....
然后 select master_pos_wait('mysql-bin.00002','389'); (即刚刚show master status找到的文件及位置),如果为1 标识超时退出 ,如果为1 则标识主从同步。
最后再主库 unlock tables; 解锁
(3)跳过错误

跳过错误有两种方式:
1.跳过指定数量的事务:(建议如果已经出现了错误,使用这种办法)
mysql>slave stop;
mysql>SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1 #跳过一个事务
mysql>slave start 2.修改mysql的配置文件,通过slave_skip_errors参数来跳所有错误或指定类型的错误(建议配置时使用这种办法)
vi /etc/my.cnf
[mysqld]
#slave-skip-errors=1062,1053,1146 #跳过指定error no类型的错误,DDL错误类型包含 1007,1008,1050,1051,1054,1060,1061,1068,1091,1146(5.6可以用这个)
#slave-skip-errors=ddl_exist_errors #跳过DDL错误,all:跳过所有错误(mysql5.7才有ddl_exist_errors)

(4)大对象blog ,text 传输
【6】从库宕机如何重新连入主库?
1. 此2个参数rpl_semi_sync_master_enabled 和rpl_semi_sync_slave_enabled 不要直接写入到my.cnf配置文件开启。
2.在slave库上先 stop slave io_thread ;set global rpl_semi_sync_slave_enabled=0 关闭此参数。
然后start slave io_thread 或者start slave 开启异步复制,让slave库追赶上master库。
3.然后在slave库 set global rpl_semi_sync_slave_enabled=1 ;stop slave io_thread;start slave io_thread;
参考文章:
mysql复制实践:https://www.cnblogs.com/gered/p/11239898.html
mysql复制日常维护,故障处理:https://www.cnblogs.com/gered/p/11388986.html
(5.5)mysql高可用系列——MySQL半同步复制(实践)的更多相关文章
- (5.8)mysql高可用系列——MySQL中的GTID复制(实践篇)
一.基于GTID的异步复制(一主一从)无数据/少数据搭建 二.基于GTID的无损半同步复制(一主一从)(mysql5.7)基于大数据量的初始化 正文: [0]概念 [0.5]GTID 复制(mysql ...
- (5.3)mysql高可用系列——mysql复制之复制的参数
参考:https://www.iteye.com/blog/shift-alt-ctrl-2269539 详情 [1]参数 #[1.1]基本参数 bind-address=192.168.1.201 ...
- (5.3)mysql高可用系列——mysql复制(理论篇)【续写中】
关键词:mysql主从复制,mysql复制,MGR,mysql并行复制 目录 [1]mysql支持的复制类型 [2]mysql的主从4种同步方式介绍 (1)异步 (2)同步 (3)5.6 半同步 (4 ...
- (5.6)mysql高可用系列——MySQL Utilities 管理工具
关键词:mysql工具集,mysql管理工具,mysql utilities [1]安装mysql utilities cd /download wget https://cdn.mysql.com/ ...
- (5.7)mysql高可用系列——MySQL中的GTID复制(理论篇)【转】
转自:https://blog.csdn.net/wmq880204/article/details/53160078 一.GTID的概述: 1.全局事物标识:global transaction i ...
- (5.4)mysql高可用系列——MySQL异步复制(实践)
关键词:mysql复制,mysql异步复制,mysql传统异步复制 [1]实验环境 操作系统:CentOS linux 7.5 数据库版本:5.7.24 数据库架构:主从复制,主库用于生产,从库用于数 ...
- (5.12)mysql高可用系列——复制中的在线切换GTID模式/增加节点/删除节点
目录 [0]需求 前提,已经假设好基于传统异步复制的主库和从库1. [0.1]传统异步切换成基于GTID的无损模式 [0.2]增加特殊要求的从库 [1]操作环境 [2]构建 复制->半同步复制 ...
- MySQL高可用解决方案(MySQL HA Solution)
http://blog.sina.com.cn/s/blog_7e89c3f501012vtr.html 什么是高可用性?很多公司的服务都是24小时*365天不间断的.比如Call Center.这就 ...
- MySQL 高可用:mysql+mycat实现数据库分片(分库分表)
本文引用于http://blog.csdn.net/kk185800961/article/details/51147029 MySQL 高可用:mysql+mycat实现数据库分片(分库分表) 什么 ...
随机推荐
- luogu 1072 Hankson 的趣味题 唯一分解定理+线性筛
貌似是比大多数题解优的 $O(n^2logn)$ ~ Code: #include <bits/stdc++.h> #define N 50004 #define setIO(s) fre ...
- hdu 5723 Abandoned country 最小生成树+子节点统计
Abandoned country Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- 关于博主&&联系博主
关于我自己 天朝一名普通理科男高中生,现正读高二. 一位正在求学之路上奋斗的蒟蒻.很爱听歌,欧美为主,霉霉死粉.交际方面比较弱. 常用编辑器为DEV-C++,编译器为gcc,常用OJ是洛谷 基本熟练使 ...
- luoguP3371 【模板】单源最短路径
P3371 [模板]单源最短路径 3K通过 10.7K提交 题目提供者 HansBug 标签 云端↑ 难度 普及/提高- 时空限制 1s / 128MB 题目描述 如题,给出一个有向图,请输出从某一点 ...
- 使用fiddler实现手机抓包
手机上无法直接查看网络请求数据,需要使用抓包工具.Fiddler是一个免费的web调试代理,可以用它实现记录.查看和调试手机终端和远程服务器之间的http/https通信. fiddler没有手机客户 ...
- 石川es6课程---9、面向对象-基础
石川es6课程---9.面向对象-基础 一.总结 一句话总结: js老版本的面向对象和继承都不是很方便,新版的面向对象向其它语言靠拢,有了class,extends,constructor等关键字,用 ...
- 解决autowaired注入时机问题
package com.haiyisoft.loveLifeWeb.config; import javax.annotation.PostConstruct; import org.springfr ...
- DAY 6考试
题解: 这题太水辣 注意开 long long 但我不是没开long long 的锅 我是 输出 long long 要用 lld 啊 大梦身先醒,80可海星 PS:百度了一下 long (ld) 和 ...
- ubuntu下如何高速下载?
答: 使用uget工具 1.安装uget sudo apt-get install uget -y 2.下载时在设置里指定最大连接数 笔者指定最大连接数为10,可以适当调整此值
- RN性能优化(重新探索react吧)
最近做RN遇到了一些性能瓶颈,逼着自己不得不做一些优化 已经做过,或者尝试过得优化方案: 1.点击效果防止重复点击. 2.左右两边分别用两个异步栈进行更新,这样能让右边的缓慢不影响左边的更新. 3.I ...