mysql差异备份拿shell_Shell脚本实现跨云数据库自动备份

点击了解更多技术资料和免费学习视频,请加入讨论群: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/* 是本地备份目录,星号代表这个目录下的所有文件都同步

提前要做好ssh免密登录,可参考专栏里的这篇文章

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点

后面三位数字是哪月哪天星期几这里不用关心,用星号表示全部就可以了

这样就完成了跨云数据库的自动备份

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值