首页 > 数据库 >MySQL半同步复制的实现和复制过滤器

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

时间:2022-09-25 19:00:05浏览次数:56  
标签:同步 slave log MySQL 复制 master mysql 过滤器

异步:

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

同步:

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

半同步:

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

MySQL复制默认使用的事异步,异步可以提供最佳的性能,主库把binlog日志发送给从库即结束,并不验证从库是否接收完毕

MySQL实现半同步复制流程:

  • 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使用
范例:MySQL8.0实现半同步复制

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

mysql复制过滤器

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

复制过滤器的两种实现方式:
  • 服务器选项

  • 从服务器选项:

服务器选项:主服务器仅向二进制日志中记录与特定数据库相关的事件
binlog-do-db=db1 #数据库白名单列表,不支持同时指定多个值,如果想实现多个数据库需多行实现

binlog-ignore-db= #数据库黑名单列表
通过服务器选项实现复制过滤的特点:
  • 会间接影响二进制的备份,基于二进制还原将无法实现;不建议使用

  • 只需要在主节点配置一次即可

从服务器选项:从服务器SQL_THREAD在relay log中的事件时,仅读取与特定数据库(特定表)相关的事件
  • 缺点:会造成网络及磁盘IO浪费,在所有从节点都要配置

  • 优点: 不影响二进制备份还原

replicate_do_db="db1,db2,db3" #指定复制库的白名单,变量可以指定逗号分隔的多个值,选项不支持多值,只能分别写多行实现

replicate_ignore_db= #指定复制库黑名单

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

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

标签:同步,slave,log,MySQL,复制,master,mysql,过滤器
From: https://www.cnblogs.com/heyongshen/p/16728486.html

相关文章

  • 老杜MySQL/days.05(事务)
    1.事务(一个完整的业务逻辑,最小的工作单元)a.事务中的语句要么全部成功,要么全部失败;b.只有DML语句才有事务的说法,即insert、delete、update;c.事务怎么做......
  • mysql分组后选出最大值所在的那一行数据
    背景mysql中使用groupby进行分组后取某一列的最大值,我们可以直接使用MAX()函数来实现,但是如果我们要取最大值所在的那一行或多行(可能有多行对应的最大值都一样)那么我们需......
  • MySQL数据库安装保姆级教程及1045错误和2058问题解决
    使用Mysql的zip压缩包解压版,下载之后需进行一定的配置,才能使用它。下面对Mysql压缩包版的安装方法进行详细的描述,如有疑问或错误,望及时反馈。首先,mysql的官方下载地址......
  • 【博学谷学习记录】超强总结,用心分享|Java基础分享-MySQL 有哪些锁
    目录1.全局锁2.表级锁2.1表锁2.2元数据锁2.3意向锁2.4AUTO-INC锁3.行级锁 1.全局锁全局锁是怎么用的?要使用全局锁,则要执行这条命:flushtableswithread......
  • 老杜MySQL/days.04(约束)
    1.快速创建表(不常用):create table 表名 as select * from 表名;或 create table 表名 as select 字段1,字段2,...from 表名 where 筛选条件;......
  • mysql进阶
    1表的设计     一对一比如一个学生有一个账户,一个账户也只能被一个学生注册一对多可以创建两个表,一个学生表一个班级表  多对多  1号学生选......
  • 老杜MySQL/days.03
    1.数据类型(varchar,char,int,bigint,float,double,date,datetime,clob,blob)varchar:可变长度字符串;存储数据的时候判断字符长度进行空间分配,速度慢;char:固定长度,速度快,容易......
  • 老杜MySQL/days.02
    1.distinct只能出现在所有字段的前方,但是可以结合分组函数使用;2.笛卡尔积:两张表的连接查询不加限制,就会出现;(最终数据条数=两表记录条数的乘积)注:加了限制后,匹配......
  • MySql
    关系型数据库:二维表,都是表结构易于查询,数据存在磁盘中安全,使用通用的SQL语言方便注释--这里有一个空格 或者#DDL:操作数据库,表   数据库操作:showdatabas......
  • 计算机毕业设计 SpringBoot+Vue招投标系统 招标系统 投标系统 招标采购系统Java Vue M
    ......