Ubuntu Linux定时备份数据库,并上传到阿里云OSS

前端之家收集整理的这篇文章主要介绍了Ubuntu Linux定时备份数据库,并上传到阿里云OSS前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

生产环境中可能会遇到各种各样的问题,为了防止数据丢失和容灾,定时备份数据库就显得很重要了。本文使用crontab定时运行shell脚本,shell脚本中备份MysqL到本地并上传到阿里云OSS对象存储。

先看shell脚本(shell脚本处理了数据库备份,数据库备份同步上传云端,七天前数据库备份删除):

  1. #!/bin/bash
  2. #dbBackUp.sh //本shell脚本名
  3. Now=$(date +"%Y%m%d_%H%M%S") #创建当前时间字符串,注意:等号前后不要有空格
  4. sevenDaysAgo=`date +%F | sed 's/-//g'`
  5. sevenDaysAgo=`expr $sevenDaysAgo - 7`
  6. rm ./backup/price_$sevenDaysAgo* #移除七天之前的单库备份
  7. rm ./backup/all_$sevenDaysAgo* #移除七天之前的整库备份
  8.  
  9. #将price库备份并压缩到backup目录下,文件名为price_+时间
  10. MysqLdump -uuser -ppassword price | gzip > /home/ubuntu/learn/MysqL/backup/price_$Now.sql.gz;
  11. #将MysqL中所有数据备份并压缩到backup目录下,文件名为all_+时间
  12. MysqLdump -uuser -ppassword --all-databases | gzip > /home/ubuntu/learn/MysqL/backup/all_$Now.sql.gz
  13.  
  14. #执行上传操作,将备份文件同步到云端,存储在阿里云对象存储OSS中
  15. NODE_ENV=$Now node /home/ubuntu/learn/MysqL/upload.js

数据库备份文件上传到OSS,需要使用npm 安装ali-oss和co这两个库

  1. /* upload.js */
  2.  
  3. var co = require('co');
  4. var OSS = require('ali-oss');
  5. var client = new OSS({
  6. region: 'oss-cn-beijing',//上传region节点,具体参照阿里云提供列表
  7. accessKeyId: 'AccessKeyID',accessKeySecret: 'AccessKeySecret';
  8. });
  9.  
  10.  
  11. co(function* (){
  12. client.useBucket('data-backup-by-xiaozhu');//上传到的Bucket名称
  13. var result = yield client.put('price_'+process.env.NODE_ENV+'.sql.gz','/home/ubuntu/learn/MysqL/backup/price_'+process.env.NODE_ENV+'.sql.gz');
  14. var result2 = yield client.put('all_'+process.env.NODE_ENV+'.sql.gz','/home/ubuntu/learn/MysqL/backup/all_'+process.env.NODE_ENV+'.sql.gz');
  15. }).catch(function(err){
  16. console.log(err);
  17. })

有时候数据库备份的文件会很庞大,对象存储空间很可能会被塞满,我们就需要定时清理,阿里云OSS允许用户对Bucket设置生命周期规则,以自动淘汰过期掉的文件,节省存储空间。用户可以同时设置多条规则

  1. /* lifecycle.js */
  2. /* 设置声明周期规则,自动回收七天之外的数据库备份 */
  3. var co = require('co');
  4. var OSS = require('ali-oss');
  5. var client = new OSS({
  6. region: 'oss-cn-beijing',accessKeyId: 'AccessKeyID',accessKeySecret: 'AccessKeySecret'
  7. });
  8. co(function* () {
  9. var result = yield client.putBucketLifecycle('data-backup-by-xiaozhu','region',[
  10. {
  11. id: 'rule1',/*规则ID,用于标识一条规则,不能重复*/
  12. status: 'Enabled',/*是否生效*/
  13. prefix: 'price_',/*受影响的文件前缀,此规则只作用于符合前缀的文件*/
  14. days: 7 /*指定距文件最后修改时间N天过期*/
  15. },{
  16. id:'rule2',status:'Enabled',prefix:'all_',days:7
  17. }
  18. ]);
  19. console.log(result);
  20. }).catch(function (err) {
  21. console.log(err);
  22. });

shell脚本完成了数据库备份和备份清理的操作,还需要进行定时执行shell脚本的操作,我们可以使用crontab。执行crontab -e命令,添加以下内容

如果第一次执行crontab会让选择使用什么编辑器来编辑,我们选择默认的nano即可。

  1. 30 1 * * * /bin/sh /home/ubuntu/learn/MysqL/dbBackUp.sh
  2. #每天1点30分 执行dbBackUp脚本

输入完成之后按ctrl + X 退出退出之后按提示输入Y,然后回车即可保存。(命令行窗口下方提示的快捷键,^代表Ctrl,M代表Alt)

我们也可以直接编辑/etc/crontab来执行定时任务。区别为:crontab -e是某个用户的周期计划任务;/etc/crontab是系统的周期任务

猜你在找的Ubuntu相关文章