前面一小节,介绍了简单的一主多从。这里以双主从介绍下主从热备,如果仅仅是一主多从的方式,后面如果 master 宕机了,那么所有的与写操作的相关业务将不能继续服务了。

        双主热备解决的问题:

  1. master 挂掉不会影响业务;
  2. 实现心跳检测。

        主从热备原理:

  1. 其中一台 slave 升级为 master,同时让 master 成为这台 slave 的从。

        服务器设备环境与上一小节是一样的,简单说明一下:

192.168.0.101 // (101) master
192.168.0.105 // (105) slave (将来用作备份的 master)
192.168.0.103 // (103) 作为 101 的从
192.168.0.104 // (104) 作为 105 的从

首先,先看一下,目前的主从状态:


目前,105 是 101 的从机。

    将 105 新增为 101 的主机

修改 105 的 my.cnf 文件:其中,log-bin=mysql-bin 是开启 binlog 二进制文件。log_slave_updates = 1 该选项是主主双热备的关键参数,其作用:默认情况下,从服务器将从主机同步过来的操作记录同步到中继log(relay_log)中,而不写入到二进制文件中。开启此选项,将从主机同步过来的记录一并写入到从机的二进制文件(binlog)中。如果,将来主机宕机了,作为备份的从机可以升级为主机,binlog 和原先的主机的 binlog 是一样的。

    从机 105 给主机 101 授权
mysql> grant replication slave on *.* to master@192.168.0.101 identified by '123456';
mysql> flush privileges;

从机上,给主机 101 分配一个账号:master ,可以在 101 这台服务器上,使用密码:123456 来复制从机的操作记录。

    重启mysql
#> systemctl restart mysql;
or
#> lnmp mysql restart;
    查看从机 105 的master 状态

记住 File mysql-bin.000002 和 Position 120 这两个选项的值。

    配置 master ,开启 slave 服务

重启一下,master 机器。

    master 监听 slave
// 101 ( master )
mysql> change master to 
> master_host = '192.168.0.105',
> master_port = 3306,
> master_user = 'master',
> master_password = '123456',
> master_log_file = 'mysql-bin.000002',
> master_log_pos = 120;

此时,先停止slave, stop slave;在开启slave,start slave。可以查看 slave 的状态:

此时,101 和 105 就互为主从了。

    测试

目前,这两台数据库的数据是一致的。我们先删除 101 的一条数据,查看 105 的数据有没有随之发生变化。

数据两边保持一致。然后,将 103 和 104 分别作为 101 和 105 的从服务器,具体的可以看上一小节。如果,其中有一台主机突然宕机了,该怎么让对应的备份主机作为主机?如何实现心跳检测?相对应的从机又该如何去寻找其它的主机呢?下一小节,将介绍 MySQL 的一款中间节产品 MyCat,MyCat 将很好的为我们解决了以上的问题,当然还有其他更多的功能。

由于能力有限,不足或有不解之处,希望在下方评论区与我讨论,共同提高 。