详解MySQL的半同步

详解MySQL的半同步攻略

什么是半同步

MySQL的半同步(semi-sync)是一种保证MySQL主从同步数据一致性的机制。在主从复制中,数据库的写入操作会在主服务器上进行,然后将同步到从服务器。半同步的原理是在主服务器将事务提交到Binlog日志之后,等待至少一个从服务器返回Ack确认信息后再提交成功,从而确保主从数据的一致性。

MySQL的半同步是通过一个名为“plugin”的插件实现的,插件提供了主从复制的半同步数据传输和同步确认。

如何启用半同步

启用半同步需要进行如下配置:

  1. 首先确保MySQL版本在5.5以上,并且innodb存储引擎为主引擎。

  2. 将“plugin-load”参数配置到主从服务器的配置文件中。这个参数告诉MySQL需要加载半同步插件。

plugin-load = "rpl_semi_sync_master.so,rpl_semi_sync_slave.so"
  1. 启用半同步的主从日志同步方式。在主从服务器中分别配置以下参数:

  2. 主服务器:

ini
plugin-load = "rpl_semi_sync_master.so"
rpl-semi-sync-master-enabled = 1

  • 从服务器:

ini
plugin-load = "rpl_semi_sync_slave.so"
rpl-semi-sync-slave-enabled = 1

示例说明1:模拟半同步传输失败情况

下面我们通过模拟的方式来说明半同步的工作原理。假设主服务器上的一个事务必须传输到从服务器,我们可以手动停止从服务器上的半同步插件,从而模拟插件异常的情况。

首先,在主服务器上创建一个测试数据库,并插入一些数据:

CREATE DATABASE test;
USE test;
CREATE TABLE t1 (a int);
INSERT INTO t1 VALUES (1), (2), (3), (4), (5);

然后,在从服务器上停止半同步插件:

STOP PLUGIN rpl_semi_sync_slave;

此时,在主服务器上进行一个事务,等待从服务器确认:

USE test;
BEGIN;
INSERT INTO t1 VALUES (6), (7);
COMMIT;

可以看到,在主服务器上事务已经提交,并等待从服务器的返回信息:

Query OK, 2 rows affected (0.00 sec)

--------------
SEMI-SYNC ACK
--------------

+------------+-------------+-----------+-----------+------------+----------------+
| SYNC_MASTER | NO_MASTER_MB | SYNC_SLAVE | NO_SLAVE_MB | SLAVES_CONN | SLAVES_NOT_CONN |
+------------+-------------+-----------+-----------+------------+----------------+
|          0 |           0 |         0 |         0 |          1 |              0 |
+------------+-------------+-----------+-----------+------------+----------------+
1 row in set (1.00 sec)

现在,我们在从服务器上重新启动半同步插件:

START PLUGIN rpl_semi_sync_slave;

从服务器将会向主服务器发送确认信息,并将数据传输到从服务器:

Query OK, 0 rows affected (1.51 sec)

--------------
SEMI-SYNC ACK
--------------

+------------+-------------+-----------+-----------+------------+----------------+
| SYNC_MASTER | NO_MASTER_MB | SYNC_SLAVE | NO_SLAVE_MB | SLAVES_CONN | SLAVES_NOT_CONN |
+------------+-------------+-----------+-----------+------------+----------------+
|          1 |           0 |         1 |         0 |          1 |              0 |
+------------+-------------+-----------+-----------+------------+----------------+
1 row in set (1.51 sec)

示例说明2:半同步传输成功的情况

接下来,我们模拟一个半同步传输成功的情况。假设我们在主服务器上开启了半同步插件,然后在从服务器上进行同步。

首先,在主服务器上创建一个测试数据库,并插入一些数据:

CREATE DATABASE test;
USE test;
CREATE TABLE t1 (a int);
INSERT INTO t1 VALUES (1), (2), (3), (4), (5);

然后,配置主从服务器的插件并启动半同步插件:

# 主服务器
plugin-load = "rpl_semi_sync_master.so"
rpl-semi-sync-master-enabled = 1

# 从服务器
plugin-load = "rpl_semi_sync_slave.so"
rpl-semi-sync-slave-enabled = 1

因为我们需要同步从服务器的数据,所以在从服务器上启动同步:

CHANGE MASTER TO
  MASTER_HOST='127.0.0.1',
  MASTER_PORT=3306,
  MASTER_USER='repl',
  MASTER_PASSWORD='password',
  MASTER_AUTO_POSITION=1;
START SLAVE;

接下来,在主服务器上进行一些操作,并提交事务:

