mysql半同步复制和异步复制的区别如上述架构图所看到的:在mysql异步复制的情况下。Mysql Master Server将自己的Binary Log通过复制线程传输出去以后,Mysql Master Sever就自己主动返回数据给client。而无论slave上是否接受到了这个二进制日志。在半同步复制的架构下。当master在将自己binlog发给slave上的时候。要确保slave已经接受到了这个二进制日志以后,才会返回数据给client。

对照两种架构:异步复制对于用户来说,能够确保得到高速的响应结构,可是不能确保二进制日志确实到达了slave上。半同步复制对于客户的请求响应略微慢点,可是他能够保证二进制日志的完整性。

以下来配置一个半同步复制实现的主从架构:

192.168.1.141为mysql的主server

192.168.1.142为mysql的从server



1.为mysql主server提供配置

编辑/etc/my.cnf,提供下面的配置

log_bin=index

server_id=1

在主server上授权

# mysql> grant replication slave,replication client on user@'192.168.1.142' identified by "123456";

# mysql> flush privileges;





2.为mysql从服务提供配置

编辑/etc/my.cnf,提供下面的配置

server_id=10

relay_log=relay

read_only=on

skip-slave-start=1

进入mysql命令行接口

# mysql > change master to MASTER_HOST="192.168.1.141",MASTER_USER="user",MASTER_PASSWORD="123456",MASTER_LOG_FILE="index.000004",MASTER_LOG_POS=429;

# mysql > start slave;

假设可以看到Slave_IO_Running: Yes和Slave_SQL_Running:Yes两行信息的话。证明主从配置已经成功。



要使用mysql的半同步复制功能须要为mysql装插件,mysql默认支持的插件在/usr/local/mysql/lib/plugin/,里面有两个semisync_master.so和semisync_slave.so的共享库是我们实现mysql半同步复制的关键





3.设置半同步复制


在mysql主server的命令行接口下运行例如以下代码:

# mysql > install plugin rpl_semi_sync_master SONAME 'semisync_master.so';

# mysql > show variables like "%semi%";(假设看到新增的semi变量的话证明安装模块成功)

| rpl_semi_sync_master_enabled       | OFF   | 是否启动半同步复制,默认关闭

| rpl_semi_sync_master_timeout        | 10000 | 等待从server告诉接受到的超时时间,假设时间到了。还没接受到,自己主动降级为异步

| rpl_semi_sync_master_trace_level   | 32    | 执行级别

| rpl_semi_sync_master_wait_no_slave | ON    | 没有slave的时候是否也须要等待。默觉得也须要等待

# mysql > set global rpl_semi_sync_master_enabled = 1;

# mysql > set global rpl_semi_sync_master_timeout = 1000;

在mysql从server的命令行接口下运行例如以下代码:

# mysql > install plugin rpl_semi_sync_slave SONAME 'semisync_slave.so';

# mysql > show variables like "%semi%";(假设看到新增的semi变量的话证明安装模块成功)

# mysql > set global rpl_semi_sync_slave_enabled = 1;

# stop slave;

# start slave;

最后把经常使用的配置參数写如配置文件里:

192.168.1.141:

[mysqld]

rpl_semi_sync_master_enabled=1


rpl_semi_sync_master_timeout=1000



192.168.1.142:

[mysqld]

rpl_semi_sync_slave_enabled=1





4.查看半同步复制的状况信息

在192.168.1.141运行例如以下命令:

mysql> show status like "%semi%";

+-------------------------------------------------------------------+----------+

| Variable_name                                                                | Value |

+-------------------------------------------------------------------+----------+

| Rpl_semi_sync_master_clients                                    | 1     |   半同步复制客户端的个数

| Rpl_semi_sync_master_net_avg_wait_time              | 555   |   平均等待时间(默认毫秒)

| Rpl_semi_sync_master_net_wait_time                      | 1665  |   总共等待时间

| Rpl_semi_sync_master_net_waits                              | 3     |   等待次数

| Rpl_semi_sync_master_no_times                              | 0     |   关闭半同步复制的次数

| Rpl_semi_sync_master_no_tx                                      | 0     |   表示没有成功接收slave提交的次数

| Rpl_semi_sync_master_status                                   | ON    |   表示当前是异步模式还是半同步模式。on为半同步

| Rpl_semi_sync_master_timefunc_failures               | 0     |   调用时间函数失败的次数

| Rpl_semi_sync_master_tx_avg_wait_time              | 575   |   事物的平均传输时间

| Rpl_semi_sync_master_tx_wait_time                      | 1725  |   事物的总共传输时间

| Rpl_semi_sync_master_tx_waits                                | 3     |   事物等待次数

| Rpl_semi_sync_master_wait_pos_backtraverse    | 0     |  

| Rpl_semi_sync_master_wait_sessions                    | 0     |   当前有多少个session由于slave的回复而造成等待

| Rpl_semi_sync_master_yes_tx                                   | 3     |   成功接受到slave事物回复的次数

+-------------------------------------------------------------------+---------+



5.取消半同步复制的插件

192.168.1.141上:

