一、背景
对于一般的开发者而言,既无力使用昂贵的阿里云等云厂商提供数据库服务,但又常常苦于无法保证自己在服务器上安装的 mysql 数据库中数据的安全性或者有效备份特性,因此我们将利用 crontab 实现定时备份个人 mysql 数据库文件到个人的七牛云存储中去!PS:仅对于开发者个人网站中一些不重要的数据,而各位公司内部的数据谨慎存储到第三方云存储空间!
二、操作
-
确认 crontab 服务开启:service crond status
-
确认系统中 gzip 以及 mysqldump 命令可正常执行
-
安装七牛云命令行工具 qshell:
cd ~/app & wget http://devtools.qiniu.com/qshell-v2.3.6.zip
yum install unzip
unzip -o -d ./qshell qshell-v2.3.6.zip
cd qshell & mv qshell_linux_x64 qshell
vim ~/.bashrc 添加配置项:export PATH=$PATH:/root/app/qshell
source ~/.bashrc
-
注册七牛云账号并完成实名认证,官方注册
-
使用 qshell 配置七牛云账号:qshell account AK SK 其中的 AK 和 SK 为注册七牛云账号的 key 并在控台新建一个存储空间 backup
-
安装开启命令自动补全:yum install bash-completion -y
-
创建存放脚本以及数据库 dump 备份文件存储目录地址:mkdir ~/data/backup/sql & mkdir ~/scripts
-
编辑备份脚本文件~/scripts/baksql.sh,内容如下:
#!/bin/sh
# mysql data backup script
#
# use mysqldump --help,get more detail.
dbname=yourdatabasename
user=mysqluser
password=mysqlpassword
bakDir=~/data/backup/sql
logFile=~/data/backup/pipe-blog-bak.log
datetime=`date +%Y%m%d%H%M%S`
keepDay=7
echo "-------------------------------------------" >> $logFile
echo $(date +"%y-%m-%d %H:%M:%S") >> $logFile
echo "--------------------------" >> $logFile
cd $bakDir
bakFile=$dbname.$datetime.sql.gz
mysqldump -u$user -p$password $dbname | gzip > $bakFile
echo "数据库 [$dbname] 备份完成" >> $logFile
echo "$bakDir/$bakFile" >> $logFile
echo "开始上传备份文件至七牛云存储" >> $logFile
/root/app/qshell/qshell rput backup database/$bakFile $bakFile --overwrite | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g" >> $logFile 2>&1
echo "删除${keepDay}天前的备份文件" >> $logFile
find $bakDir -ctime +$keepDay >> $logFile
find $bakDir -ctime +$keepDay -exec rm -rf {} \;
echo " " >> $logFile
echo " " >> $logFile
-
将 baksql.sh 脚本添加到 crontab 定时器中去执行:
cd /etc/cron.d
vim baksql.cron 并添加如下内容
#每天凌晨2点执行备份脚本
0 2 * * * /root/scripts/baksql.sh
crontab baksql.cron
crontab -l #查看定时任务
- 七牛云上查看定时备份存在的文件:
- 下载之后可执行解压命令进行解压: gunzip pipe-blog.20190126020001.sql.gz
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于