参考资料
mysql 主主互备
windows mysql5.7 安装+主从复制
Mysql 数据库双机热备的配置(Windows)
我们先以A服务器为起点,配置它的数据库同步到B。这就是主-从复制了。
之后再反过来做一次,就可以互相备份了。
热备份的条件
(1) mysql的版本都要高于3.2。
(2) 两者数据库版本相同。
(3) 主主备份相当于在原先主从备份的基础上反过来再操作一次。
范例环境
操作系统: windows7
MySQL版本: 5.7.18
服务器A的IP: 192.168.68.56
服务器B的IP: 192.168.68.139
主主备份实现
(3.1—-3.7 同主从备份)
增加一个用户账号(backup,密码centerm)作为同步用户账号
A: mysql> Grant replication slave on *.* to backup@'192.168.68.139' identified by 'centerm';
B: mysql> Grant replication slave on *.* to backup@'192.168.68.56' identified by 'centerm';
注: (1). mysql> Grant 权限 on . to 用户账号@’允许访问的IP’ identified by ‘用户密码’;
增加一个数据库(news)作为同步数据库
A & B : create database news;
修改主数据库的my.ini配置
在原my.ini文件下添加
server-id=1
#设置需要记录log 可以设置log-bin=backuplog 设置日志文件的名称
log-bin=backuplog
#日志文件在mysql数据库文件夹根目录下,mysql将建立不同扩展名,文件名为backuplog的几个日志文件。
#指定需要日志的数据库
binlog-do-db=news
获取file和position字段
完成之后保存,然后重启服务器
net stop mysql & net start mysql
进入mysql数据库,输入命令:
show master status;
记一下file,position两个字段(一般file会是mysql-bin.000006)
修改从数据库的my.ini配置
在原my.ini文件下添加
server-id=2
#只同步news库
replicate-do-db=news
relay-log-index=slave-relay-bin.index
relay-log=slave-relay-bin
启动备份
保存之后重启数据库
进入mysql,
输入命令:
change master to master_host='192.168.68.56',master_user='backup',master_password='centerm',master_log_file='mysql-bin.000006',master_log_pos=1606;
mysql-bin.000006→→→之前记录的file
1606→→→之前记录的position
输入命令:
start slave;
输入命令:
show slave status;
主从备份完成
在主数据库添加表查看是否同步到备数据库
以下开始配置主主备份:
开启主服务器的binarylog
在原my.ini文件下添加
auto-increment-increment = 10
auto-increment-offset = 1
作用:用于在双主(多主循环)互相备份。 因为每台数据库服务器都可能在同一个表中插入数据,如果表有一个自动增长的主键,那么就会在多服务器上出现主键冲突。
解决这个问题的办法就是让每个数据库的自增主键不连续。上面的配置说是,我假设需要将来可能需要10台服务器做备份,所以auto-increment-increment设为10。而 auto-increment-offset=1 表示这台服务器的序号。从1开始,不超过auto-increment-increment。
这样做之后, 我在这台服务器上插入的第一个id就是1,第二行的id就是11了, 而不是2。(同理,在第二台服务器上插入的第一个id就是2, 第二行就是12, 这个后面再介绍) 这样就不会出现主键冲突了。
即:
auto-increment-increment表示可能用于做备份的服务器数量。
auto-increment-offset表示本台服务器的序号。
开启从服务器备份日志
- 在原my.ini文件下添加
log-slave-updates=ON
意思是,中继日志执行之后,这些变化是否需要计入自己的binarylog。当你的B服务器需要作为另外一个服务器的主服务器的时候需要打开。就是双主互相备份,或者多主循环备份。 我们这里需要,所以打开。
- 保存, 重启mysql。
开启从服务器备份日志
登录从服务器B的mysql(可以用super账号登录)
执行
show slave status\G
注意图中的红框,两个都是Yes,说明开启成功。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
如果其中一个是No, 那就说明不成功。需要查看mysql的错误日志。
错误日志一般在data目录下,查看.err后缀的文件。
开启从服务器备份日志
- 在原my.ini文件下添加
auto-increment-increment = 10
auto-increment-offset = 2
(含义参考3.8)
2. 保存, 重启mysql。
查看从服务器的
登录从服务器B的mysql(可以用super账号登录)
执行
show master status\G
记住File和position的值
开启主服务器中继
在原my.ini文件下添加
replicate-do-db=news
relay_log=slave-relay-bin
log-slave-updates=ON
启动主服务器同步
保存之后重启数据库
进入mysql,
输入命令:
change master to master_host='192.168.68.139',master_user='backup',master_password='centerm',master_log_file='mysql-bin.000006',master_log_pos=1606;
mysql-bin.000006→→→之前记录的file
1606→→→之前记录的position
输入命令:
start slave;
输入命令:
show slave status;
查看服务状态,是否两个都是YES
重启mysql服务
net stop mysql
net start mysql
如果3.14并不都是YES
说明slave没有成功, 即,从B到A的同步没有成功。去查看mysql错误日志,data目录下.err后缀的文件。
找到机器名.err文件,打开看看:
看图中的error信息。说找不到中继日志文件。
这是因为我们在配置A的中继文件时改了中继文件名,但是mysql没有同步。解决办法很简单。
先停掉mysql服务。 找到这三个文件,把他们删掉。 一定要先停掉mysql服务。不然还是不成功。你需要重启一下机器了。 或者手动kill mysqld。
好了, 启动mysql之后。 再来检查一下slave状态。如果都是YES,则主主备份启动成功。
一些问题
- 当发现双机备份启动有问题的时候,多看看.err日志,很快就能发现问题。
- 同步失败的时候,试一试stop slave和start slave。
- 多用show slave status/G和show master status/G命令,比较两台服务器的File和Position字段是否一致。不一致通过change master to *来调整。