mysql 5.5半同步复制_(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/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=2013306expire_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

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

log-slave-updates=1read_only=1slave-parallel-type=LOGICAL_CLOCK

slave-parallel-workers=4master_info_repository=table #master_info 会记录到 mysql.slave_master_info

relay_log_info_repository=table #relay_log 会记录到,mysql.slave_relay_log_info

relay_log_recovery=1slave_skip_errors=ddl_exist_errors

slave_preserve_commit_order=1

【2】半同步复制配置的2种办法(5.7)

两种办法

【2.1】手动安装半同步复制插件(在mysql环境下,主从都安装)

【step1】安装半同步插件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;

44a0e32437739e55dcf3e196378b55e9.png

【step2】设置开启半同步参数

建议都开启,以免主备切换时需要重新加;如果分开,如下图;

在主库上:set global rpl_semi_sync_master_enabled=1;

在从库上:set global rpl_semi_sync_slave_enabled=1;

如果异步复制正在运行,需要在从库运行一下命令 才会使用半同步;

stop slave io_thread;start slave io_thread;

【step3】检查状态

在主库查看半同步状态:show status like'%rpl_semi%';

660e7df70339e374f69d5dcbabbb9427.png

圈出第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事务不是半同步模式下从库及时响应的(比如可能有网络延迟,导致半同步超时切换成异步)

【2.2】写入配置文件(推荐使用,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.7,参数前面加上loose_,如下列,如果是5.6 则直接使用 rpl_semi_sync_master_enabled=1之类的就好了。

#我这里是5.7就直接做增强半同步了(loseless Semisynchronous )

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,增强半同步) & AFTER_COMMIT(传统半同步)

【3】进行初始化操作

【3.1】完全同步情况

#【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;

#【2】在主库上,设置读锁定有效。以便获取一个一致性的快照

mysql下操作:(锁表,获取一致性)

flush tables with read lock;

#【3】在主库上 show master status;获取主库当前的二进制名和偏移量pos位置。

show master status;-- 查看到的日志名记录下来,比如:mysql-bin.000002 , postion: 881#【4】备份主库还原到从库

逻辑方式:mysqldump。然后scp拷贝过去。然后登录上从库的mysql,直接把dump的文件加载进去即可。

物理方式:直接拷贝,备份删除从库原有data目录,然后把主库的data目录复制过去。

复制到从库后记得删除拷贝过来data/下的auto.cnf,否则uuid会一样,导致无法复制。

不管是物理还是逻辑方式,CP或者mysqldump完后,就都可以解锁主库了

在主库的mysql登录下,使用命令,unlock tables;

【3.2】如果业务正在跑,利用备份还原恢复同步

#【1】在主库和从库上 准备复制账户

create user'rpl'@'192.168.1.%' identified by '123456';

grant replication slave on*.* to 'rpl'@'192.168.1.%';

flush privileges;selectuser,host from mysql.user;

#【2】利用备份

#mysqldump,如果备份时加了--master-data=2参数,是有记录binlog文件和位置的。

92a7395c2380eb41a9ab70e696f121d0.png

#XtraBackup,也会复制Binlog文件和位置信息

befc9623e4fb58bd25c16628b16dca54.png

#【3】开始还原

利用备份去进行还原,这个时候多半是不一致的,因为业务在跑。

这个时候利用备份中的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%'; -- 查看半同步状态

主库:

b8d6b39ce2af03247728326185b45a7b.png

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%'; -- 查看半同步配置参数

fabaca5f8a7f4767e0456ece4b700135.png

【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)跳过错误

48304ba5e6f9fe08f3fa1abda7d326ab.png

跳过错误有两种方式:

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)

48304ba5e6f9fe08f3fa1abda7d326ab.png

(4)大对象blog ,text 传输

679916edb5ec646b6bded1869fc78708.png

【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;

参考文章:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/429104.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java+Jmeter接口测试

一、创建工程、引包1、创建JAVA工程2、引入Jmeter中lib\ext基础包:ApacheJMeter_java.jar、ApacheJMeter_core.jar3、引入Jmeter日志包:jorphan.jar,logkit-2.0.jar,commons-logging-1.1.1.jar,avalon-framework-4.1.4…

Discuz3.3精仿小米风格整站模板制作——1、新建模板方案

术语说明: 模板——模板是一堆按照规定命名方式的html文件,用于指定整个论坛不同页面的外观。标签——标签和模板共同作用以实现论坛换肤功能,其中标签主要控制页面显示什么数据,显示多少条等。风格——风格是一个xml配置文件&…

普元连接mysql_普元EOS 案例 - 还有一行代码的个人空间 - OSCHINA - 中文开源技术交流社区...

1 创建项目1) 进入EOS Studio开发透视图;单击主菜单项“文件”选择“新建”->“空EOS项目2) 在弹出的“创建空EOS项目”视图中,配置相关参数。“项目名称”:EOSTriping,3) 单击【完成】按钮,系统完成该项目框架…

十年WEB技术发展历程

Ajax03年的时候我上六年级。那时候网吧刚在小县城的角落萌生。传奇,大话西游第一代网游一时风靡。我抱着试一试的心态给了网吧老板两块钱想申请个号玩玩,然后接下来的一个小时我一直在,注,冊,账。号。彼时网吧用的512k…

Python之编写登陆接口

1.输入用户名密码; 2.认证成功后显示欢迎信息; 3.错误三次后,账号被锁定。 账号文件:user.txt 锁定文件:locked.txt 流程图如下: # -*- coding:utf-8 -*- # Author Caoxl import sysaccount_fileE:\user…

好全的Android面试题

