暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

数据库跨域异地容灾解决方案

IT男也玩文艺 2020-02-28
354

  

工具介绍

1.1 工具特点

 备份原理

 架构

工具安装及从库数据库参数修改

4.1  安装依赖及工具

4.2  数据库参数修改

4.3 主库上设置rsync服务

4.4  在客户端设置

 备份脚本

5.1  全量备份

5.2.1

5.2.2

5.2.3

日志

测试

总结

 


数据库异地全量增量备份解决方案

工具介绍

本次采用的备份工具是xtrabackup  +  rsync

1.1 工具特点

Xtrabackup 是一款专业用于备份以mysam为数据引擎的开源软件,其中子工具为innobackupex 是专为innodb数据引擎而设计的,由于缅甸项目的性质,此次备份使用的innobackupex工具进行数据库异地备份

其特点如下

InnoDB引擎的表做热备

增量备份

流压缩传输到另外的服务器上

在线移动表

更简单的创建从库

备份时不增加服务器负载

Rsync  可以进行多线程备份,提高传递速度

 备份原理

innobackupex原理大致如下

备份及恢复大致涉及三个步骤:备份 -> prepare -> 恢复备份运行时,工具会记住当时的LSN号,并打开xtrabackup_logfile,然后开始对datafile进行copy,即ibdata1及ibd文件。

复制需要一定的时间,在复制期间,如果文件被修改,工具将监视redo log file并将每一次更变记录下来,保存在xtrabackup_logfile中。

接下来处理非事务表如MyISAM的备份操作,innobackupex通过FLUSH TABLES WITH READ LOCK来阻塞DML。

并在此时获取binlog的position[和GTID](此处我理解为和mysqldump --single-transaction处理方式类似)

在做完非事务表的copy之后,执行UNLOCK TABLES,完成备份,并停止记录xtrabackup_logfile。

接下来就是需要做prepare的过程,该过程类似InnoDB的crash-recovery。

redo log进行前滚(到数据文件),并将没提交的事务进行回滚操作(rollback),这样便可以保证数据的一致性,所以对于事务表,整个过程是不会影响写操作的。

Rsync 是利用多线程,快速的将文件传递到内网服务器中,内网 效果比较好

 架构

 

 

工具安装及从库数据库参数修改

4.1  安装依赖及工具

yum install cmake gcc gcc-c++ libaio libaio-devel automake autoconf bzr bison libtool ncurses-devel zlib-devel  -y

使用已经下载好的percona-xtrabackup-2 4-2.4.18-1.el7.x86_64.rpm rpm包使用yum 进行安装

yum install percona-xtrabackup-24-2.4.18-1.el7.x86_64.rpm  -y

4.2  数据库参数修改

lower_case_table_names=0

init_connect='SET autocommit=1'

在数据库上创建远程备份文件夹,用来将远程拷贝过来的数据文件进行保存

su  mysql

cd  /home/mysql/mysql

mkdir remot_back

之后重启从库使数据库参数生效

cd home/mysql/mysql/bin

systemctl  restart mysql

4.3 主库上设置rsync服务

利用 利用yum安装 rsync服务

yum install rsyncd-y

修改配置文件

Vi  /etc/rsyncd.conf

添加如下内容

创建秘钥文件

vi  /etc/rsyncd.password  

Test:123456--------------可以更改 ,在服务端相应更改即可

设置文件权限

chmod600  /etc/rsyncd.password

启动服务

systemctl restart rsyncd

查看端口

netstat-tunlp  | grep  837

存在则启动服务

4.4  在客户端设置

yum install rsyncd-y

设置秘钥

vi  /etc/rsyncd.password  -----------------和server端对应

123456

设置文件权限

chmod600  /etc/rsyncd.password

 备份脚本

脚本设置之前配置两台机器的ssh  无密访问

ssh-keygen

ssh-copy-id  root@192.168.1.180

5.1  全量备份

服务端:

客户端:

5.2

5.2.1增量备份

5.2.2

客户端去主库取数据(只备份,不恢复)

5.2.3

客户端去主库取数据(备份,并且恢复库,与主库有一小时数据时差)

日志

去主库和备份库上创建日志文件(主备的日志名一样)

touch  increaseback.log reback.log

测试

我测试的数据库,数据量是3G左右,为unlink库备份数据库文件

我的虚拟机配置  2G 内存  40G 硬盘  2核cpu 两台

在增量与全量的测试中测试了以下场景

1 在备份过程中插入数据

模拟了80000条数据插入

数据备份过程中会有卡顿,大约4分钟左右

结果:成功

2 在备份过程中插入数据的同时删除 数据

模拟了80000条数据插入

并删除40000条

数据备份过程中会有卡顿  大约5分半左右

结果:成功

总结

1 在AAA数据库中查看文件大概31G,在利用rsync传输开始使用 tar cJvf  打包将3G的数据文件压缩到最低小压缩格式.xz格式为194M,虽然文件变小,但是压缩时利用cpu及内存过大。不建议使用,并且内网测试rsync的内网传输是比较好的,所以使用原有文件夹的格式进行同步

2 将msyql主从同步后,也可以使用此方法以防意外


文章转载自IT男也玩文艺,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论