【DB宝64】MySQL主从之1主2从异步复制搭建及同步测试

2    3741    10

Tags:

👉 本文共约5470个字,系统预计阅读时间或需21分钟。

[toc]

一、MySQL主从复制简介

1.1、MySQL主从复制简介

MySQL主从复制(MySQL Replication)是指从一个MySQL主服务器(master)将数据拷贝到另一台或多台MySQL从服务器(slaves)的过程。将主数据库的DDL和DML操作通过二进制日志(binlog)传到从服务器(slave)上,然后在从服务器上对这些日志重新执行,从而使得主从服务器的数据保持同步。
MySQL从3.23版本开始提供复制的功能。

MySQL的Replication是一个多MySQL数据库做主从同步的方案,广泛用在各种对MySQL有更高性能、更高可靠性要求的场合。

1.2、主从复制的好处

主从复制有以下几方面的好处:

  1. 数据备份(Data Backup)
    只是简单的对数据库进行备份,降低数据丢失的风险,
  2. 线下统计
    用于报表等对数据时效性要求不高的场合。
  3. 负载均衡(Load Balance)、读写分离
    主要用在MySQL集群,解决单点故障或做故障切换;以降低单台服务器的负载和风险,如实现读写分离,可以使得服务器访问负荷比较均衡。
  4. 数据分发(Data DistributIOn)、灾备
    主要用于多数据中心或异地备份,实现数据分发与同步。
  5. 高可用和数据容错(High Availability and Failover)
    MySQL自带的健康监控和检测,根据配置的时间间隔,可以检测主库是否正常工作,一旦发现主库宕机或无法正常工作,就会选择到最好的一个备库上。

1.3、MySQL主从复制流程

1.4、主从拓扑结构

二、1主2从异步复制搭建

2.1、MySQL环境初始化

2.2、主库配置

执行过程:

2.3、从库1配置

2.4、从库2配置

2.5、主从查询

2.5.1、"show slave status"介绍

SHOW SLAVE STATUS会返回以下字段:

  • Slave_IO_State

SHOW PROCESSLIST输出的State字段的拷贝。SHOW PROCESSLIST用于从属I/O线程。如果线程正在试图连接到主服务器,正在等待来自主服务器的时间或正在连接到主服务器等,本语句会通知您

slave I/O线程的状态,有以下几种:

​ 1) waiting for master update

​ 这是connecting to master状态之前的状态

​ 2) connecting to master

​ I/O线程正尝试连接到master

​ 3) checking master version

​ 在与master建立连接后,会出现该状态。该状态出现的时间非常短暂。

​ 4) registering slave on master

​ 在与master建立连接后,会出现该状态。该状态出现的时间非常短暂。

​ 5) requesting binlog dump

​ 在与master建立连接后,会出现该状态。该状态出现的时间非常短暂。在这个状态下,I/O线程向master发送请求,请求binlog,位置从指定的binglog 名字和binglog的position位置开始。

​ 6) waiting to reconnect after a failed binlog dump request

​ 如果因为连接断开,导致binglog的请求失败,I/O线程会进入睡眠状态。然后定期尝试重连。尝试重连的时间间隔,可以使用命令"change master to master_connect_trt=X;"改变。

​ 7) reconnecting after a failed binglog dump request

​ I/O进程正在尝试连接master

​ 8) waiting for master to send event

​ 说明,已经成功连接到master,正等待二进制日志时间的到达。如果master 空闲,这个状态会持续很长时间。如果等待的时间超过了slave_net_timeout(单位是秒)的值,会出现连接超时。在这种状态下,I/O线程会人为连接失败,并开始尝试重连

​ 9) queueing master event to the relay log

​ 此时,I/O线程已经读取了一个event,并复制到了relay log 中。这样SQL 线程可以执行此event

​ 10) waiting to reconnect after a failed master event read

​ 读取时出现的错误(因为连接断开)。在尝试重连之前,I/O线程进入sleep状态,sleep的时间是master_connect_try的值(默认是60秒)

​ 11) reconnecting after a failed master event read

​ I/O线程正尝试重连master。如果连接建立,状态会变成"waiting for master to send event"

​ 12) waiting for the slave sql thread to free enough relay log space

​ 这是因为设置了relay_log_space_limit,并且relay log的大小已经整张到了最大值。I/O线程正在等待SQL线程通过删除一些relay log,来释放relay log的空间。

​ 13) waiting for slave mutex on exit

​ I/O线程停止时会出现的状态,出现的时间非常短。

  • Master_Host:

    主库的ip地址

  • Master_User

被用于连接主服务器的当前用户。这个是master上面的一个用户。用来负责主从复制的用户,创建主从复制的时候建立的(具有reolication slave权限)。

  • Master_Port

当前的主服务器端口,master服务器的端口,一般是3306。

  • Connect_Retry

--master-connect-retry选项的当前值。连接中断后,重新尝试连接的时间间隔。默认值是60秒。

  • Master_Log_File

I/O线程当前正在读取的主服务器二进制日志文件的名称。

  • Read_Master_Log_Pos

在当前的主服务器二进制日志中,I/O线程已经读取的位置。

  • Relay_Log_File

SQL线程当前正在读取和执行的中继日志文件的名称。

  • Relay_Log_Pos

在当前的中继日志中,SQL线程已读取和执行的位置。(Relay_Log_File下的Relay_Log_Pos其实一一对应着Relay_Master_Log_File的Exec_Master_Log_Pos。)

  • Relay_Master_Log_File

由SQL线程执行的包含多数近期事件的主服务器二进制日志文件的名称。当前slave SQL线程读取并执行的relay log的文件中多数近期事件,对应的主服务器二进制日志文件的名称。(说白点就是SQL线程从relay日志中读取的正在执行的sql语句,对应主库的sql语句记录在主库的哪个binlog日志中)

  • Slave_IO_Running

I/O线程是否被启动并成功地连接到主服务器上。

  • Slave_SQL_Running

SQL线程是否被启动。

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信dbaup66,谢谢!
AiDBA后续精彩内容已被站长无情隐藏,请输入验证码解锁本文!
验证码:
获取验证码: 请先关注本站微信公众号,然后回复“验证码”,获取验证码。在微信里搜索“AiDBA”或者“dbaup6”或者微信扫描右侧二维码都可以关注本站微信公众号。

标签:

Avatar photo

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

2 条回复

  1. Avatar photo analyst_zheng说道:

    啥版本呀?

发表回复