一、双机热备的概念简单说一下,就是要保持两个数据库的状态自动同步。对任何一个数据库的操作都自动应用到另外一个数据库,始终保持两个数据库中的数据一致。 这样做有如下几点好处:


1. 可以做灾备,其中一个坏了可以切换到另一个。


2. 可以做负载均衡,可以将请求分摊到其中任何一台上,提高网站吞吐量。  对于异地热备,尤其适合灾备。


二、mysql 主从备份工作原理


简单的说就是把 一个服务器上执行过的sql语句在别的服务器上也重复执行一遍, 这样只要两个数据库的初态是一样的,那么它们就能一直同步。当然这种复制和重复都是mysql自动实现的,我们只需要配置即可。




mysql备份的时候从库故障 mysql数据库备份原理_mysql


上图中有两个服务器,演示了从一个主服务器(master)把数据同步到从服务器(slave)的过程。


对于一个mysql服务器,一般有两个线程来负责复制和被复制。当开启复制这个开关之后(start slave)


1. 作为主服务器Master,会把自己的每一次改动都记录到 二进制日志 Binarylog 中。 (从服务器会负责来读取这个log,然后在自己那里再执行一遍。)


 


2. 作为从服务器Slave,会用master上的账号登陆到master上,去读取master的Binarylog,  然后写入到自己的中继日志Relaylog,然后自己的sql线程会负责读取这个中继日志,并执行一遍。到这里主服务器上的更改就同步到从服务器上了。


 


在mysql上可以查看当前服务器的主,从状态。 其实就是当前服务器的 Binary(作为主服务器角色)状态和位置。以及其RelayLog(作为从服务器)的复制进度。



mysql> show master status\G; 

 

  *************************** 1. row *************************** 

 

  File: mysql-bin-wh.000059 

 

  Position: 479 

 

  Binlog_Do_DB: db1 

 

  Binlog_Ignore_DB: 

 

  1 row in set (0.00 sec) 

 

  1. 第一行表明当前正在记录的 binarylog文件名是: mysql-bin-wh.000059. 

 

  我们可以在mysql数据目录下,找到这个文件:


mysql备份的时候从库故障 mysql数据库备份原理_服务器_02


2.  第二行, 479表示当前的文件偏移量, 就是写入在mysql-bin-wh.000059 文件的记录位置。


这两点就构成了 主服务器的状态。配置从服务器的时候,需要用到这两个值。 告诉从服务器从哪读取主服务器的数据。(从服务器登录之后,找到这个日志文件,并从这个偏移量之后开始复制。)


3. 第三行,和第四行,表示需要记录的数据库和需要忽略的数据库。 只有需要记录的数据库,其变化才会被写入到mysql-bin.000014日志文件中。



我们还可以在从服务器上,查看从服务器的复制状态。



mysql备份的时候从库故障 mysql数据库备份原理_数据库_03


1.  Master_host 指的是主服务器的地址。 


2. Master_user 指的是主服务器上用来复制的用户。从服务器会用此账号来登录主服务,从而进行复制。


3. Master_log_file 就是前面提到的, 主服务器上的日志文件名.


4. Read_Master_log_pos 就是前面提到的主服务器的日志记录位置, 从服务器根据这两个条件来选择复制的文件和位置。


Slave_IO_Running:  指的就是从服务器上负责读取主服务器的线程工作状态。 从服务器用这个专门的线程链接到主服务器上,并把日志拷贝回来。


Slave_SQL_Running: 指的就是专门执行sql的线程。 它负责把复制回来的Relaylog执行到自己的数据库中。 这两个参数必须都为Yes 才表明复制在正常工作。