【MySQL】数据库主主备份

参考资料

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后缀的文件。

开启从服务器备份日志
  1. 在原my.ini文件下添加
auto-increment-increment = 10
auto-increment-offset = 2
(含义参考3.8)

2. 保存, 重启mysql。

查看从服务器的

登录从服务器B的mysql(可以用super账号登录)
执行

show master status\G

记住File和position的值
【MySQL】数据库主主备份_第1张图片

开启主服务器中继

在原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文件,打开看看:
【MySQL】数据库主主备份_第2张图片

看图中的error信息。说找不到中继日志文件。
这是因为我们在配置A的中继文件时改了中继文件名,但是mysql没有同步。解决办法很简单。

先停掉mysql服务。 找到这三个文件,把他们删掉。 一定要先停掉mysql服务。不然还是不成功。你需要重启一下机器了。 或者手动kill mysqld。

好了, 启动mysql之后。 再来检查一下slave状态。如果都是YES,则主主备份启动成功。

一些问题
  1. 当发现双机备份启动有问题的时候,多看看.err日志,很快就能发现问题。
  2. 同步失败的时候,试一试stop slave和start slave。
  3. 多用show slave status/G和show master status/G命令,比较两台服务器的File和Position字段是否一致。不一致通过change master to *来调整。

你可能感兴趣的:(MySQL)