Ubuntu Linux定时备份数据库,并上传到阿里云OSS
2017-12-22 16:53
429 查看
生产环境中可能会遇到各种各样的问题,为了防止数据丢失和容灾,定时备份数据库就显得很重要了。本文使用crontab定时运行shell脚本,shell脚本中备份MySQL到本地并上传到阿里云OSS对象存储。
先看shell脚本(shell脚本处理了数据库备份,数据库备份同步上传云端,七天前数据库备份删除):
#!/bin/bash #dbBackUp.sh //本shell脚本名 Now=$(date +"%Y%m%d_%H%M%S") #创建当前时间字符串,注意:等号前后不要有空格 sevenDaysAgo=`date +%F | sed 's/-//g'` sevenDaysAgo=`expr $sevenDaysAgo - 7` rm ./backup/price_$sevenDaysAgo* #移除七天之前的单库备份 rm ./backup/all_$sevenDaysAgo* #移除七天之前的整库备份 #将price库备份并压缩到backup目录下,文件名为price_+时间 mysqldump -uuser -ppassword price | gzip > /home/ubuntu/learn/mysql/backup/price_$Now.sql.gz; #将MySQL中所有数据备份并压缩到backup目录下,文件名为all_+时间 mysqldump -uuser -ppassword --all-databases | gzip > /home/ubuntu/learn/mysql/backup/all_$Now.sql.gz #执行上传操作,将备份文件同步到云端,存储在阿里云对象存储OSS中 NODE_ENV=$Now node /home/ubuntu/learn/mysql/upload.js
数据库备份文件上传到OSS,需要使用npm 安装ali-oss和co这两个库
/* upload.js */ var co = require('co'); var OSS = require('ali-oss'); var client = new OSS({ region: 'oss-cn-beijing',//上传region节点,具体参照阿里云提供列表 accessKeyId: 'AccessKeyID', accessKeySecret: 'AccessKeySecret'; }); co(function* (){ client.useBucket('data-backup-by-xiaozhu');//上传到的Bucket名称 var result = yield client.put('price_'+process.env.NODE_ENV+'.sql.gz','/home/ubuntu/learn/mysql/backup/price_'+process.env.NODE_ENV+'.sql.gz'); var result2 = yield client.put('all_'+process.env.NODE_ENV+'.sql.gz','/home/ubuntu/learn/mysql/backup/all_'+process.env.NODE_ENV+'.sql.gz'); }).catch(function(err){ console.log(err); })
有时候数据库备份的文件会很庞大,对象存储空间很可能会被塞满,我们就需要定时清理,阿里云OSS允许用户对Bucket设置生命周期规则,以自动淘汰过期掉的文件,节省存储空间。用户可以同时设置多条规则
/* lifecycle.js */ /* 设置声明周期规则,自动回收七天之外的数据库备份 */ var co = require('co'); var OSS = require('ali-oss'); var client = new OSS({ region: 'oss-cn-beijing', accessKeyId: 'AccessKeyID', accessKeySecret: 'AccessKeySecret' }); co(function* () { var result = yield client.putBucketLifecycle('data-backup-by-xiaozhu', 'region', [ { id: 'rule1', /*规则ID,用于标识一条规则,不能重复*/ status: 'Enabled', /*是否生效*/ prefix: 'price_', /*受影响的文件前缀,此规则只作用于符合前缀的文件*/ days: 7 /*指定距文件最后修改时间N天过期*/ },{ id:'rule2', status:'Enabled', prefix:'all_', days:7 } ]); console.log(result); }).catch(function (err) { console.log(err); });
shell脚本完成了数据库备份和备份清理的操作,还需要进行定时执行shell脚本的操作,我们可以使用crontab。执行crontab -e命令,添加以下内容。
如果第一次执行crontab会让选择使用什么编辑器来编辑,我们选择默认的nano即可。
30 1 * * * /bin/sh /home/ubuntu/learn/mysql/dbBackUp.sh #每天1点30分 执行dbBackUp脚本
输入完成之后按ctrl + X 退出,退出之后按提示输入Y,然后回车即可保存。(命令行窗口下方提示的快捷键,^代表Ctrl,M代表Alt)
我们也可以直接编辑/etc/crontab来执行定时任务。区别为:crontab -e是某个用户的周期计划任务;/etc/crontab是系统的周期任务
相关文章推荐
- 阿里云数据库备份DBS商业化发布,数据库实时备份到OSS
- 阿里云oss存储(python+oss实现定时备份到阿里云)
- ubuntu crontab 定时备份postgres数据库并上传ftp服务器
- linux 定时备份数据库 上传
- sqlserver2005定时备份数据库
- sql2008 定时备份数据库
- 阿里云 oss JavaScript客户端签名文件上传 vue2.0
- java上传图片到阿里云oss云存储中,返回url链接地址
- SQL Server 数据库定时自动备份
- SQL Server远程定时备份数据库脚本
- 定时备份SQL SERVER的数据库并且把备份文件复制到另外一台服务器保存
- 脚本定时备份数据库
- linux定时备份mysql数据库,及解决crontab执行时生成数据库文件为空的问题
- 阿里云 oss服务器文件上传 java
- The difference between the request time and the current time is too large.阿里云oss上传图片报错
- 使用SQL Server维护计划实现数据库定时自动备份
- Linux定时备份数据库
- linux利用shell脚本和cron实现定时备份、上传及垃圾日志清理(原创)
- Xtrabackup定时备份数据库脚本
- Node.js阿里云OSS文件上传