由于自建非云数据库是没用自动备份功能,所以我们需要自行备份。如果备份数据大,而且每天都需要备份的话,采用手动操作存储的方式十分繁琐,而且服务器存储空间容易不足。现采用价格低廉的阿里云OSS对象存储当做存放地点,并通过python脚本实现每天的备份,达到自动化运维的效果。
1.oss挂载到ecs服务器
(1)创建oss,定义bucket名称,创建好后RAM设置授权读写权限,RAM有access-key-id。
(2)在服务器上安装ossfs
a.linux 7版本 安装:
wget http://gosspublic.alicdn.com/ossfs/ossfs_1.80.6_centos7.0_x86_64.rpm
yum localinstall your_ossfs_package
b.配置账号信息:
将Bucket名称以及具有此Bucket访问权限的AccessKeyId/AccessKeySecret信息存放在/etc/passwd-ossfs文件中。注意这个文件的权限必须正确设置,建议设为640。
echo my-bucket:my-access-key-id:my-access-key-secret > /etc/passwd-ossfs chmod 640 /etc/passwd-ossfs
c.将Bucket挂载到指定目录
ossfs my-bucket my-mount-point -ourl=my-oss-endpoint
挂载示例:将杭州地域名称为bucket-test
的Bucket挂载到/tmp/ossfs
目录下。
echo bucket-test:LTAIbZcdVCmQ****:MOk8x0y9hxQ31coh7A5e2MZEUz**** > /etc/passwd-ossfs
chmod 640 /etc/passwd-ossfs
mkdir /ossfs
ossfs bucket-test /ossfs -ourl=http://oss-cn-hangzhou.aliyuncs.com
d.查看,成功挂载后可以df -h 查看到。
2.python编写脚本备份
备份到oss挂载的目录即相当于备份到oss上。
#!/usr/bin env python3 #coding=utf-8 import os import time import datetime #定义服务器,用户名、密码、数据库名称(多个库分行放置)和备份的路径 DB_HOST = '47.xx.xx.xx' DB_USER = 'root' DB_USER_PASSWD = 'xxxxxxxxx' DB_NAME = '/ossfs/ningmeng/dbnames.txt' BACKUP_PATH = '/ossfs/ningmeng/' DATETIME = time.strftime('%Y%m%d-%H%M%S') TODAYBACKUPPATH = BACKUP_PATH + DATETIME print("正在创建备份文件夹!") #创建备份文件夹 if not os.path.exists(TODAYBACKUPPATH): os.makedirs(TODAYBACKUPPATH) print("正在检查数据库名称文件") #定义执行备份脚本,读取文件中的数据库名称,注意按行读写,不校验是否存在该库 def run_backup(): in_file = open(DB_NAME,"r") for dbname in in_file.readlines(): dbname = dbname.strip() print("正在启动备份数据库 %s" %dbname) dumpcmd = "mysqldump -u" +DB_USER + " -p"+DB_USER_PASSWD+" " +dbname+" > "+TODAYBACKUPPATH +"/"+dbname+".sql" print(dumpcmd) os.system(dumpcmd) file1.close() #执行压缩的函数 def run_tar(): compress_file = TODAYBACKUPPATH + ".tar.gz" compress_cmd = "tar -czvf " +compress_file+" "+DATETIME os.chdir(BACKUP_PATH) os.system("pwd") os.system(compress_cmd) print("compress complete!") #print("压缩完成!") #删除备份文件夹 remove_cmd = "rm -rf "+TODAYBACKUPPATH os.system(remove_cmd) #备份数据库文件存在就执行备份和压缩,否则退出 if os.path.exists(DB_NAME): file1 = open(DB_NAME) print("开始备份在{}路径下的数据库".format(DB_NAME)) run_backup() run_tar() print("backup success!") #print("备份成功") else: print("找不到数据库文件..") exit()
备份完成后显示backup success!并查看路径为有tar.gz的包则表示备份完成。
届时打开对象储存-bucket列表可以查看已在列表上。