USE test;
BEGIN;
INSERT INTO t1 VALUES (6), (7);
COMMIT;

可以看到从服务器已经同步了数据,并返回了Ack确认信息:

--------------
SEMI-SYNC ACK
--------------

+------------+-------------+-----------+-----------+------------+----------------+
| SYNC_MASTER | NO_MASTER_MB | SYNC_SLAVE | NO_SLAVE_MB | SLAVES_CONN | SLAVES_NOT_CONN |
+------------+-------------+-----------+-----------+------------+----------------+
|          1 |           0 |         1 |         0 |          1 |              0 |
+------------+-------------+-----------+-----------+------------+----------------+
1 row in set (0.00 sec)

总结

半同步可以确保MySQL主从复制的数据一致性。因此,在进行高可用架构和负载均衡时,半同步是非常重要的机制。启用半同步需要进行一些配置,但这些配置并不复杂。我们通过模拟的方式了解了半同步的工作原理。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解MySQL的半同步 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • 手把手教你用Redis 实现点赞功能并且与数据库同步

    手把手教你用Redis 实现点赞功能并且与数据库同步 一、背景介绍 在网站或应用中,点赞功能是常见的交互方式,它的实现需要进行大量的计数和数据存储。如果全部使用数据库进行点赞数量统计和查询功能相关操作,会对数据库造成不小的压力,从而影响整个应用的性能。 为了解决这个问题,我们可以使用Redis来实现点赞功能。Redis是一种内存数据存储系统,因此在执行计数操…

    database 2023年5月22日
    00
  • Redis–主从复制(Sync,PSYNC)

    转自https://www.cnblogs.com/wind-snow/p/11396446.html   Redis 中,可以通过执行 savleof 命令或者设置 slaveof 选项,让一个服务器去复制另一个服务器,我们称被复制的服务器为主服务器,而对主服务器进行复制的服务器则被称为从服务器。 命令示例:   127.0.0.1:12345>SL…

    Redis 2023年4月12日
    00
  • Mysql 5.7.18安装方法及启动MySQL服务的过程详解

    Mysql 5.7.18安装方法及启动MySQL服务的过程详解 Mysql是一种流行的关系型数据库管理系统,本文将为大家介绍Mysql 5.7.18的安装方法及启动MySQL服务的过程,并提供两个示例说明。 安装Mysql 5.7.18 步骤一:下载Mysql 5.7.18 官网下载地址:https://dev.mysql.com/downloads/mys…

    database 2023年5月22日
    00
  • DBMS 中的死锁

    DBMS 中的死锁 什么是死锁 死锁是指当两个或多个事务相互请求对方占用的资源时,导致系统中出现无法转化的状态,进而导致事务阻塞,无法继续执行的现象。在产生死锁的情况下,没有一个事务可以完成,系统没有办法正常运行。 如何避免死锁 要避免死锁,我们必须去写一些适当的代码,确保事务按照特定的顺序对资源进行访问。下面是一些常见的避免死锁的方法: 加锁顺序:确保在多…

    database 2023年3月27日
    00
  • java redis 工具类

    1 package com.mohecun.jedis; 2 3 public interface JedisClient { 4 5 String set(String key, String value); 6 String get(String key); 7 Boolean exists(String key); 8 Long expire(Stri…

    Redis 2023年4月11日
    00
  • CentOs7.x安装Mysql的详细教程

    下面是CentOS7.x安装MySQL的完整攻略: 环境准备 在安装之前需要先准备好以下环境:- 安装好CentOS 7.x系统- 确认安装好了yum包管理器 安装mysql 在终端中输入以下命令,更新yum源和已安装的包: sudo yum update -y && sudo yum upgrade -y 安装mysql: sudo yum…

    database 2023年5月22日
    00
  • 离线安装redis集群

      Step0:redis集群组件需求 Step1:离线安装ruby Step2:离线安装rubygems Step3:安装rubygems的 redis api Step4:离线安装tcl 8.6 Step5:离线安装redis Step6:启动redis守护进程及配置主从复制 Step7:测试redis集群     Step0:redis集群需要安装如下…

    Redis 2023年4月12日
    00
  • linux下mysql自动备份脚本代码

    下面就为你讲解“Linux下MySQL自动备份脚本代码”的完整攻略。 1. 安装MySQL 在开始备份之前,需要先安装MySQL,这里以CentOS系统为例。 sudo yum install mysql-server sudo service mysqld start sudo chkconfig mysqld on 2. 安装MySQL备份脚本 备份脚本…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部