Appearance
第17章 MySQL Replication
学习目标|Objective
MySQL Replication是MySQL的一个非常重要的功能,主要用于主服务器和从服务期之间的数据复制操作
。本章主要学习MySQL Replication的基本概念、Windows 环境下的复制操作、Linux 环境下的复制操作、如何査看 Slave 的复制进度、日常管理和维护、切换主从服务器的方法等等。
内容导航|Navigation
- 了解什么是MySQL Replication
- 掌握 Windows 环境下的复制操作
- 掌握 Linux环境下 MySQL的复制操作
- 掌握Slave的复制进度
- 掌握日常管理和维护
- 掌握切换主从服务器的方法
17.1 MySQL Replication概述
MySQL从 3.25.15 版本开始提供数据库复制(replication)功能。MySQL 复制是指从一个MySQL主服务器(master)将数据复制到另一台或多台MySQL从服务器(slaves)的过程,将主数据库的 DDL和DML操作通过二进制日志传到复制服务器上,然后在从服务器上对这些日志重新执行,从而使得主从服务器的数据保持同步。
在MySQL中,复制操作是异步进行的,slaves服务器不需要持续地保持连接接收master服务器的数据。
MySQL支持一台主服务器同时向多台从服务器进行复制操作,从服务器同时可以作为其他从服务器的主服务器,如果MySQL主服务器访问量比较大,可以通过复制数据,然后在从服务器上进行查询操作,从而降低主服务器的访问压力,同时从服务器作为主服务器的备份,可以避免主服务器因为故障数据丢失的问题。
MySQL 数据库复制操作大致可以分成三个步骤:
- 主服务器将数据的改变记录到二进制日志(binary log)中。
- 从服务器将主服务器的 binary log events复制到它的中继日志(relay log)中。
- 从服务器重做中继日志中的事件,将数据的改变与从服务器保持同步。
首先,主服务器会记录二进制日志,每个事务更新数据完成之前,主服务器将这些操作的信息记录在二进制日志里面,在事件写入二进制日志完成后,主服务器通知存储引擎提交事务。
slave 上面的 I/O 进程连接上 Master,并发出日志请求,Master接收到来自 Slave的 IO 进程的请求后,通过负责复制的IO进程根据请求信息读取与制定日志指定位置之后的日志信息,返回给 Slave 的 IO进程。返回信息中除了日志所包含的信息之外,还包括本次返回的信息已经到 Master 端的 bin-log 文件的名称以及 bin-log 的位置。
Slave 的 I/O 进程接收到信息后,将接收到的日志内容依次添加到 Slave 端的 relay-log 文件的最末端,并将读取到 Master 端的 bin-log的文件名和位置记录到 master-info 文件中。
Slave 的 SQL 进程检测到relay-log 中新增加了内容后,会马上解析relay-log 的内容成为在 Master 端真实执行时候的那些可执行的内容,并在自身执行。
MySQL复制环境90%以上都是一个Master带一个或者多个 Slave的架构模式。如果 master 和 slave 的压力不是太大的话,异步复制的延时一般都很少。尤其是 slave 端的复制方式改成两个进程处理之后,更是减小了slave 端的延时。
提示
对于数据实时性要求不是特别严格的应用,只需要通过廉价的电脑服务器来扩展slave的数量,将读压力分散到多台slave的机器上面,即可解决数据库端的读压力瓶颈。这在很大程度上解决了目前很多中小型网站的数据库压力瓶颈问题,甚至有些大型网站也在使用类似方案解决数据库瓶颈。