利用阿里云OSS为网站备份

4
622

之前曾写过用利用Cron备份数据库及站点文件,而之前备份最大的一个问题是,备份的站点文件的压缩包过大,无法用邮件发送。

前几天申请了阿里云,其中的OSS服务是免费半年的,何乐而不为呢?看了产品的价格,作为站点的备份的话也相当划算,而流入流量也是免费的,所以是一个很不错的备份选择,即使是以后收费,一个月5块也能搞定。目前价格如下:

ali-oss-price

更为重要的是现在免费半年,所以赶紧给站点做个备份吧。阿里云OSS申请地址

OSS上的备份机制:在OSS建立两个bucket,如old和new,如果OSS收到备份的器请求,则备份文件上传到new中,后删除old中之前的备份文件(如果第一次备份,则为空),然后将new中的所有文件复制到old中,然后再删除new中的备份文件,备份的文件位于old中。

这样做的目的只有一个节约OSS的空间,说白了就是只保留一次备份,占用的空间越小,则越省钱。

sitebackup.php

#!/usr/local/bin/php.cli
 SQLFiles.ome');
 system('tar -czf '.BACK_PATH.date(Ymd).'_SQLFiles.tar.gz SQLFiles.ome');
//上传备份
$oss_sdk_service->create_mtu_object_by_dir(BUCKET_NEW,BACK_PATH);
//删除旧备份文件夹
$list_objects = $oss_sdk_service->list_object(BUCKET_OLD);
$list_array = getListArray($list_objects);
foreach($list_array as $list)
{
  $delete_object = $oss_sdk_service->delete_object(BUCKET_OLD,$list);
}
//复制备份到旧备份文件夹
$list_objects = $oss_sdk_service->list_object(BUCKET_NEW);
$list_array = getListArray($list_objects);
foreach($list_array as $list)
{
  $copy_object_result = $oss_sdk_service->copy_object(BUCKET_NEW, $list,BUCKET_OLD, $list);
}
//删除新文件夹备份
$list_objects = $oss_sdk_service->list_object(BUCKET_NEW);
$list_array = getListArray($list_objects);
foreach($list_array as $list)
{
  $delete_object = $oss_sdk_service->delete_object(BUCKET_NEW,$list);
}
//删除本地备份文件夹内容
  system('rm -rf  *.ome');
  system('rm -rf '.BACK_PATH.'*');
function getListArray($list_objects)
{
  $returnArr = array();
  $tmpArray = json_decode(json_encode((array) simplexml_load_string($list_objects->body)),1);
  if($tmpArray['Contents']){
    foreach($tmpArray['Contents'] as $arr)
    {
      $returnArr[] = $arr['Key'];
    }
  }
  return $returnArr;
}
?>

下载所需的文件:Download,备用下载地址:MEGA,下载后首先将oss_php放在网站目录的上级目录中,解压缩打开config.php,须替换的值:

//ACCESS_ID
define('OSS_ACCESS_ID', 'dbiWLx');
//ACCESS_KEY
define('OSS_ACCESS_KEY', 'Wv4fk0dn3B');
define('BUCKET_NEW','onedoutmp'); //BUCKET1
define('BUCKET_OLD','onedoubackup'); //BUCKET2
//数据库配置
define('DBHOST','localhost');
define('DBUSER','onedou');
define('DBPASS','123456');
 

OSS_ACCESS_ID可以在“我的账户”>“安全管理”中找到,然后建立两个bucket,也就是目录,另外就是数据库相关,为了数据库的导出。另外配置的一个文件是BackupFiles.lst,这个是所需备份的目录,请自行修改。然后再后台的中将sitebackup.php添加Cron定时任务,由于各个面板的操作不一样,就不在多做说明。备份的周期也自定义。备份完之后,可以刷新OSS的bucket,就可以看到文件了。

ali-oss-backup-success

上一篇Vlookup匹配后返回#N/A
下一篇新主题I will 上线

4 条留言

    • 需要有权限给主机增加定时任务,DA这种面板带这个功能。cron类似于Windows 的计划任务。

    • @Vans爱好者

      目前阿里云产品通过内网传输数据和公网传输的入流量是免费的(如云服务器和RDS之间传输),公网传输出流量将收取费用。

      有用啊!

留言

留言不能为空
怎么称呼您?

验证码 *