简单谈谈MySQL的半同步复制

yizhihongxing

MySQL的半同步复制是一种高可用性和数据一致性的数据复制方式,它可以在主节点提交事务后,等待至少一个从节点也提交了该事务才返回成功,保证了数据的可靠性,同时又不会像全同步复制一样影响主库的写入效率。下面是详细的攻略:

步骤一:修改MySQL的配置文件

在MySQL的配置文件(my.cnf)中,需要打开半同步复制选项:

[mysqld]
plugin-load=“semisync_master.so;semisync_slave.so”  # 加载插件
# 设置为 1 表示开启半同步复制,0 表示关闭
# 默认为 OFF 且只能在主库启用
# 关闭半同步复制的方式是修改为 SEMI_SYNC_SLAVE=NO
# 把以下 2 个参数写在主库的配置文件 my.cnf 中
# 从库可以不设置
# 开启半同步复制需满足高版本(5.5.16)和配套网络协议
# 另外,务必要 根据版本下载对应的插件
# 下载地址:https://dev.mysql.com/downloads/mysql/
# 例如:percona-server-5.6.40-84.0.tar.gz/MySQL-server-5.7.26-1.el7.x86_64.rpm
# 这里为了简单只讲半同步,其中 SSL 没有加入

# 主库需要开启半同步复制,从库无需开启
# semisync_master_enabled 设定打开 MySQL 半同步复制能力
# 只有在主机上打开时才能生效。
semisync_master_enabled = 1
# 从库是否要接受半同步复制的同步信息,值为0或1。
semisync_slave_enabled = 1
# 查看半同步插件状态信息
show plugins;

步骤二:重启MySQL实例

重启MySQL服务,让修改的配置文件生效。

步骤三:创建测试表和插入测试数据

先创建一张测试表:

create table test(
    id int primary key,
    name varchar(20)
) engine=InnoDB;

插入测试数据:

insert into test values(1,'test1'),(2,'test2'),(3,'test3');

步骤四:创建从库

创建从库用于数据同步:

# 复制主库的数据前,我们先配置从库的信息,命令如下
# REPLICA_SERVER_ID 是从库的 ID,这个值必须唯一并非 0。

CHANGE MASTER TO
MASTER_HOST='主库ip',
MASTER_PORT=3306,
MASTER_USER='用户名',
MASTER_PASSWORD='密码',
MASTER_LOG_FILE='binlog日志名称',
MASTER_LOG_POS=主库的 binlog 日志点,
MASTER_CONNECT_RETRY=10,
MASTER_HEARTBEAT_PERIOD=1;  # 主库和从库进行连接检查的心跳周期默认值是一秒

步骤五:开启从库同步

在从库上执行以下命令,开启同步,等待同步成功:

START SLAVE;
SHOW SLAVE STATUS \G;

步骤六:在主库中插入数据

在主库中插入新数据:

INSERT INTO test VALUES (4, 'test4');

等待从库同步成功,可以通过执行 SHOW SLAVE STATUS \G;查看复制状态,其中 Seconds_Behind_Master字段应该为0。

示例一

在主库中执行如下SQL语句:

INSERT INTO test VALUES (5, 'test5');

等待从库同步成功后,执行查询语句:

SELECT * FROM test;

结果应该如下:

id name
1 test1
2 test2
3 test3
4 test4
5 test5

示例二

在主库中执行如下SQL语句:

BEGIN;
UPDATE test SET name='new test' WHERE id=1;
INSERT INTO test VALUES (6, 'test6');
COMMIT;

等待从库同步成功后,执行查询语句:

SELECT * FROM test;

结果应该如下:

id name
1 new test
2 test2
3 test3
4 test4
5 test5
6 test6

以上就是MySQL的半同步复制的相关攻略。

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

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

相关文章

  • 详解java实践SPI机制及浅析源码

    详解 Java 实践 SPI 机制及浅析源码 什么是 SPI 机制 SPI(Service Provider Interface)即服务提供者接口,是一种动态替换服务实现的机制。在 SPI 机制中,服务接口的实现必须和接口分离,并通过配置文件声明其实现类。 如何使用 SPI 机制 Java SPI 机制基于 Java 的类加载机制实现。以 java.util…

    database 2023年5月22日
    00
  • Centos 7.3下SQL Server安装配置方法图文教程

    Centos 7.3下SQL Server安装配置方法图文教程 Microsoft SQL Server是一种关系数据库管理系统,可用于存储和检索数据。本教程将向您展示如何在CentOS 7.3上安装和配置SQL Server。 步骤1:添加Microsoft SQL Server存储库 使用以下命令将Microsoft SQL Server存储库添加到Ce…

    database 2023年5月22日
    00
  • SQL 和 NoSQL 的区别

    SQL和NoSQL是两种不同的数据库类型,主要区别在于它们管理数据的方式和存储结构。下面我将详细介绍SQL和NoSQL的区别,并提供两个实例来帮助你更好地理解这个问题。 SQL和NoSQL的区别 SQL SQL(Structured Query Language,结构化查询语言)是一种基于关系模型的数据库类型。它使用表和行来组织和存储数据,并使用SQL语言来…

    database 2023年3月27日
    00
  • Redis事务和分布式锁

    Redis事务   Redis中的事务(transaction)是一组命令的集合。事务同命令一样都是Redis最小的执行单位,一个事务中的命令要么都执行,要么都不执行。Redis事务的实现需要用到 MULTI 和 EXEC 两个命令,事务开始的时候先向Redis服务器发送 MULTI 命令,然后依次发送需要在本次事务中处理的命令,最后再发送 EXEC 命令表…

    Redis 2023年4月11日
    00
  • MySQL死锁原因分析

    行级锁有三种模式: innodb 行级锁 record-level lock大致有三种:record lock, gap lock and Next-KeyLocks。 record lock  锁住某一行记录   gap lock     锁住某一段范围中的记录  next key lock 是前两者效果的叠加。   问题: 行级锁表现形式:next-ke…

    MySQL 2023年4月13日
    00
  • 数据库 SQL千万级数据规模处理概要

    数据库 SQL千万级数据规模处理概要 数据库是现代Web应用的基础之一。在数据量越来越大的场景下,如何高效地处理大规模的数据成为了亟需解决的问题。SQL(结构化查询语言)作为关系型数据库最主要的操作语言,在千万级的数据规模下的处理也需要特别的技巧。 本文将从以下几个方面展开攻略: 数据库设计 数据库索引 SQL查询优化 分布式数据库 数据库设计 在设计数据库…

    database 2023年5月19日
    00
  • CentOS7环境下MySQL8常用命令小结

    以下是CentOS7环境下MySQL8常用命令小结的完整攻略。 一、安装MySQL8 MySQL8可以通过yum命令进行安装: sudo yum install mysql-server 安装完成后,可以通过以下命令启动MySQL8服务: sudo systemctl start mysqld.service 二、登录MySQL8 在CentOS7环境下,可…

    database 2023年5月18日
    00
  • CentOS 7安装MySQL的详细步骤

    下面是CentOS 7安装MySQL的详细步骤: 环境准备 在开始安装MySQL之前,需要对环境进行准备: 确保服务器可以连接到互联网,并具备sudo权限。 确认本地没有安装MySQL或MariaDB,如果有,请先卸载。 安装MySQL 以下是在CentOS 7上安装MySQL的完整步骤: 1. 更新软件包 在安装MySQL之前,应该使用以下命令更新软件包:…

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