数据库双机热备份

数据库双机热备份设置


前两天,因为一直不太重视数据库备份这块儿,所以都是断断续续的把表结构什么的导出当备份用,然后前两天服务器出了点问题所以选择了重装系统,点击之后想起来数据库在服务器上,结果所有的表都随风去了,现在想想还有点后怕。还好是在学校出的事,要是以后怕是要被收尸了(虽然以后人家也不会给我权限)。

但是,数据库备份是很重要的,然后呢,mysql又能够实现双机热备份,所以今天记下来,以后提醒自己数据库要备份

准备阶段

首先,既然是双机热备份,那肯定就是要准备两台服务器,一台是主mysql,我们称为A,另一台从mysql,称为B,那么B要备份A的表,来保证以后A出了问题B能秒级恢复。

A:xxx.xxx.xxx.150
B:xxx.xxx.xxx.21
准备了两台数据库,然后都装上了mariadb,然后配置好了一样的配置(也就是说你这两台服务器上都要有mysql)

配置文件

首先,我们编辑A服务器上的配置文件

$ vim /etc/my.cnf

然后在[mysqld]这个块下面写下这些话

//当前服务器id,可以随便,保证唯一就好,这里就用ip地址尾号来做了
server-id=150
//日志的目录,目录要给mysql用户权限,或者chown来给权限
log-bin=/site/mysql/logs
//要备份的数据库
binlog-do-db=数据库名
//如果有多个数据库要备份,可以一起写下来,但是不可以用逗号分隔的方式来写,如下
binlog-do-db=数据库1
binlog-do-db=数据库2
binlog-do-db=数据库3

然后A上面就配置完成啦,重启mysql

$ systemctl restart mariadb

第二步,配置服务器B
同样的,编辑配置文件

$ vim /etc/my.cnf

然后在[mysqld]下面写下这段话

server-id=21
replicate-do-db=数据库名
replicate-do-db=数据库1
replicate-do-db=数据库2
replicate-do-db=数据库3

和上面要保持一致,但是用的是replicate-do-db来写
然后一样的重启mysql

$ systemctl restart mariadb

配置用户权限

那么我们需要一个用户从B服务器向A服务器取数据,那么就需要一个用户
在A服务器上登录mysql,然后输入:

> GRANT REPLICATION SLAVE ON *.* TO '备份用户'@'B服务器地址' IDENTIFIED BY '用户密码';

赋予 replicateion slave权限,这个用户名和密码记录好

查看master status

然后别退出A服务器mysql,直接输入

> show master status

就能看到这样一个表格

File Position Binlog_Do_DB Binlog_Ignore_DB
logs.000001 123 数据库名

这里就记下两个数据,file:logs.000001,第二个数据position:123,是用来备份确定

配置B服务器备份

切换到B服务器,进入mysql
输入

> change master to master_host='A服务器地址',master_user='备份用户',master_password='用户密码',master_log_file='logs.000001',master_log_pos=123;

其中master_user是我们在配置用户权限的时候设置的用户名,然后master_password是我们设置的identified by的用户密码,然后后面两个值则是查看master status的两个数据

查看结果

输入

> start slave;
> show slave status\G

然后看到这两个都为YES

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

如果不是,那么可以查看错误输出

Last_Error:
Last_SQL_Error:
Last_IO_Error:

这些里面都会提示出现的问题

完成热备份配置

这样就完成了我们的热备份的配置,但是要注意的是,目前现有的数据是不会备份过去的,只有修改后的数据才会备份,那么如果你对一个B服务器中没有的数据进行了修改,那么是无效的,因此还需要手动把现有表结构和数据导入过去后才可以正常使用。以后的所有sql操作或者创建表都能正常备份了

你可能感兴趣的:(mysql)