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

mysql主主双机互备(一)_mysql

上图中有两个服务器, 演示了从一个主服务器(master) 把数据同步到从服务器(slave)的过程。
    这是一个主-从复制的例子。 主-主互相复制只是把上面的例子反过来再做一遍。 所以我们以这个例子介绍原理。
 
    对于一个mysql服务器, 一般有两个线程来负责复制和被复制。当开启复制之后。
 
    1. 作为主服务器Master,  会把自己的每一次改动都记录到 二进制日志 Binarylog 中。 (从服务器会负责来读取这个log, 然后在自己那里再执行一遍。)
 
    2. 作为从服务器Slave, 会用master上的账号登陆到 master上, 读取master的Binarylog,   写入到自己的中继日志 Relaylog, 然后自己的sql线程会负责读取这个中继日志,并执行一遍。   到这里主服务器上的更改就同步到从服务器上了。
 
    在mysql上可以查看当前服务器的主,从状态。 其实就是当前服务器的 Binary(作为主服务器角色)状态和位置。 以及其RelayLog(作为从服务器)的复制进度。
 
    例如我们在主服务器上查看主状态:

    mysql> show master status\G

mysql主主双机互备(一)_mysql_02

稍微解释一下这几行的意思:
    1. 第一行表明 当前正在记录的 binarylog文件名是: mysql-bin.000014.
    我们可以在mysql数据目录下,找到这个文件:mysql主主双机互备(一)_mysql_03

2.  第二行, 107. 表示当前的文件偏移量, 就是写入在mysql-bin.000014 文件的记录位置。
这两点就构成了 主服务器的状态。  配置从服务器的时候,需要用到这两个值。 告诉从服务器从哪读取主服务器的数据。 (从服务器会登录之后,找到这个日志文件,并从这个偏移量之后开始复制。)
 
    3. 第三行,和第四行,表示需要记录的数据库和需要忽略的数据库。 只有需要记录的数据库,其变化才会被写入到mysql-bin.000014日志文件中。  后面会再次介绍这两个参数。
 
    我们还可以在从服务器上,查看从服务器的复制状态。

mysql> show slave status\G

mysql主主双机互备(一)_mysql_04

我们还是来重点解释途中的红圈的部分:
    

1.Master_host 指的是 主服务器的地址。 
    2. Master_user 指的是主服务器上用来复制的用户。  从服务器会用此账号来登录主服务。进行复制。
    3. Master_log_file 就是前面提到的, 主服务器上的日志文件名.
    4. Read_Master_log_pos 就是前面提到的主服务器的日志记录位置, 从服务器根据这两个条件来选择复制的文件和位置。
    5. Slave_IO_Running:  指的就是从服务器上负责读取主服务器的线程工作状态。 从服务器用这个专门的线程链接到主服务器上,并把日志拷贝回来。
    6. Slave_SQL_Running: 指的就是专门执行sql的线程。 它负责把复制回来的Relaylog执行到自己的数据库中。 这两个参数必须都为Yes 才表明复制在正常工作。