所谓的双机热备(双活)就是保证两个数据库的状态同步。其中一个数据库的操作会自动同步到另外一个数据库中去,保证两个数据库的数据一致。
服务器一
ip:10.10.1.2
系统:Centos7
MySQL版本:5.7.x
服务器二
ip:10.10.1.3
系统:Centos7
MySQL版本:5.7.x
如果还没有安装MySQL请查看Mysql安装教程
服务器一
vim /etc/my.cnf
#在[mysqld]位置下添加下面配置
server-id = 1 #主标服务标识号,必需唯一
log-bin=/var/log/mysql/mysql-bin.log #因为MYSQL是基于二进制的日志来做同步的,每个日志文件大小为 1G
服务器二
vim /etc/my.cnf
#在[mysqld]位置下添加下面配置
server-id = 2 #主标服务标识号,必需唯一
log-bin=/var/log/mysql/mysql-bin.log #因为MYSQL是基于二进制的日志来做同步的,每个日志文件大小为 1G
通用配置
binlog-do-db = test #要同步的库名
binlog-ignore-db=mysql #不记录日志的库,即不需要同步的库
log-slave-updates #用从属服务器上的日志功能
sync_binlog=1 #经过1日志写操作就把日志文件写入硬盘一次(对日志信息进行一次同步)。n=1是最安全的做法,但效率最低。默认设置是n=0。
auto_increment_offset=1 #设置步长,这里设置为1,这样Master的auto_increment字段产生的数值是:1, 3, 5, 7, …等奇数ID
auto_increment_increment=2 #有多少台服务器,n就设置为多少
replicate-do-db = test #进行镜像处理的数据库
replicate-ignore-db= mysql #不进行镜像处理的数据库
配置完成后重启MySQL如果没有报错就表示配置正确
systemctl restart mysqld
服务器一
# 登陆MySQL进入MySQL的交互式命令行
# @前面是用户名可以任意定义@后面的IP设置成主服务器IP或者'%'
mysql> grant replication slave on *.* to 'replicate'@'10.10.1.3' identified by '123456';
服务器二
# 登陆MySQL进入MySQL的交互式命令行
# @前面是用户名可以任意定义@后面的IP设置成主服务器IP或者'%'
mysql> grant replication slave on *.* to 'replicate'@'10.10.1.2' identified by '123456';
服务器一
mysql> show master status;
#显示下面信息就表示my.cnf配置正常
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 154 | | | |
+------------------+----------+--------------+------------------+-------------------+
服务器二
mysql> show master status;
#显示下面信息就表示my.cnf配置正常
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 188 | | | |
+------------------+----------+--------------+------------------+-------------------+
两台服务器binlog配置信息不一定一致这个没有关系只要记录下来就好了后面需要用到
服务器一
mysql> change master to master_host="10.10.1.3", master_port=3306, master_user="replicate", master_password="123456", master_log_file="mysql-bin.000001", master_log_pos=188;
服务器二
mysql> change master to master_host="10.10.1.2", master_port=3306, master_user="replicate", master_password="123456", master_log_file="mysql-bin.000001", master_log_pos=154;
参数解释
master_host #主机IP地址
master_port #MySQL端口
master_user #创建用来同步的账号名
master_password #创建用来同步的账号密码
master_log_file #show master status查询到的File值
master_log_pos #show master status查询到的Position 值
服务器一,二
mysql> start slave;
# 若显示OK就表示命令执行正常
# 检查同步状态
mysql> show slave status \G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
# 均返回Yes则表示状态正常