之前曾写过用利用Cron备份数据库及站点文件,而之前备份最大的一个问题是,备份的站点文件的压缩包过大,无法用邮件发送。
前几天申请了阿里云,其中的OSS服务是免费半年的,何乐而不为呢?看了产品的价格,作为站点的备份的话也相当划算,而流入流量也是免费的,所以是一个很不错的备份选择,即使是以后收费,一个月5块也能搞定。目前价格如下:
更为重要的是现在免费半年,所以赶紧给站点做个备份吧。阿里云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,就可以看到文件了。
将sitebackup.php添加Cron定时任务?
这个是指的?
不是很明白
需要有权限给主机增加定时任务,DA这种面板带这个功能。cron类似于Windows 的计划任务。
这个现在还有效么?阿里云自己的主机,备份的话会占用主机的带宽么?还是直接走内网?
@Vans爱好者
有用啊!