mysql半同步复制安装配置

一 半同步复制介绍

1.半同步复制产生的起源

默认情况下,MySQL复制是异步的。

主服务器将事件写入其二进制日志,但不知道从服务器是否或何时检索并处理它们。

对于异步复制,如果主服务器崩溃,它提交的事务可能不会传输到任何从服务器。

因此,在这种情况下,从主服务器到从服务器的故障转移可能会有些数据不一致问题。

半同步复制可用作异步复制的替代。

 

2.半同步复制介绍

如果在主库端启用了半同步复制,并且至少有一个半同步从库,则在主库上执行事务提交的线程将会被阻塞,会等待,直到至少一个半同步从库确认已接收到事务的所有事件,或者直到发生超时为止。

从库仅在event事件写入其中继日志并刷新到磁盘后才确认收到事务的事件。

如果在没有任何从库确认事务的情况下发生超时,主库将恢复为异步复制。当至少一个半同步从库赶上时,主库返回到半同步复制。

必须在主端和从端启用半同步复制。如果在主服务器上禁用了半同步复制,或者在主服务器上启用了半同步复制,但没有在从服务器启用,则主服务器使用异步复制。

 

3.半同步复制最适用于通过快速网络进行通信的邻近服务器,最不适用于通过慢速网络进行通信的远程服务器。

二 安装步骤

2.1 先决条件

① have_dynamic_loading值为yes

SHOW VARIABLES LIKE '%have_dynamic_loading%';

复制已经启动

不能配置多个复制通道。半同步复制仅与默认复制通道兼容。

2.2 安装配置步骤

2.2.1 检查相关插件库文件是否存在

[deployer@uac-x86-ipaaspool035 plugin]$ pwd

/usr/local/mysql/lib/plugin

[deployer@uac-x86-ipaaspool035 plugin]$ ll | grep semi

-rwxrwxr-x 1 mysql mysql   690744 Mar 25  2019 semisync_master.so

-rwxrwxr-x 1 mysql mysql   152349 Mar 25  2019 semisync_slave.so

--主插件库文件必须存在于主服务器的插件目录中。从属插件库文件必须存在于每个从属服务器的插件目录中。

2.2.2 安装插件

在主库上执行:

INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

在各从库执行:

INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

假如遇到这样的报错:

mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
ERROR 1126 (HY000): Can't open shared library
'/usr/local/mysql/lib/plugin/semisync_master.so'
(errno: 22 libimf.so: cannot open shared object file:
No such file or directory)

可以从这里 https://dev.mysql.com/downloads/os-linux.html获取 libimf

检查确认该插件是否安装成功

#这里以主库为例

mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS
       FROM INFORMATION_SCHEMA.PLUGINS
       WHERE PLUGIN_NAME LIKE '%semi%';
+----------------------+---------------+
| PLUGIN_NAME          | PLUGIN_STATUS |
+----------------------+---------------+
| rpl_semi_sync_master | ACTIVE        |
+----------------------+---------------+

  

2.2.3 开启半同步复制

安装半同步复制插件后,默认情况下会禁用该插件。必须在主端和从端同时启用插件才能启用半同步复制。如果只启用了一侧,则复制将是异步的。

2.2.3.1 主库配置

SET GLOBAL rpl_semi_sync_master_enabled = 1;

#修改配置文件:

[mysqld]
rpl_semi_sync_master_enabled=1

2.2.3.2 从库配置

SET GLOBAL rpl_semi_sync_slave_enabled = 1;

#修改配置文件:

[mysqld]
rpl_semi_sync_slave_enabled=1

#重启IO进程,以使从库连接到主库并注册为半同步从库:

STOP SLAVE IO_THREAD;

START SLAVE IO_THREAD;

2.2.4 查看状态值

#在主库查询

show status like "%semi_sync%";  

Variable_name                               Value  

------------------------------------------  --------

Rpl_semi_sync_master_clients                1      

Rpl_semi_sync_master_net_avg_wait_time      0      

Rpl_semi_sync_master_net_wait_time          0      

Rpl_semi_sync_master_net_waits              0      

Rpl_semi_sync_master_no_times               0      

Rpl_semi_sync_master_no_tx                  0      

Rpl_semi_sync_master_status                 ON     

Rpl_semi_sync_master_timefunc_failures      0      

Rpl_semi_sync_master_tx_avg_wait_time       0      

Rpl_semi_sync_master_tx_wait_time           0      

Rpl_semi_sync_master_tx_waits               0      

Rpl_semi_sync_master_wait_pos_backtraverse  0      

Rpl_semi_sync_master_wait_sessions          0      

Rpl_semi_sync_master_yes_tx                 0      

 

#在从库查询

show status like "%semi_sync%";  

Variable_name               Value  

--------------------------  --------

Rpl_semi_sync_slave_status  ON     

 

在主库上执行一个事务,再次查看

INSERT INTO dan.t(id) VALUES(37);

SHOW STATUS LIKE "%semi_sync%"; 

Variable_name                               Value  

------------------------------------------  --------

Rpl_semi_sync_master_clients                1      

Rpl_semi_sync_master_net_avg_wait_time      0      

Rpl_semi_sync_master_net_wait_time          0      

Rpl_semi_sync_master_net_waits              1      

Rpl_semi_sync_master_no_times               0      

Rpl_semi_sync_master_no_tx                  0      

Rpl_semi_sync_master_status                 ON     

Rpl_semi_sync_master_timefunc_failures      0      

Rpl_semi_sync_master_tx_avg_wait_time       422    

Rpl_semi_sync_master_tx_wait_time           422    

Rpl_semi_sync_master_tx_waits               1      

Rpl_semi_sync_master_wait_pos_backtraverse  0      

Rpl_semi_sync_master_wait_sessions          0      

Rpl_semi_sync_master_yes_tx                 1      

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值