【MySQL】数据库主主备份

我们先以A服务器为起点,配置它的数据库同步到B。这就是主-从复制了。 
之后再反过来做一次,就可以互相备份了。

热备份的条件
(1) mysql的版本都要高于3.2。 
(2) 两者数据库版本相同。 
(3) 主主备份相当于在原先主从备份的基础上反过来再操作一次。

范例环境
1、操作系统: windows7
2、MySQL版本: 5.7.18
3、服务器A的IP: 192.168.68.56
4、服务器B的IP: 192.168.68.139
主主备份实现
(3.1—-3.7 同主从备份)

增加一个用户账号(backup,密码centerm)作为同步用户账号
1、A: mysql> Grant replication slave on *.* to backup@'192.168.68.139' identified by 'centerm';
2、B: mysql> Grant replication slave on *.* to backup@'192.168.68.56' identified by 'centerm';
注: (1). mysql> Grant 权限 on . to 用户账号@’允许访问的IP’ identified by ‘用户密码’;

增加一个数据库(news)作为同步数据库
1、A & B : create database news;

修改主数据库的my.ini配置
在原my.ini文件下添加

1、server-id=1
2、#设置需要记录log 可以设置log-bin=backuplog 设置日志文件的名称
3、log-bin=backuplog
4、#日志文件在mysql数据库文件夹根目录下,mysql将建立不同扩展名,文件名为backuplog的几个日志文件。
5、#指定需要日志的数据库
6、binlog-do-db=news
获取file和position字段
完成之后保存,然后重启服务器

1、net stop mysql & net start mysql
进入mysql数据库,输入命令:

1、show master status;

记一下file,position两个字段(一般file会是mysql-bin.000006)

修改从数据库的my.ini配置
在原my.ini文件下添加

1、server-id=2
2、#只同步news库
3、replicate-do-db=news
4、relay-log-index=slave-relay-bin.index
5、relay-log=slave-relay-bin

启动备份
保存之后重启数据库 
进入mysql, 
输入命令:

1、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

输入命令:

1、start slave;

输入命令:

1、show slave status;

主从备份完成
在主数据库添加表查看是否同步到备数据库

以下开始配置主主备份:

开启主服务器的binarylog
在原my.ini文件下添加

1、auto-increment-increment = 10
2、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文件下添加
1、log-slave-updates=ON

意思是,中继日志执行之后,这些变化是否需要计入自己的binarylog。当你的B服务器需要作为另外一个服务器的主服务器的时候需要打开。就是双主互相备份,或者多主循环备份。 我们这里需要,所以打开。

保存, 重启mysql。
开启从服务器备份日志
登录从服务器B的mysql(可以用super账号登录) 
执行

1、show slave status\G
 


注意图中的红框,两个都是Yes,说明开启成功。

1、Slave_IO_Running: Yes
2、Slave_SQL_Running: Yes

如果其中一个是No, 那就说明不成功。需要查看mysql的错误日志。 
错误日志一般在data目录下,查看.err后缀的文件。

开启从服务器备份日志
在原my.ini文件下添加
1、auto-increment-increment = 10
2、auto-increment-offset = 2

1、(含义参考3.8)

2. 保存, 重启mysql。

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

1、show master status\G
记住File和position的值 


开启主服务器中继
在原my.ini文件下添加

1、replicate-do-db=news
2、relay_log=slave-relay-bin
3、log-slave-updates=ON

启动主服务器同步
保存之后重启数据库 
进入mysql, 
输入命令:

1、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 
输入命令:

1、start slave;

输入命令:

1、show slave status;

查看服务状态,是否两个都是YES

重启mysql服务
1、net stop mysql
2、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 *来调整。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值