阅读 22

MySQL复制

1. 复制

1.1 工作原理

复制是MySQL数据库提供的一种高可用高性能的解决方案,一般用来建立大型的应用。总体来说,工作原理分为以下3个步骤:

  • 主服务器把数据更改记录到binlog中
  • 从服务器把主服务器的binlog日志复制到自己的中继日志(relay log)中
  • 从服务重做中继日志中的日志,把更改应用到自己的数据库上

工作原理如图: image

从服务有两个线程,一个是IO线程,负责读取主服务器的binlog日志,并将其保存为中继日志;另一个是SQL线程,负责执行中继日志。

可以执行以下语句,查询服务器的状态:

show full processlist\G;
复制代码

由于MySQL的复制是异步实时的,并非完全的主从同步。可以通过以下命令得知当前的延迟:

show slave status\G;
show master status\G;
复制代码

通过show slave status命令可以观察当前复制的运行状态,一些主要变量如下所示: image

2. 快照+复制的备份架构

复制可以用来作为备份,但功能不仅限于备份,主要功能如下:

  • 数据分布
  • 读取的负载均衡
  • 数据库备份
  • 高可用性和故障转移

如果仅仅用复制来进行备份是远远不够的。假设当前应用采用了主从的复制架构,从服务器作为备份。这时,一个初级DBA执行了误操作,如DROP TABLE或DROP DATABASE,这时从服务器也跟着运行了,该如何恢复呢?

一个比较好的方法是通过对从服务器上的数据库所在分区做快照,当发生主服务器上的误操作时,只需要将从服务器上的快照进行恢复,然后再根据binlog进行恢复即可。快照+复制的架构如图所示: image

最好在从服务器上启用read-only选项。

文章分类
后端
文章标签