MySQL半同步复制的实现和复制过滤器

当客户端发送给服务端请求时,在等待服务端响应的时候,客户端可以做其他的事情,这样节约了时间,提高了效率。

当客户端发送请求给服务端,在等待服务端响应的请求时,客户端不做其他的事情。当服务端做完了才返回到客户端

介于同步和异步之间,mysql进行主从复制的时候,只要将数据复制给一个slave节点就通知用户成功。(只有一个从节点,半同步就意义不大,多个从节点才有意义)

MySQL复制默认使用的事异步,异步可以提供最佳的性能,主库把binlog日志发送给从库即结束,并不验证从库是否接收完毕
  • 1.需要在数据库中安装对应的插件
  • 2.启用半同步功能并设置复制阈值(slave只需要开启半同步功能)
  • 3.配置MySQL主从复制
[root@CentOS8 ~]# rpm -ql mysql-server |grep semisync
/usr/lib64/mysql/plugin/semisync_master.so #master使用
/usr/lib64/mysql/plugin/semisync_slave.so #slave使用

master:10.0.0.10

#安装对应的插件
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
Query OK, 0 rows affected (0.01 sec)

#启用半同步功能并设置复制阈值
[root@CentOS8 ~]# cat /etc/my.cnf.d/mysql-server.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysql/mysqld.log
pid-file=/run/mysqld/mysqld.pid

server_id=1
log-bin=/data/logbin/mysql-logbin

rpl_semi_sync_master_enabled=ON
rpl_semi_sync_master_timeout=3000   #设置3s内无法同步,也将返回成功信息给客户端

#创建用于复制的用户账号
mysql> create user repluser@'10.0.0.%';
Query OK, 0 rows affected (3.00 sec)

mysql> grant replication slave on *.* to repluser@'10.0.0.%';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

#mysql8.0不能授权的时候同时创建账号

slave1:10.0.0.13

#安装插件
mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
Query OK, 0 rows affected (0.01 sec)

#开启功能
[root@CentOS8 ~]# cat /etc/my.cnf.d/mysql-server.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysql/mysqld.log
pid-file=/run/mysqld/mysqld.pid

server_id=13
relay-log=/data/relaylog/relay-log
#slave_skip_errors=1007|ALL

rpl_semi_sync_slave_enabled=ON

#连接到master
mysql> change master to
    -> master_host='10.0.0.10',
    -> master_user='repluser',
    -> master_port=3306,
    -> master_log_file='mysql-logbin.000001',
    -> master_log_pos=787;
Query OK, 0 rows affected, 2 warnings (0.01 sec)

#开启slave的复制线程:
mysql> start slave;

slave2:10.0.0.14

操作同slave1
查看MySQL的插件:mysql>SHOW PLUGINS;

确认是否开启半同步复制和复制阈值: mysql> SHOW GLOBAL VARIABLES LIKE '%semi%';

查看目前已经存在的半同步复制客户端:mysql> SHOW GLOBAL STATUS LIKE '%semi%';(是一个状态变量)

临时开启半同步复制和设置阈值:
mysql>SET GLOBAL rpl_semi_sync_master_enabled=1; #临时修改变量

mysql>SET GLOBAL rpl_semi_sync_master_timeout = 3000;  #超时长1s,默认值为10s

作用:让从节点只复制指定的数据库,或指定数据库的指定表

  • 服务器选项
  • 从服务器选项:
binlog-do-db=db1 #数据库白名单列表,不支持同时指定多个值,如果想实现多个数据库需多行实现

binlog-ignore-db= #数据库黑名单列表
  • 会间接影响二进制的备份,基于二进制还原将无法实现;不建议使用
  • 只需要在主节点配置一次即可

  • 缺点:会造成网络及磁盘IO浪费,在所有从节点都要配置

  • 优点: 不影响二进制备份还原
replicate_do_db="db1,db2,db3" #指定复制库的白名单,变量可以指定逗号分隔的多个值,选项不支持多值,只能分别写多行实现

replicate_ignore_db= #指定复制库黑名单

replicate_do_table= #指定复制表的白名单

replicate_ignore_table= #指定复制表的黑名单

