最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

深入解析半同步与异步的MySQL主从复制配置

来源:懂视网 责编:小采 时间:2020-11-09 20:53:00
文档

深入解析半同步与异步的MySQL主从复制配置

深入解析半同步与异步的MySQL主从复制配置:简单来讲MySQL的主从复制就是一个C/S架构的应用。master可以认为是我们通常意义上所认为的server,slave可以当作是一台client。slave上的I/O线程去请求master上数据,而master验证通过slave的信息后就允许slave接入,然后进行数据变化信息的发送。 一、
推荐度:
导读深入解析半同步与异步的MySQL主从复制配置:简单来讲MySQL的主从复制就是一个C/S架构的应用。master可以认为是我们通常意义上所认为的server,slave可以当作是一台client。slave上的I/O线程去请求master上数据,而master验证通过slave的信息后就允许slave接入,然后进行数据变化信息的发送。 一、

简单来讲MySQL的主从复制就是一个C/S架构的应用。master可以认为是我们通常意义上所认为的server,slave可以当作是一台client。slave上的I/O线程去请求master上数据,而master验证通过slave的信息后就允许slave接入,然后进行数据变化信息的发送。
一、MySQL主从复制原理
这里我以MySQL5.5为例来说一下MySQL的主从复制的原理:

20151218173011422.jpg (357×306)

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

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

20151218173031597.jpg (285×133)

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

20151218173048976.jpg (395×314)

在绝大多数场景中,我们的应用都是读多写。我们使用这种架构,通过读写分离的技术,可以有效降低Master上读的压力。我们在后端的slave上可以做一些数据备份,数据挖掘等方面的工作。但是如果备库比较多,同时主库又要负责其他的请求时,主库的压力会明显增大,此时主库会成为整个系统的性能瓶颈。
 
    当然,还有其他的复制模型,比如多级中继,和环状复制等,这些复制的基本原理都和上面的差不多,这里不再详细的解释了。
3、配置主从复制
(1)、异步复制
主从同步的条件:
Master:
       a:启用二进制日志;
       b:选择一个server-id
       c:创建具有复制权限的用户
Slave:
       a:启用中继日志
       b:选择一个唯一的server-id
       c:连接主服务器,并开始复制数据
A、首先在主库上建立用于复制的最小权限的用户

mysql> grant replication slave,replication client on *.* to repl@'10.12.%'
 -> identified by '123456';
Query OK, 0 rows affected (0.03 sec)

B、在从库上连接主库

mysql> 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、然后再从库上执行:

#启动复制
mysql> 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主从复制的原理及配置方法(比较详细)
  • linux系统下实现mysql热备份详细步骤(mysql主从复制)
  • Mysql主从复制(master-slave)实际操作案例
  • MySQL的主从复制步骤详解及常见错误解决方法
  • MySQL主从复制配置心跳功能介绍
  • 详解MySQL实现主从复制过程
  • mysql5.6 主从复制同步详细配置(图文)
  • MySQL数据库InnoDB引擎主从复制同步经验总结
  • mysql(master/slave)主从复制原理及配置图文详解
  • MySQL数据库主从复制延时超长的解决方法
  • 声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文档

    深入解析半同步与异步的MySQL主从复制配置

    深入解析半同步与异步的MySQL主从复制配置:简单来讲MySQL的主从复制就是一个C/S架构的应用。master可以认为是我们通常意义上所认为的server,slave可以当作是一台client。slave上的I/O线程去请求master上数据,而master验证通过slave的信息后就允许slave接入,然后进行数据变化信息的发送。 一、
    推荐度:
    标签: mysql 主从 mysql的
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top