目 录
一 工具介绍
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主从同步后,也可以使用此方法以防意外