转载:http://www.jianshu.com/p/84ee896c3329 需求描述 各种新技术接触渠道比较狭窄, 面试没有底气。 常见面试知识点及回答没有较系统的准备,就业指导提供的资料没时间看,看了记不住。 面试没有经验, 不清楚面试前要做的各种准备、面试过程…

JavaSE--类加载器

参考:http://www.importnew.com/6581.html Java 编译器会为虚拟机转换源指令。虚拟机代码存储在以 .class 为扩展名的类文件中,每个类文件都包含某个类或者接口的定义和代码实现。这些类文件必须由一个程序进行解释,该程序能够将虚拟机的指令…

java netbeans 教程_NetBeans 教程

NetBeans IDE Java 快速入门教程第一章本章通过指导您创建一个简单的 "Hello World" Java 控制台应用程序,简要介绍 NetBeans IDE 工作流。学习完本教程后,您将对如何在 IDE 中创建和运行应用程序有一个基本了解。学习完本教程所需的时间不到 …

几个python小程序

python小程序 1-100求和 1 def Sum(x, y):2 return xy3 print reduce(lambda x,y:xy,range(1,101))4 5 i 16 j 07 while i < 101:8 j i j9 i 1 10 print j View Code输出1-100之间的奇偶数1 i 1 2 a [] 3 while i < 100: 4 if i%2 0: 5 …

Linux下git使用

一、安装 本人使用的是centos 7&#xff0c;首先安装git 1.下载git&#xff1a;wget https://Github.com/Git/Git/archive/v2.3.0.tar.gz 2.下载之后解压&#xff1a;tar xvf v2.3.0.tar.gz 3.进入解押文件目录&#xff1a;cd git-2.3.0 4.依次运行如下命令&#xff1a; ./conf…

java 水表识别_一种水表数字的AI智能识别方法与流程

本发明涉及模式识别与人工智能技术领域&#xff0c;特别涉及一种直观的水表数字的AI智能识别方法。背景技术&#xff1a;深度学习在目标检测的应用发展迅速&#xff0c;在YOLO(You Only Look Once)之后又出现了升级版本YOLOv2&#xff0c;采用的是Darknet-19作为基础网络&#…

mysql.w002_mysql简单例子

登陆数据库&#xff1a;mysql -u用户名 -p密码 -P端口 -h数据库地址‍‍‍‍‍‍修改mysql提示符&#xff1a;(仅本次连接有效)‍‍‍‍‍‍方法一&#xff1a;执行mysql -uroot -proot -prompt \h结果为&#xff1a;localhost方法二&#xff1a;进入mysql后&#xff0c;执行PR…

JQuery中的Deferred-详解和使用

首先&#xff0c;为什么要使用Deferred&#xff1f; 先来看一段AJAX的代码&#xff1a; 1 var data; 2 $.get(api/data, function(resp) { 3 data resp.data; 4 }); 5 doSomethingFancyWithData(data); View Code 这段代码极容易出问题&#xff0c;请…

【Eclipse】eclipse在线安装反编译插件

1.help->install new software 2.Add Name&#xff1a;jd-eclipse_update_site Location&#xff1a;http://jd.benow.ca/jd-eclipse/update 3.等待加载出来 4.持续点击下一步&#xff0c;直到完成。 转载于:https://www.cnblogs.com/flydkPocketMagic/p/7170283.html

Spring Boot 系列(一)快速入门

简介 Spring Boot是由Pivotal团队提供的全新框架&#xff0c;其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置&#xff0c;从而使开发人员不再需要定义样板化的配置。通过这种方式&#xff0c;Spring Boot致力于在蓬勃发展的快速应…

1. 在虚拟机中 添加内容

步骤&#xff1a; 1. 找到要添加的内容&#xff0c;按住 ctrl c 复制 &#xff0c;例如&#xff1a;复制 飞秋 2. 打开 虚拟机&#xff0c;找到 要复制文件的位置。 3. 将 复制的文件添加到 共享文件夹下面。 4. 打开虚拟机&#xff0c;安装飞秋 5&#xff0c; 最后就完成了…

java web scala_spring boot+scala编写web接口

本人是Java开发者&#xff0c;有面向对象的基础&#xff0c;而Scala也是面向对象的语言&#xff0c;学习后可快速入门。通过学习Scala的面向对象(和java面向对象类似)、Scala的高级函数(map,reduce等&#xff0c;和Java8中的stream编程类似)、Scala的隐式转换(在Java中可通过sp…

java小应用_java小应用

第一次使用简书记笔记&#xff0c;主要目的是为了加深印象&#xff0c;方便忘记时及时翻看。hello.java代码如下&#xff1a;import java.applet.Applet;import java.awt.*;public class hello extends Applet{private Font f1;public void init(){f1 new Font("宋体&quo…

java做橡皮擦效果_HTML5 canvas橡皮擦擦拭效果

这是一款HTML5 canvas橡皮擦擦拭效果。该效果通过canvas来制作遮罩层和擦拭用的橡皮擦&#xff0c;用户可以通过移动鼠标来移除遮罩层&#xff0c;效果非常炫酷。因为发代码有时会排版混乱&#xff0c;所以先发图演示了。源码已经打包好了&#xff0c;想学习的朋友可以下载练习…

mysql to mssql_MysqlToMsSql

MysqlToMsSql是一款简单易用的数据库迁移工具&#xff0c;这款软件功能强大&#xff0c;可以帮助用户将MySQL数据库内容转移到msSQL数据库中&#xff0c;采用可视化操作&#xff0c;支持预览&#xff0c;方便用户查看数据库&#xff0c;实用性强&#xff0c;有需要的用户快来下…