# mysql > uninstall plugin rpl_semi_sync_master;

# mysql > show status like "%semi%"



192.168.1.142上:

# mysql > uninstall plugin rpl_semi_sync_slave;

# mysql > show status like "%semi%"

mysql半同步复制实现的更多相关文章

  1. MySQL半同步复制

    从MySQL5.5开始,MySQL以插件的形式支持半同步复制.如何理解半同步呢?首先我们来看看异步,全同步的概念 异步复制(Asynchronous replication) MySQL默认的复制即是 ...

  2. MySQL半同步复制的数据一致性探讨微信后台团队实践【转】

    MySQL是一个RDBMS(关系型数据库管理系统),由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.由于其体积小.速度快.拥有成本低,尤其是开放源码这一特点,广受各大企业欢迎,包括 ...

  3. Mysql半同步复制模式说明及配置示例 - 运维小结

    MySQL主从复制包括异步模式.半同步模式.GTID模式以及多源复制模式,默认是异步模式 (如之前详细介绍的mysql主从复制).所谓异步模式指的是MySQL 主服务器上I/O thread 线程将二 ...

  4. 安装MySQL半同步复制

    一.简介 从MySQL5.5开始,MySQL以插件的形式支持半同步复制.如何理解半同步呢?首先我们来看看异步,全同步的概念 异步复制(Asynchronous replication) MySQL默认 ...

  5. MySQL半同步复制(5.5之后引入)

    半同步复制架构在主库提交一个事务后,commit完成即反馈客户端,无需等待推送binlog完成,如图: 半同步复制在主库完成一个事务后,需等待事务信息写入binlog日志并且至少有一个从库写入rela ...

  6. MySQL半同步复制搭建

    默认情况下,MySQL 5.5/5.6/5.7和MariaDB 10.0/10.1的复制是异步的,异步复制可以提供最佳性能,主库把binlog日志发送给从库,这一动作就结束了,并不会验证从库是否接收完 ...

  7. (5.5)mysql高可用系列——MySQL半同步复制(实践)

    关键词,mysql半同步复制 [0]实验环境 操作系统:CentOS linux 7.5 数据库版本:5.7.24 数据库架构:主从复制,主库用于生产,从库用于数据容灾和主库备机,采用默认传统的异步复 ...

  8. mysql半同步复制跟无损半同步区别

    mysql半同步复制跟无损半同步复制的区别: 无损复制其实就是对semi sync增加了rpl_semi_sync_master_wait_point参数,来控制半同步模式下主库在返回给会话事务成功之 ...

  9. MySQL半同步复制源码解析

    今天 DBA 同事问了一个问题,MySQL在半同步复制的场景下,当关闭从节点时使得从节点的数量 < rpl_semi_sync_master_wait_for_slave_count时,show ...

随机推荐

  1. 计算机系统—CPU结构和内部工作

    一.计算机系统硬件组成 计算机系统的基本组成由:计算器.控制器.存储器.输入和输出设备这5大核心部件组成. 运算器和控制器等继承在一起成为CPU.以下通过这张图能够非常清楚的表达计算机系统.先从全局上 ...

  2. Web自动化测试 Selenium+Eclipse+Junit+TestNG+Python

    Selenium+Eclipse+Junit+TestNG+Python 第三步 下载Selenium IDE.SeleniumRC.IEDriverServer.SeleniumClient Dri ...

  3. [Angular] Design API for show / hide components based on Auth

    Simple Auth service: import { Injectable } from '@angular/core'; import {HttpClient} from '@angular/ ...

  4. Linux下的lds链接脚本简介(二)

    七. SECTIONS命令 SECTIONS命令告诉ld如何把输入文件的sections映射到输出文件的各个section: 如何将输入section合为输出section; 如何把输出section ...

  5. 【Codeforces Round #435 (Div. 2) A】Mahmoud and Ehab and the MEX

    [链接]h在这里写链接 [题意] 在这里写题意 [题解] 让x没有出现,以及0..x-1都出现就可以了. [错的次数] 0 [反思] 在这了写反思 [代码] #include <bits/std ...

  6. js模仿块级作用域(js没有块级作用域私有作用域)

    js模仿块级作用域(js没有块级作用域私有作用域) 一.总结 1.js没有块级作用域:在for循环中定义的i,出了for循环还是有这个i变量 2.js可以模拟块级作用域:用立即执行的匿名函数:(匿名函 ...

  7. stm32四种输入

    1.          上拉输入(GPIO_Mode_IPU)   上拉输入就是信号进入芯片后加了一个上拉电阻,再经过施密特触发器转换成0.1信号,读取此时的引脚电平为高电平:   2.       ...

  8. int to str

    string int2str( int num){ if (num == 0 ) return " 0 " ; string str = "" ; int nu ...

  9. spring项目启动后,获取bean的方法总结

    如果在web项目中,用到定时器的朋友可能会遇到使用spring注解的方式获取bean的时候报空指针的异常.这是就可以使用手工的方法获取spring容器中的bean了. 下面是具体的方法: 1.先说一个 ...

  10. 【50.00%】【codeforces 602C】The Two Routes

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...