服务器定时备份数据库 执行文件

<?php
//每天早上备份一次 MySQL 数据库并自动打包,同时删除 5 天前的备份文件 建议在本地运行没有任何问题再传到服务器上 以后就可以添加计划任务
////////////////////////*/
//保存目录,路径要用反斜杠.您需要手动建立它.
//WinRAR.exe 要把压缩包的exe文件跟当前运行页面放在同一个目录,当然你也可以自己配置,这样才能压缩
ini_set("max_execution_time", "0");//代码运行时间不限制 防止备份失败
ini_set('memory_limit', '128M');//设置运行内存 根据需求可以修改
date_default_timezone_set("PRC");
header('Content-Type:application/json; charset=utf-8');
$store_folder = 'databse_backup';
if(!file_exists($store_folder))
{
mkdir($store_folder);
}
//用户名和密码
//该帐号须有操作[所有]的数据库及FILE的权限

//否则有些数据库不能备份.
$db_username = "root";
$db_password = "root";
$time=time();
$nowdir = $store_folder."\".date("Ymd",$time)."";
$con = mysqli_connect("localhost", "root", "root");
if(!file_exists($nowdir))
{
mkdir($nowdir);
}
if(!$con)
{
die('Could not connect: ' . mysqli_connect_error());
}
echo "正在备份请勿关闭页面....</br>";
ob_flush();
flush();
sleep(1);
//数据库执行文件地址
$mysqladdres='D:phpStudyMySQLinmysqldump.exe';//我的服务器是 phpmystudy 根据自己的情况设置
$res = mysqli_query($con,'show databases');
$data = array();
echo str_repeat(" ", 4096); //防止浏览器的缓存
while ($row = mysqli_fetch_assoc($res))
{
$data[] = $row['Database'];

system ($mysqladdres.' --opt '."$row[Database] -u{$db_username} ".($db_password?"-p{$db_password}":"")."> $nowdir\$row[Database].sql");
echo "dumping database `$row[Database]`...</br>";
ob_flush();
flush();
sleep(1);
}
echo " Winrar loading...</br> ";
//system( dirname(__FILE__)."\WinRAR.exe a -ep1 -r -o+ -m5 -df "$nowdir.rar" "$nowdir" " );//如有WinRAR.exe文件在根目录时压缩sql文件
//$dirName="$store_folder\".date("Ymd",$time-86400*5).'.rar';
//if (file_exists($dirName)) {
// @unlink($dirName);
//}

$dirName="$store_folder\".date("Ymd",$time-86400*5);
//删除 5 天前的文件
if (is_dir($dirName)) {
$handle = @opendir($dirName);
while (($file = @readdir($handle)) !== false) {
if ($file != '.' && $file != '..') {
$dir = $dirName . '/' . $file;
is_dir($dir) ? removeDir($dir) : @unlink($dir);
}
}
closedir($handle);
}

if (file_exists($dirName)) {
@rmdir($dirName);
}
ob_flush();
flush();
sleep(1);
echo " OK!</br>";
mysqli_close($con);
ob_end_flush();
?>

原文地址:https://www.cnblogs.com/zhang-bin/p/9790971.html