飞嗨,欢迎您的光临,本博所发布之文章皆为作者亲测通过,如有错误,欢迎通过各种方式指正。(本博已于2015.12.6升级到php7,运行环境php7 php-fpm + nginx1.8.0)

linux crontab结合php脚本自动备份数据库到免费七牛云存储

Linux lf 3460℃ 0评论

试用微软云服务器有一年多了,前两天收到微软云试用停止的邮件。感谢微软云提供试用账号给我,使我对linux系统有了更好的掌握。2015年4月27就要停止资源分配,最近去看了:腾讯云、盛大云、亚马逊aws、百度云、金山云、电信云、阿里云,价格、配置、功能。最终还是决定,等微软云试用停止后,就入手最低配的阿里云吧。1M带宽、512RAM、单核cpu,不过,前两天又收到一个百度云的试用账号,但是只有短短一个月试用。所以,最近对于数据很敏感的,用了一年了,服务器上有很多东西了,其中以svn和git版本库记录和mysql数据库及web目录最敏感。身怕还没到27号,打开电脑发现putty连不上服务器了,然后资源被移除了……………于是就想到用免费的七牛云存储定期的来备份敏感数据吧。本来想写一个通用的类,自动备份文件和数据库,但是数据库多了数据库导出,传参数不好控制,就分开来写了。本文,记录了结合linux的crontab命令,自动执行php脚本来备份指定的mysql数据库到七牛云存储。

windows azure mail

windows azure mail

好吧,为毛不选择shell script备份呢,因为七牛云存储木有shell script的sdk。其次呢,我对shell脚本的熟练程度远不及php脚本。再者呢,php有三个功能:第一,当然是做web开发;第二,做控制台程序;第三,做gui程序。GUI就算了吧,哈哈,php是最好的编程语言都被大家黑出翔了,最近有尝试在用python的tkinter和pyqt类库做gui程序。七牛呢,又提供了php的sdk,于是乎就选择php啦~~~~

上脚本代码:

脚本下载


<?php

require_once('qiniu/io.php');//导入七牛的sdk
require_once('qiniu/rs.php');

//数据库备份
$dbs = '';
foreach($argv as $k => $v){//遍历执行脚本传入的参数
if($k == 0) continue;
$dbs .= ' '.$v;
}
$dbPath = dirname(__FILE__).'/mysql/';//在执行脚本的目录下创建mysql文件夹,用来存放导出的sql脚本
if(!is_dir($dbPath)){
mkdir($dbPath,0777,true);
}
$fileName = date('Y-m-d_H-i-s').$dbs.'.sql';
$fileName = str_replace(' ','-',$fileName);
$dbFile = $dbPath.$fileName;
system("mysqldump -uroot -pxxxxxxxxxx --default-character-set=utf8 --databases $dbs  > $dbFile",$res);//导出sql脚本

//七牛设置
$bucket = 'linux';//七牛的bucket
$key = 'mysql/'.$fileName;//上传到七牛的位置及文件名

$client = new Qiniu_MacHttpClient(null);//这些东东是sdk demno附带的,神马回调地址应该可以删除的,但是反正不碍事,就不管他了
$putPolicy = new Qiniu_RS_PutPolicy("$bucket:$key");
$putPolicy->CallbackUrl = 'https://10fd05306325.a.passageway.io';
$putPolicy->CallbackBody = 'key=$(key)&hash=$(etag)';
$upToken = $putPolicy->Token(null);

$putExtra = new Qiniu_PutExtra();
$s = time();
list($ret, $err) = Qiniu_PutFile($upToken, $key, $dbFile, $putExtra);//上传在here
if ($err !== null) {//备份是否成功,产生个日志文件databaseBackup.log及发一封email给admin#feehi.com
logs("数据库{$dbs}备份成功");
} else {
logs("数据库{$dbs}备份失败");
}
function logs($message)
{
$content = date('Y-m-d H:i:s').' :'.$message;
file_put_contents('databaseBackup.log',$content.'\r\n',FILE_APPEND);
if(strpos($content,'成功')){
$title = '备份成功';
}else{
$title = '备份失败';
}
mail('admin@feehi.com',$title,$content);
}

db.php

db.php

这样呢,在设置了php到环境变量的情况下,就可以使用php db.php 数据库1 数据库2 的方式来备份啦,但是呢,每天来执行很麻烦,就可以结合crontab,让linux的计划任务,每天来定时跑一下这个脚本。

1)crontab -e 编写计划任务(crond是linux内置的服务,直接使用service crond start就可以开启,最好加入到开机自启)

2)书写任务 分 时 日 月 周 命令
分,1-59,每分钟用*表示
时,1-23,0表示0点
日,1-31
月,1-12
周,0-6,0表示周日
命令
如40 13 * * *  php /root/backupToQiniu/db.php blog bw 表示每天13:40执行这个php脚本,并传入blog bw参数

crontab -e

crontab -e

ok,等到过了13:40后,我的admin#feehi.com就收到提示成功备份的邮件啦,去脚本目录也看到产生了一个mysql目录,并包含了一个sql脚本,去七牛存储空间也看到了这个自动备份的sql脚本:

mail提示

mail提示

七牛备份

七牛备份

转载请注明:飞嗨 » linux crontab结合php脚本自动备份数据库到免费七牛云存储

喜欢 (3)or分享 (0)
发表我的评论
取消评论

表情
粤ICP备15018643号-1