千家信息网

半同步与异步的MySQL主从复制如何配置

发表于:2025-01-24 作者:千家信息网编辑
千家信息网最后更新 2025年01月24日,这篇文章主要介绍了半同步与异步的MySQL主从复制如何配置,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、MySQL主从复制原理这里
千家信息网最后更新 2025年01月24日半同步与异步的MySQL主从复制如何配置

这篇文章主要介绍了半同步与异步的MySQL主从复制如何配置,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。


一、MySQL主从复制原理
这里我以MySQL5.5为例来说一下MySQL的主从复制的原理:


首先由备节点的I/O线程负责向主节点请求数据,主节点验证通过以后会由dump线程把数据发送给备用节点。备用节点的I/O线程收到资源后会把把这些数据写入到中继日志,备节点的SQL线程检测到中继日志变更后会立刻根据中继日志的内容跟新备库的内容。这样就完成了同步的过程。

二、常见的复制模型
1、一主一从模型

这种架构的优点就是比较简单,搭建和维护都比较容易,成本也比较低。对于一些负载量不是特别大、可靠性要求不是特别高的场合,完全可以采用这种模型。但是对于一些负载比较大站点,和对可用性要求比较高的场合,这种架构就不太适用了。因为如果访问量比较大,Master节点的压力会比较的,另外如果 Master崩溃,也会导致业务的终止.
2、一主多从模型

在绝大多数场景中,我们的应用都是读多写。我们使用这种架构,通过读写分离的技术,可以有效降低Master上读的压力。我们在后端的slave上可以做一些数据备份,数据挖掘等方面的工作。但是如果备库比较多,同时主库又要负责其他的请求时,主库的压力会明显增大,此时主库会成为整个系统的性能瓶颈。

当然,还有其他的复制模型,比如多级中继,和环状复制等,这些复制的基本原理都和上面的差不多,这里不再详细的解释了。
3、配置主从复制
(1)、异步复制
主从同步的条件:
Master:
a:启用二进制日志;
b:选择一个server-id
c:创建具有复制权限的用户
Slave:
a:启用中继日志
b:选择一个唯一的server-id
c:连接主服务器,并开始复制数据
A、首先在主库上建立用于复制的最小权限的用户

grant replication slave,replication client on *.* to repl@'10.12.%' identified by '123456';

B、在从库上连接主库

CHANGE MASTER TO MASTER_HOST='10.12.128.19',MASTER_PORT=3306,MASTER_USER='repl',
MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000006', MASTER_LOG_POS=451;

#查看复制的状态
mysql> show slave status\G


*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.12.128.19
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000006
Read_Master_Log_Pos: 1512
Relay_Log_File: relay_index.000002
Relay_Log_Pos: 283
Relay_Master_Log_File: mysql-bin.000006
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 1512
Relay_Log_Space: 452
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 3306
Master_UUID: 97f33396-ed12-11e4-921a-000c29e8ee06
Master_Info_File: /mydata/data5.6/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
1 row in set (0.00 sec)

C、然后再从库上执行:
启动复制
start slave;

也可以单独启动IO线程和SQL线程。
(如果从库的IO线程状态一直是connecting的状态,可能是防火墙的原因,一般来说关闭防火墙或者配置防火墙规则就可以了)
(2)、半同步复制
半同步复制是基于Google为MySQL开发的半同步复制的插件。半同步复制的原理是,一个事务在主服务器上执行完成后,必须至少确保至少在一台从服务器上执行完成后,事务才算提交成功。如果在一定时间内从服务器没有响应,则会自动降级为异步复制。
这个半同步复制是建立在异步复制的基础之上进行的。
首先需要安装Google的半同步插件:

master:
install plugin rpl_semi_sync_master soname 'semisync_master.so';


slave:

install plugin rpl_semi_sync_slave soname 'semisync_slave.so';

然后开启半同步的功能

master:

set global rpl_semi_sync_master_enabled = 1;
set global rpl_semi_sync_master_timeout = 100; //以毫秒计算

slave:

set global rpl_semi_sync_slave_enabled = ON;

在从库上还需要重启IO线程:

stop slave IO_thread;
start slave IO_thread;

分别在主库和备库上查看半同步插件运行的状态:

mysql> show global status like 'rpl%';

+--------------------------------------------+-------+
| 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 | 1 |
| Rpl_semi_sync_master_no_tx | 8 |
| 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 |
+--------------------------------------------+-------+
14 rows in set (0.04 sec)


mysql> show global status like 'rpl%';

+----------------------------+-------+
| Variable_name | Value |
+----------------------------+-------+
| Rpl_semi_sync_slave_status | ON |
+----------------------------+-------+
1 row in set (0.04 sec)

可以看到,主库和备库的半同步插件都已经处于启用状态。

感谢你能够认真阅读完这篇文章,希望小编分享的"半同步与异步的MySQL主从复制如何配置"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

同步 线程 节点 主从 数据 日志 模型 状态 中继 配置 原理 插件 服务器 篇文章 服务 压力 架构 防火墙 防火 事务 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 什么软件开发外包最大 工控组态数据库 酒店公寓里的网络安全吗 vf数据库怎么插入空值 杭州边锋网络技术有几种游戏 软件开发领域知识 蓝泰科技互联网有限公司 中国网络安全技术协会 网络安全点击劫持问卷星 sql数据库账号密码 微信云开发多个用户操作云数据库 潍坊苹果软件开发哪家靠谱 网络安全防诈骗的观后感 计算机网络技术大专毕业干啥 网络安全隔离卡的作用 长春电脑软件开发公司 上海爆量网络技术有限公司 神经网络安全的意义 网络安全工程师和黑客有什么区别 滨州考勤管理oa软件开发公司 网吧服务器下载游戏 什么软件开发外包最大 第三届网络安全挑战赛 丁香鱼网络安全知识 专用服务器网络 复制数据库文件的方法 网络安全和信息安全选哪个 大疆 软件开发流程 杭州逻讯网络技术有限公司 家里电脑当服务器可以远程访问
0