Original: https://www.cnblogs.com/heyongshen/p/16728486.html
Author: 背对背依靠
Title: MySQL半同步复制的实现和复制过滤器

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/578572/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • shell脚本中 /dev/null 的用途

    /dev/null 是一个特殊的设备文件,它丢弃一切写入其中的数据 可以将它 视为一个黑洞, 它等效于只写文件, 写入其中的所有内容都会消失, 尝试从中读取或输出不会有任何结果,同…

    Linux 2023年6月13日
    090
  • 模板化的封装,降低业务代码开发

    复杂的问题,往往需要简单的逻辑; 一、业务背景 业务开发是一件复杂且耗时的工程,所以最近几年出了一个很火的概念叫做”低代码”开发,简单的说就是开发人员通过简…

    Linux 2023年6月14日
    094
  • 网络设备配置–7、配置单臂路由实现跨vlan通信

    一、前言 同系列前几篇:网络设备配置–1、配置交换机enable、console、telnet密码网络设备配置–2、通过交换机划分vlan网络设备配置&#8…

    Linux 2023年6月8日
    0105
  • c++的bind使用方法

    c++的bind使用方法 除了容器有适配器之外,其实函数也提供了适配器,适配器的特点就是将一个类型改装成为拥有子集功能的新的类型。其中函数的适配器典型的就是通过 std::bind…

    Linux 2023年6月14日
    090
  • 系统设计的11个考虑

    有了《系统架构的11条原则》,真正到设计阶段还有另外11个考虑。 系统正确性 考虑一:负负得正 假如我们看到某个代码,明显有逻辑错误,想随手改改。你就要考虑一件事情:这段明显有问题…

    Linux 2023年6月14日
    091
  • Linux基础入门笔记

    Linux内核最初只是由芬兰人林纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的。 Linux是一套免费使用和自由传播的类Unix操作系统,是一…

    Linux 2023年6月14日
    066
  • 016 Linux 卧槽,看懂进程信息也不难嘛?top、ps

    1 扒开看看 top 命令参数详情 第一行,[top – ]任务队列信息 第二行,[Tasks] 任务(进程) 第三行,[Cpu(s)]状态信息 第四行,[Mem]内存…

    Linux 2023年5月27日
    0118
  • 怎么实现Redis的高可用?(主从、哨兵、集群)

    高可用有两个含义: 一是数据尽量不丢失,二是保证服务尽可能可用。 AOF 和 RDB 数据持久化保证了数据尽量不丢失,那么多节点来保证服务尽可能提供服务。 一般在实际生产中,服务不…

    Linux 2023年5月28日
    088
  • 【Leetcode】768. 最多能完成排序的块 II

    arr是一个可能包含重复元素的整数数组,我们将这个数组分割成几个”块”,并将这些块分别进行排序。之后再连接起来,使得连接的结果和按升序排序后的原数组相同。 …

    Linux 2023年6月6日
    089
  • [转]Redis cluster failover

    今天测试了redis cluster failover 功能,在切换过程中很快,但在failover时有force 与takeover 之分 [RHZYTEST_10:REDIS:…

    Linux 2023年5月28日
    088
  • JavaScript 的闭包(closure)

    关于JavaScript 的闭包(closure)的笔记 以下内容为本人的学习笔记,如需要转载,请声明原文链接微信公众号「englyf」 https://www.cnblogs.c…

    Linux 2023年6月6日
    0118
  • docker网络模型

    [root@iZuf620p8rsr3faul3zsx6Z ~]# docker network –help Usage: docker network COMMAND Mana…

    Linux 2023年6月13日
    0120
  • NTP和chrony时间同步

    古代计时方式 ●在远古时期,人类用来确定时间的方式是一些自然界”相对”亘古不变的周期。如地球的公转是为一年,月球的公转是为一月,地球的自转是为一天等,最早的…

    Linux 2023年6月7日
    0106
  • 操作系统实战45讲笔记- 05 CPU工作模式:程序执行的三种模式

    实模式 实模式又称实地址模式,实,即真实,这个真实分为两个方面,一个方面是运行真实的指令,对指令的动作不作区分,直接执行指令的真实功能,另一方面是发往内存的地址是真实的,对任何地址…

    Linux 2023年6月7日
    081
  • [云计算]TCP云架构-思维导图

    博客园 :当前访问的博文已被密码保护 请输入阅读密码: Original: https://www.cnblogs.com/Skybiubiu/p/16276893.htmlAut…

    Linux 2023年6月13日
    079
  • Redis安装(CentOS 8.5 64位)

    Redis安装 1. 准备工作 1.1 下载安装包 官网下载地址:https://redis.io/ 1.2 传输文件到服务器 使用ssh工具连接到服务器,把下载好的文件上传到服务…

    Linux 2023年6月14日
    092
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球