我的需求
手里维护了一些小网站,网站跑在一台最低配的轻量应用服务器上,数据库是自建的MySQL。网站虽小,但是备份数据,也是个刚需。主要是MySQL的数据库备份以及一些本地文件的备份。一直想找一个现成的简单、轻量的解决方案,能够把指定目录或者文件定时自动上传到COS里面备份,但却一直没有找到,所以就只好自己动手了。
思路介绍
整体思路很简单,写一个shell脚本,利用crontab定时运行,功能就两个:1、打包指定的目录,上传到COS;2、导出MySQL数据,上传到COS。另外在COS里面设置过期规则,比如30天后删除旧得备份。
具体操作
下面,简单记录相关步骤:
注意:这里的操作步骤只是一个参考,具体备份的文件夹路径、备份的数据库等内容可根据实际情况调整。
1、安装coscli:
代码语言:shell复制wget https://github.com/tencentyun/coscli/releases/download/v0.10.2-beta/coscli-linux
mv coscli-linux /usr/bin/coscli
chmod 755 /usr/bin/coscli
这里如果无法下载,或者下载缓慢,你懂的。
2、 准备一个存储桶,准备一个子账号,分配权限,记录子账号的SecretId和SecretKey,运行coscli
,首次运行coscli,根据提示填写相关信息,其中的session token不填。
3、新建一个脚本backup.sh
,这里假设我们备份的目录为/etc/my.cnf.d/
要备份的数据库名为mysql
#!/bin/bash
cd /root/
tar -czvf my.cnf.d.tar.gz /etc/my.cnf.d/
mysqldump mysql > mysql.sql
tar -czf mysql.sql.tar.gz mysql.sql
coscli cp my.cnf.d.tar.gz cos://backupcos/back/`date ' %Y%m%d'`/my.cnf.d.tar.gz
coscli cp mysql.sql.tar.gz cos://backupcos/back/`date ' %Y%m%d'`/mysql.sql.tar.gz
rm -f my.cnf.d.tar.gz mysql.sql.tar.gz mysql.sql
4、chmod a x backup.sh
给脚本添加运行权限,运行crontab -e
设置备份脚本每天运行一次:
0 0 * * * /root/backup.sh > /dev/null 2>$1 &
5、 最后在存储桶中,设置“基础配置/生命周期”中,设置备份过期时间。(这里设置,30天后,前缀为back的文件将会自动删除)