简单谈谈MySQL的半同步复制

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日

相关文章

  • php扩展redis链接失败,返回false

    刚开始接触redis,发现一直返回false,其实只要关闭防火墙就可以连接成功了。 关闭selinux操作   方法1:修改grub.conf将参数selinux=1修改为等于selinux=0,这个将比较测彻底的关闭它。   方法2:修改selinux配置文件/etc/selinux/config中的SELINUX参数修改为SELINUX=disabled…

    Redis 2023年4月11日
    00
  • mysql 5.7.20 win64 安装及配置方法

    MySQL 5.7.20 Win64 安装及配置方法 安装 首先,从MySQL官网下载MySQL 5.7.20的Windows 64位安装程序。下载完成后双击运行安装程序。 在安装向导的第一步中,选择“Custom”(自定义)安装选项。 在第二步中,可以选择你要安装的MySQL组件,选中你所需要的组件即可。在此我选中了“MySQL Server”、“MySQ…

    database 2023年5月22日
    00
  • Amazon DynamoDB和Amazon Redshift的区别

    Amazon DynamoDB和Amazon Redshift是AWS云平台上两个不同的数据库产品,它们有各自的使用场景和优点。下面是它们的详细比较。 概述 Amazon DynamoDB是一种全托管的NoSQL数据库服务,它具有快速、可扩展、可靠、弹性等特点。Amazon Redshift是一种全托管的数据仓库服务,它是基于列存储的架构,适合大规模的数据分…

    database 2023年3月27日
    00
  • node使用mysql获取数据库数据中文乱码问题的解决

    下面是详细讲解“node使用mysql获取数据库数据中文乱码问题的解决”的完整攻略: 问题描述 在 node.js 应用中,获取 Mysql 数据库中的中文数据时,可能会出现乱码问题。 原因分析 Mysql 使用的是 Latin1 编码,而 node.js 默认使用的是 UTF-8 编码。当我们从 Mysql 中读取 Latin1 编码的数据时,node.j…

    database 2023年5月22日
    00
  • SQL 计算同一组或分区的行之间的差

    计算同一组或分区的行之间的差,可以使用SQL中的窗口函数(Window Function)来实现。 窗口函数是一种特殊的SQL函数,可以在SELECT语句中对数据子集进行窗口化操作。窗口函数可以在不改变查询结果集的情况下,对查询结果进行比较、排序、聚合等操作。 常用的窗口函数有:ROW_NUMBER()、RANK()、DENSE_RANK()、NTILE()…

    database 2023年3月27日
    00
  • Linux系统中的rc.local自启动服务

    下面是详细讲解“Linux系统中的rc.local自启动服务”的完整攻略。 1. 简介 在Linux系统中,rc.local是一个管理系统启动时自动执行的脚本文件。它位于/etc目录下,可以用来实现系统启动时自动启动一些程序或服务。 2. rc.local的使用步骤 2.1 编写脚本 首先,在/etc目录下创建一个rc.local文件,可以使用命令: sud…

    database 2023年5月22日
    00
  • MySQL中datetime和timestamp的区别及使用详解

    MySQL中datetime和timestamp的区别及使用详解 概述 MySQL中的datetime和timestamp类型都是用来存储时间的,两者使用起来有一些区别,主要体现在存储范围、存储方式、时区等方面。 datetime类型 datetime类型是用来存储日期和时间的,存储范围为’1000-01-01 00:00:00’到’9999-12-31 2…

    database 2023年5月22日
    00
  • linux下mysql的root密码忘记的解决方法

    下面给出一个详细的Linux下MySQL的root密码忘记的解决方法攻略,具体步骤如下。 步骤1:关闭MySQL服务 在终端中输入以下命令关闭MySQL服务: $ sudo systemctl stop mysql 步骤2:使用mysqld_safe命令启动MySQL 在终端中输入以下命令使用mysqld_safe命令启动MySQL,并跳过权限验证: $ s…

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