Skip to content

第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的机器上面,即可解决数据库端的读压力瓶颈。这在很大程度上解决了目前很多中小型网站的数据库压力瓶颈问题,甚至有些大型网站也在使用类似方案解决数据库瓶颈。

17.2 Windows环境下的MySQL主从复制

17.2.1 复制前的准备工作

17.2.2 Windows环境下实现主从复制

17.2.3 Windows环境下主从复制测试

17.3 Linux环境下的MySQL复制

17.3.1 下载并安装MySQL 5.7

17.3.2 单机主从复制前的准备工作

17.3.3 MySQLd_multi实现单机主从复制

17.3.4 不同服务器之间实现主从复制

17.3.5 MySQL 主要复制启动选项

17.3.6 指定复制的数据库或者表

17.4 查看Slave的复制进度

17.5 日常管理和维护

17.5.1 了解服务器的状态

17.5.2 服务器复制出错的原因

17.6 切换主从服务器

17.7 专家解惑

17.8 经典习题