MySQL主从复制

一、MySQL主从复制介绍

二、MySQL主从复制的企业应用场景

三、MySQL主从复制原理介绍

四、MySQL主从复制具体操作方法 

 

一、MySQL主从复制介绍

主从复制是MySQL自带的一种横向扩展方案,通过“数据变更在主库执行,查询请求在从库执行”这样的形式可以在一定程度上实现读写分离。如果配置了无损复制,从库一定程度上还可以当做备份使用,甚至配置一台节点为延迟从库。有了主从复制后,还可以实现服务滚动升级(先升级从库进行测试,然后手动切换主从后升级其他从库)。主从结构通常可以分为一主一从、一主多从、级联复制等,如果是一主多从的架构需要注意从服务器的数量不能太多,否则会因为日志的传输给主库带来过多的带宽消耗(曾遇到主库网卡异常导致从库一直卡住的原因,当时一直思考的是大事务原因,结果是硬件导致)

二、MySQL主从复制的企业应用场景

应用场景1:从服务器作为主服务器的实时数据备份

应用场景2:主从服务器实时读写分离,从服务器实现负载均衡

主从服务器架构可通过程序(PHP、Java等)或代理软件(mysql-proxy、Amoeba)实现对用户(客户端)的请求读写分离,即让从服务器仅仅处理用户的select查询请求,降低用户查询响应时间及读写同时在主服务器上带来的访问压力。对于更新的数据(例如update、insert、delete语句)仍然交给主服务器处理,确保主服务器和从服务器保持实时同步。

应用场景3:把多个从服务器根据业务重要性进行拆分访问

可以把几个不同的从服务器,根据公司的业务进行拆分。例如:有为外部用户提供查询服务的从服务器,有内部DBA用来数据备份的从服务器,还有为公司内部人员提供访问的后台、脚本、日志分析及供开发人员查询使用的从服务器。这样的拆分除了减轻主服务器的压力外,还可以使数据库对外部用户浏览、内部用户业务处理及DBA人员的备份等互不影响。具体可以用下图说明:

 

三、MySQL主从复制原理介绍

MySQL的主从复制是一个异步的复制过程,数据将将从一个MySQL主节点数据库(Master)复制到另一个MySQL从节点数据库(Slave),在Master于Slave之间实现整个主从复制的过程是由三个线程参与完成的。

主节点数据库:dump Thread为每个SlaveI/O Thread启动一个dump线程,用于向其发送binary log events    
从节点数据库:I/O ThreadMaster请求二进制日志事件,并保存于中继日志中。SQL Thread从中继日志中读取日志事件,在本地完成重放……

MySQL主从复制原理过程详细描述

下面简单描述下MySQL Replication的复制原理过程。

1)在Slave服务器上执行start slave命令开启主从复制开关,主从复制开始进行。

2)此时,Slave服务器的I/O线程会通过在Master上己经授权的复制用户权限请求连接Master服务器,并请求从指定Binlog日志文件的指定位罝(日志文件名和位置就是在配罝主从复制服务时执行change master命令指定的)之后开始发送Binlog日志内容。

3)Master服务器接收到来自Slave服务器的I/O线程的请求后,其上负责复制的I/O线程会根据Slave服务器的I/O线程请求的信息分批读取指定Binlog日志文件指定位置之后的Binlog日志信息,然后返回给Slave端的I/O线程。返回的信息中除了Binlog日志内容外,还有在Master服务器端记录的新的Binlog文件名称以及在新的Binlog中的下一个 指定更新位置。

4)当Slave服务器的I/O线程获取到Master服务器上I/O线程发送的日志内容及日志文件及位置点后,会将Binlog日志内容依次写入到Slave端自身的Relay Log(即中继日志) 文件(MySQL-relay-bin.xxxxxx)的最末端,并将新的Binlog文件名和位置记录到master-info文件中,以便下一次读取Master端新Binlog日志时能够告诉Master服务器需要从新Binlog 日志的指定文件及位置开始请求新的Binlog日志内容。

5)Slave服务器端的SQL线程会实时地检测本地Relay Log中I/O线程新增加的日志内容,然后及时地把Relay Log文件中的内容解析成SQL语句,并在自身Slave服务器上按解析SQL语句的位置顺序执行应用这些SQL语句,并记录当前应用中继日志的文件名及位置点在relay-log.info中。

四、MySQL主从复制具体操作方法

主从配置需要注意的点

  • 主从服务器操作系统版本和位数一致;

  • Master 和 Slave 数据库的版本要一致;

  • Master 和 Slave 数据库中的数据要一致;

  • Master 开启二进制日志, Master 和 Slave 的 server_id 在局域网内必须唯一;

Master 上的配置 

安装数据库;

  1. 修改数据库配置文件, 指明 server_id, 开启二进制日志(log-bin);
  2. 启动数据库, 查看当前是哪个日志, position 号是多少;
  3. 登录数据库, 授权数据复制用户(IP 地址为从机 IP 地址, 如果是双向主从, 这里的还需要授权本机的 IP 地址, 此时自己的 IP 地址就是从 IP 地址);
  4. 备份数据库(记得加锁和解锁);
  5. 传送备份数据到 Slave 上;
  6. 启动数据库;
  7. 以下步骤, 为单向主从搭建成功, 想搭建双向主从需要的步骤:
  8. 登录数据库, 指定 Master 的地址、 用户、 密码等信息(此步仅双向主从时需要);
  9. 开启同步, 查看状态;

Slave 上的配置

  1. 安装数据库;
  2. 修改数据库配置文件, 指明 server_id(如果是搭建双向主从的话, 也要开启二进制
  3. 日志 log-bin);
  4. 启动数据库, 还原备份;
  5. 查看当前是哪个日志, position 号是多少(单向主从此步不需要, 双向主从需要);
  6. 指定 Master 的地址、 用户、 密码等信息;
  7. 开启同步, 查看状态。

修改Mysql配置文件(windows路径:C:\ProgramData\MySQL\MySQL Server 8.0     centos路径:/etc/my.ini)

1、主节点配置:

[mysqld]
log-bin=mysql-bin
server-id=1 

2、从节点:

[mysqld]
server-id=2

3、创建用于复制操作的用户

mysql> CREATE USER 'repl'@'192.168.8.%' IDENTIFIED WITH mysql_native_password BY 'Ron_master_1';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.8.%';
mysql> flush privileges;

4、获取主节点当前binary log文件名和位置(position)

mysql> SHOW MASTER STATUS;

 5、在从(Slave)节点上设置主节点参数

CHANGE MASTER TO
MASTER_HOST='192.168.8.83',
MASTER_USER='slave',
MASTER_PASSWORD='Canlan541',
MASTER_LOG_FILE='WIN-75CJPRTCCN1-bin.000001',
MASTER_LOG_POS=155;

6、在从节点开启主从同步

mysql> start slave;

7、查看主从同步状态

mysql> show slave status\G;

 

查看主从状态显示以上状态, 此时主从同步配置完成。

如需重新配置:

从节点清除信息要先 STOP SLAVE,
RESET SLAVE #从服务器清除master.info ,relay-log.info, relay log ,开始新的relay log RESET SLAVE ALL #清除所有从服务器上设置的主服务器同步信息,如HOST,PORT, USER和 PASSWORD等 RESET MASTER 删除所有二进制日志文件,并重新生成日志文件

  

 

posted @ 2021-07-05 16:33  人生苦短,知足常乐!  阅读(235)  评论(0编辑  收藏  举报