点击了解更多技术资料和免费学习视频,请加入讨论群:662736393
欢迎关注百哥IT技术专栏,联系QQ:3473067134
一、为什么要跨云进行数据库备份
虽然各个云服务商为企业建设IT系统提供了极大便利,也实现了很高的可靠性,但仍然不是万无一失的,这些例子都曾造成很大的影响
不久前,微盟工程师恶意删库,导致大量客户数据丢失,该事件几乎在所有IT从业者朋友圈刷屏。
18年8月,腾讯云服务器一个硬盘固件bug,导致部分客户的数据丢失,这里可是三备份全部丢失。
18年6月,阿里云一个运维失误,导致控制台及部分云产品功能出现问题。
17年3月,微软azure公有云存储宕机超过8小时,影响到美国东部大量用户。
17年12月,亚马逊aws运维工程师失误,导致严重的存储事故。
连这些超级大佬都会出现失误,所以跨云备份对重要数据来说,做个双保险是很有必要的。
二、实验环境简介
源站:在腾讯云部署电商网站opencart,后台数据库平台为mysql 5.7,网站对应的数据库名也是opencart,这里要将该数据库备份到华为云
备份服务器:在华为云部署centos 8系统,作为源站的备份服务器
三、实现步骤及原理
1、数据库备份工具
Mysqldump是常用的数据备份工具,用法为
mysqldump –u数据库用户名 –p数据库密码 数据库名称 > 备份输出文件名
[root@tencent ~]# mysqldump -uroot -pMvFhmiRf2J opencart > backup.sql
[root@tencent ~]# ls -lh
total 496K
-rw-r--r-- 1 root root 491K Apr 21 22:26 backup.sql
-rw-r--r-- 1 root root 1.8K Apr 2 12:03 install.sh
2、自动以日期来进行命名
Date命令,可以用来给文件名用日期自动命名。因为我们要周期性进行数据库备份,所以备份的文件名要写上日期。
这里以touch新建一个文件为例,看怎么用日期自动命名
[root@tencent ~]# touch test-$(date "+%Y%m%d")
这里的test-是固定的,$后面是日期,%Y%m%d是日期的格式,可以按各种我们想要的格式来显示,百度一下date命令就会很清楚。
[root@tencent ~]# touch test-$(date "+%Y%m%d" -d "yesterday")
而这里加了-d yesterday,意思是以昨天的日期来命名。为什么要这样用呢,因为数据备份为了不影响性能,经常放在凌晨,那么其实备份的数据是前一天产生的。
[root@tencent ~]# ls -l test*
-rw-r--r-- 1 root root 0 Apr 21 22:32 test-20200420
-rw-r--r-- 1 root root 0 Apr 21 22:31 test-20200421
这里是最后自动命名的两个文件
所以,我们在用mysqldump备份的时候,备份文件名加上date就可以自动用日期来命名了。
3、压缩工具
Tar是Linux上对文件进行打包和压缩的工具,可以用tar对文件进行压缩,节省磁盘空间。这个用法比较简单。
Tar –zcf 压缩包名 压缩的文件或目录 即可
使用举例,把/etc/目录进行打包压缩,并用当前日期命名
[root@tencent ~]# tar -zcf etc-$(date "+%Y%m%d").tar.gz /etc
[root@tencent ~]# ls -lh etc*
-rw-r--r-- 1 root root 11M Apr 21 22:57 etc-20200421.tar.gz
4、文件同步工具rsync
刚才我们已经实现本地备份并压缩了,现在需要将备份好的文件,跨云备份到华为云里,就要用到rsync工具了,这个工具可以自动进行差异化备份,也就是说当本地备份目录里的数据有变化时,自动同步到远程目录。
另外一个文件传输工具是scp,scp是全量备份,会把本地目录里的所有文件,传到目标服务器。
而rsync,则只把有变化的,新产生的文件传到目标服务器。
用法
[root@tencent backup]# rsync /root/backup/* root@139.159.159.206:/opencart-backup/
说明:
/root/backup/* 是本地备份目录,星号代表这个目录下的所有文件都同步
root@139.159.159.206:/opencart-backup/ 远程主机的用户名,ip以及目录
提前要做好ssh免密登录,可参考专栏里的这篇文章
https://zhuanlan.zhihu.com/p/116025492
5、清理旧文件的工具
Find用来查找文件,可以找出老文件,比如30天之前的
Xargs用来把find查到的文件输出给另一个命令
Rm 删除命令
用这3个命令的组合,可以自动删除老文件,释放空间。
使用举例
先创建一个文件,并把文件的修改时间设置成1999年
[root@tencent backup]# touch old.txt
[root@tencent backup]# touch -c -t 199901010101 old.txt
这里的-c –t是用来修改文件时间的,相当于这个文件是1999年创建的
然后用find来搜索老文件
[root@tencent backup]# find /root/backup/ -mtime +30
/root/backup/old.txt
说明:在/root/backup/目录下查找所有30天以前的文件
[root@tencent backup]# find /root/backup/ -mtime +30 | xargs rm –rf
说明:把查找出来的文件,交给rm –rf处理,也就是删除
6、最终脚本
#!/bin/bash
# FileName: dbbackup.sh
# Version: 1.0
# Date: 2020-04-21
# Author: baige
# Description: the script for backup mysql of opencart
mysqldump -uroot -pMvFhmiRf2J opencart > /dbbackup/opencart-$(date "+%Y%m%d" -d "yesterday").sql
tar -czf /dbbackup/opencart-$(date "+%Y%m%d" -d "yesterday").tar.gz /dbbackup/opencart-$(date "+%Y%m%d" -d "yesterday").sql --remove-files
rsync /dbbackup/* root@139.159.159.206:/opencart-backup/
find /dbbackup/ -mtime +30 | xargs rm -rf
echo "well done!"
执行后在源站服务器(腾讯云),和备份服务器(华为云)上查看文件,已经成功备份
[root@tencent dbbackup]# ls
opencart-20200420.tar.gz
[root@tencent dbbackup]#
[root@huawei dbbackup]# ls
opencart-20200420.sql
[root@huawei dbbackup]#
7、计划任务
通过Linux的计划任务,实现每天凌晨1点自动进行数据库的备份工作。这里计划任务用到crontab工具
[root@tencent dbbackup]# crontab -e
0 1 * * * /root/dbbackup.sh
这里的意思是,每天的1点0分执行后续的脚本
第一位数字代表分 0
第二位数字代表小时 1点
后面三位数字是哪月哪天星期几这里不用关心,用星号表示全部就可以了
这样就完成了跨云数据库的自动备份