データベースをバックアップおよび復元できる機能があります。この機能は、データベースの量が少ない場合に完全に機能します。ただし、データが大規模な場合、バックアップ プロセスを完了できず、エラー メッセージが表示されます。これは、エラー メッセージのサンプルです。
Fatal error: Out of memory (allocated 192151552) (tried to allocate 63963113 bytes) in C:\wamp\www\samfahEnterprise\processbackup.php on line 69
以下は、バックアッププロセスを実行するために使用するスクリプトです。
<?php
session_start();
// Include settings
include("config.php");
date_default_timezone_set("Asia/Singapore");
set_time_limit(0);
ini_set('memory_limit', '20000M');
// Set the suffix of the backup filename
if ($table == '*')
{
$extname = 'all';
}else
{
$extname = str_replace(",", "_", $table);
$extname = str_replace(" ", "_", $extname);
}
// Generate the filename for the backup file
$filess = 'backup/dbbackup_' . date("d.m.Y_H_i_s") . '_' . $extname;
// Call the backup function for all tables in a DB
backup_tables($DBhost,$DBuser,$DBpass,$DBName,$table,$extname,$filess);
// Backup the table and save it to a sql file
function backup_tables($host,$user,$pass,$name,$tables,$bckextname,$filess)
{
$link = mysql_connect($host,$user,$pass);
mysql_select_db($name,$link);
$return = "";
// Get all of the tables
if($tables == '*') {
$tables = array();
$result = mysql_query('SHOW TABLES');
while($row = mysql_fetch_row($result)) {
$tables[] = $row[0];
}
} else {
if (is_array($tables)) {
$tables = explode(',', $tables);
}
}
// Cycle through each provided table
foreach($tables as $table)
{
$result = mysql_query('SELECT * FROM '.$table);
$num_fields = mysql_num_fields($result);
// First part of the output - remove the table
$return .= 'DROP TABLE ' . $table . ';<|||||||>';
// Second part of the output - create table
$row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$table));
$return .= "\n\n" . $row2[1] . ";<|||||||>\n\n";
// Third part of the output - insert values into new table
for ($i = 0; $i < $num_fields; $i++) {
while($row = mysql_fetch_row($result))
{
$return.= 'INSERT INTO '.$table.' VALUES(';
for($j=0; $j<$num_fields; $j++)
{
$row[$j] = addslashes($row[$j]);
//$row[$j] = ereg_replace("\n","\\n",$row[$j]);
if (isset($row[$j]))
{
$return .= '"' . $row[$j] . '"';
} else
{
$return .= '""';
}
if ($j<($num_fields-1))
{
$return.= ',';
}
}
$return.= ");<|||||||>\n";
}
}
$return.="\n\n\n";
}
// Save the sql file
$handle = fopen($filess.'.sql','w+');
fwrite($handle,$return);
fclose($handle);
// Close MySQL Connection
mysql_close();
}
$_SESSION['save'] = "<span style='color:#00FF00'>The backup has been created successfully.</span>";
echo "<script>window.location = 'utility.php';</script>";
?>