Как сделать дамп всех таблиц MySQL на PHP и на хостинге без привелегии OUTFILE
global $db_tables;
ob_start();
require_once("config.php");
ob_end_clean();
//backup_db_tables();
$date = date("YmdHis");
$db = new DB;
$db->connect();
$tables = "SHOW TABLES";
$res = mysql_query($tables) or die( "Ошибка при выполнении запроса: ".mysql_error() );
while( $table = mysql_fetch_row($res) )
{
$fp = fopen( ABSPATH."_backup/".$table[0]."_".$date."_dump.sql", "a" );
if ( $fp )
{
$query = "TRUNCATE TABLE `".$table[0]."`;
";
fwrite ($fp, $query);
$rows = 'SELECT * FROM `'.$table[0].'`';
$r = mysql_query($rows) or die("Ошибка при выполнении запроса: ".mysql_error());
while( $row = mysql_fetch_row($r) )
{
$query = "";
foreach ( $row as $field )
{
if ( is_null($field) )
$field = "NULL";
else
$field = "'".mysql_escape_string( $field )."'";
if ( $query == "" )
$query = $field;
else
$query = $query.', '.$field;
}
$query = "INSERT INTO `".$table[0]."` VALUES (".$query.");
";
fwrite ($fp, $query);
}
fclose ($fp);
//получаем файл с дампом таблиц ABSPATH."_backup/".$table[0]."_".$date."_dump.sql"
}
}
а если нужно запаковать в ZIP а потом архив дампа отправить по почте?
require_once('pclzip.lib.php');
global $db_tables;
ob_start();
require_once("config.php");
ob_end_clean();
//backup_db_tables();
$date = date("YmdHis");
$date2 = date("Y-m-d-H-i");
// создание архива
$archive = new PclZip(ABSPATH."_backup/".$date2.'.zip');
$archive->create(ABSPATH."_backup/".'file.txt', PCLZIP_OPT_REMOVE_PATH, ABSPATH."_backup/");
$dfmail = "noreply@".str_replace('www.', '', $_SERVER['HTTP_HOST']);
$mail = new PHPMailer(); // defaults to using php "mail()"
$mail->CharSet = 'UTF-8';
$body = 'Автоматический backup системы. Для восстановления утерянных данных воспользуйтесь менеджером баз данных (например, phpMyAdmin) и импортируйте прикрепленные файлы. Внимание! Импорт данных уничтожит текущие записи в таблицах.';
$mail->AddReplyTo($dfmail,"name");
$mail->SetFrom($dfmail, 'name ');
$mail->AddAddress("name @name.ua", "name ");
$mail->Subject = "автоматический backup от ".date('Y-m-d H:i:s');
$mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test
$mail->MsgHTML($body);
$db = new DB;
$db->connect();
$tables = "SHOW TABLES";
$res = mysql_query($tables) or die( "Ошибка при выполнении запроса: ".mysql_error() );
while( $table = mysql_fetch_row($res) )
{
$fp = fopen( ABSPATH."_backup/".$table[0]."_".$date."_dump.sql", "a" );
if ( $fp )
{
$query = "TRUNCATE TABLE `".$table[0]."`;
";
fwrite ($fp, $query);
$rows = 'SELECT * FROM `'.$table[0].'`';
$r = mysql_query($rows) or die("Ошибка при выполнении запроса: ".mysql_error());
while( $row = mysql_fetch_row($r) )
{
$query = "";
foreach ( $row as $field )
{
if ( is_null($field) )
$field = "NULL";
else
$field = "'".mysql_escape_string( $field )."'";
if ( $query == "" )
$query = $field;
else
$query = $query.', '.$field;
}
$query = "INSERT INTO `".$table[0]."` VALUES (".$query.");
";
fwrite ($fp, $query);
}
fclose ($fp);
if ( is_file(ABSPATH."_backup/".$table[0]."_".$date."_dump.sql") )
{$error_ar = $archive->add(ABSPATH."_backup/".$table[0]."_".$date."_dump.sql", PCLZIP_OPT_REMOVE_PATH, ABSPATH."_backup/");
if ($error_ar == 0) { echo ("
Error : '".$archive->errorInfo()."'"); } else {echo ("
file : '".ABSPATH."_backup/".$table[0]."_".$date."_dump.sql" ."' add to archive");}
} else { echo "
error ! file -".ABSPATH."_backup/".$table[0]."_".$date."_dump.sql - not found";}
if(unlink ( ABSPATH."_backup/".$table[0]."_".$date."_dump.sql"))
{ echo "
Delete ok: " .ABSPATH."_backup/".$table[0]."_".$date."_dump.sql"; }
else{ echo "
Error delete file!".ABSPATH."_backup/".$table[0]."_".$date."_dump.sql"; }
// раньше прикрепляли по одному- теперь все сразу прикрепляем и удаляем
//$mail->AddAttachment(ABSPATH."_backup/".$table[0]."_".$date."_dump.sql");
}
}
$mail->AddAttachment(ABSPATH."_backup/".$date2.'.zip');
if(!$mail->Send()) {
echo "
Backup Error: " . $mail->ErrorInfo;
}else{
echo "
Backup sent!";
}
как это можно автоматизаровать чтобы само отправляла в определенное время?
добавить в cron команду, которая будет запускаться в определенное время
/usr/local/bin/curl http://домен.ком/cron.php?token='334563464568'
а содержимое cron.php обернуть в
if($_GET['token'] == '334563464568'){
************************
}else{
die('
Permission denied!');
}
?>
что это за библиотеки? 'pclzip.lib.php'
и $mail ?
http://www.phpconcept.net/pclzip/pclzip-downloads
Комментарии
Оставить комментарий
Базы данных - MySql (Maria DB)
Термины: Базы данных - MySql (Maria DB)