说明
开发和测试数据由于种种原因,可能存在误删可能性,现在需要定期备份数据到阿里云的OSS。
因为数据本身数据量就很少,可以使用,如果数据库已经大于100M了,不建议使用这个方法(除非是内网)
下载和安装工具
下载
wget http://gosspublic.alicdn.com/ossutil/1.7.1/ossutil64
chmod 755 ossutil64
配置
./ossutil64 config
根据提示完成配置,设置Endpoint、AccessKey等参数。
上传文件 cp
我们主要使用这个工具完成上传文件的需求。
示例:./ossutil cp examplefile.txt oss://mysqlbup/20200218/
删除文件
我们需要删除超过7天的文件信息
示例:./ossutil rm oss://mysqlbup/20200218/ -r
python脚本
使用python完成定时脚本的编辑
import logging
import os
import time
logging.basicConfig(level=logging.NOTSET)
class MySqlBp:
def __init__(self):
self.temp_dir = '~/backup/'
self.bucket_name = 'mysqlbup'
self.db_name = ['horizon_dev', 'horizon_prod', 'villa_dev']
def update_bak_file(self):
# 获取当前日期
date = time.strftime("%Y-%m-%d", time.localtime())
logging.info('>>> 当前日期:' + date)
logging.info('>>> 开始备份备份数据库')
os.chdir('/root')
os.system('mkdir ~/backup/' + date)
# mysqldump -uroot -proot@12345 horizon_dev > ~/backup/2020-02-19/horizon_dev_xxxxxx.sql
for db in self.db_name:
backup_file_name = db + '_' + str(time.time()) + '.sql'
logging.info('>>> table=' + backup_file_name)
os.system('mysqldump -uroot -proot@12345 ' + db + ' > ' + self.temp_dir + date + '/' + backup_file_name)
logging.info('>>> 上传备份到oss')
# ./ossutil64 cp ~/backup/2020-02-19/horizon_dev_xxxxxx.sql -r oss://mysqlbup/2020-02-19/horizon_dev_xxxxxx.sql
os.system('./ossutil64 cp ' + self.temp_dir + date + ' -r oss://' + self.bucket_name + '/' + date)
# 删除临时文件夹
os.system('rm -rf ' + self.temp_dir + date)
# 删除超过7天的备份文件
if __name__ == '__main__':
MySqlBp().update_bak_file()
定时执行
crontab -l
crontab -e
# 每天22点备份一次
0 22 * * * /usr/share/anaconda3/bin/python3 /opt/horizon/back_up_db_oss.py