跟大家请教一下PHP数据库备份问题.送上100分 #!/bin/shfilename="" (按自己的想法来就可以)mysqldump -u xxx -p xxx databasename tablename>$filename 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 好久以前写过一个php的.可惜没怎么用过,一直是用crontab 调shell脚本来备份。<?php /* 类名:MysqlBackUp 方法说明: setHost($value); 设置数据库主机名; setUser($value) 设置数据库用户名; setPassword($value) 设置数据库密码; setDatabase($value) 设置数据库名称; setTables($array) 设置要备份的数据表组成的(数组); setFilename($value) 设置保存的文件名 Init() 初始化; list_tables() 返回数据库中所有表的数组. backup() 备份数据并保存. restore($sql) 导入数据(从SQL语句). restoreFromFile($sql) 导入数据(从文件).*/class MysqlBackUp{ var $Host; var $User; var $Password; var $Database; var $Tables; var $Conn; var $Filename; var $error; var $strings; var $isCreate=false; function setHost($value) { $this->Host=$value; } function setUser($value) { $this->User=$value; } function setPassword($value) { $this->Password=$value; } function setDatabase($value) { $this->Database=$value; } function setTables($array) { $this->Tables=$array; } function setFilename($value) { $this->Filename=$value; } function setIsCreate($value=false) { $this->isCreate=$value; } function MysqlBackUp() { //blank; } function Init() { $this->connect(); $this->select_db(); //mysql_query("set NAMES gb2312"); } function connect() { $this->Conn=@mysql_connect($this->Host,$this->User,$this->Password); if(!$this->Conn) { $this->error='连接失败'; return false; } else { return true; } } function select_db() { if(@mysql_select_db($this->Database,$this->Conn)) return true; else { $this->error='选择数据库失败'; return false; } } function list_tables() { $result=@mysql_list_tables($this->Database); $i=0; while($rows=@mysql_fetch_row($result)) { $row[$i]=$rows[0]; $i++; } return $row; } function backup_create_table($table) { $result=@mysql_query("show create table ".$table); $row = mysql_fetch_assoc($result); $dump=''; $dump .= "\n\n--\n"; $dump .= "-- Table structure for table '$table'\n"; $dump .= "--\n\n"; $dump .= str_replace( "`", "", $row['Create Table'] ); $dump .= ";\n\n"; $dump .= "\n\n--\n"; $dump .= "-- Dumping data for table '$table'\n"; $dump .= "--\n\n"; return $dump; } function backup_data($table) { $sql="select * from ".$table; $result=mysql_query($sql); while ($row = @mysql_fetch_row($result)) { foreach ($row as $id => $value) { $value = str_replace('"','\\"',$value); $row[$id] = '"'.$value.'"'; } $dump .= 'INSERT INTO ' . $table . ' VALUES (' . implode(',',$row) . ");\n"; } return $dump; } function backup() { if(!$this->Tables) $this->Tables=$this->list_tables(); $dump=''; for($i=0;$i<sizeof($this->Tables);$i++) { if($this->isCreate) $dump.=$this->backup_create_table($this->Tables[$i]); $dump.=$this->backup_data($this->Tables[$i]); } $this->strings=$dump; $this->save(); return $dump; } function save() { $fp=@fopen($this->Filename,'w+'); fwrite($fp,$this->strings); @fclose($fp); } function restore($sql) { $result = @mysql_query($sql); if(!$result) { $this->error = "数据导入失败!"; return false; } else { return true; } } function restoreFromFile($file) { if(file_exists($file)) { $fp=@fopen($file,'r'); $filesize = filesize($file); $fp = fopen($file,"r"); $buffer = ''; $inside_quote = 0; $quote_inside = ''; $started_query = 0; $data_buffer = ''; $last_char = "\n"; while(!feof($fp) || strlen($buffer)) { do { if (!strlen($buffer)) { $buffer .= fread ($fp,1024); } $current_char = $buffer[0]; $buffer = substr($buffer, 1); if ($started_query) { $data_buffer .= $current_char; } elseif (preg_match("/[A-Za-z]/i",$current_char) && $last_char == "\n") { $started_query = 1; $data_buffer = $current_char; } else { $last_char = $current_char; } } while (!$started_query && (!feof($fp) || strlen($buffer))); if ($inside_quote && $current_char == $quote_inside && $last_char != '\\') { $inside_quote = 0; } elseif ($current_char == '\\' && $last_char == '\\') { $current_char = ''; } elseif (!$inside_quote && ($current_char == '"' || $current_char == '`' || $current_char == '\'')) { $inside_quote = 1; $quote_inside = $current_char; } elseif (!$inside_quote && $current_char == ';') { if(preg_match('/[cC]{1}[rR]{1}[eE]{1}[aA]{1}[tT]{1}[eE]{1}[ ]{1}[tT]{1}[aA]{1}[bB]{1}[lL]{1}[eE]{1}[ ]{1}[` a-z A-Z 0-9 _ \-]*(\()/',$data_buffer,$row)) { $table=preg_replace('/[cC]{1}[rR]{1}[eE]{1}[aA]{1}[tT]{1}[eE]{1}[ ]{1}[tT]{1}[aA]{1}[bB]{1}[lL]{1}[eE]{1}[ ]{1}/','',$row[0]); $table=str_replace('(','',$table); $table=trim($table); mysql_query("drop table ".$table); } mysql_query($data_buffer); $this->error=mysql_error(); $data_buffer = ''; $last_char = "\n"; $started_query = 0; } $last_char = $current_char; } } return true; }}?> 给你看一下我很久以前用的这个备份和还原的(没有整理成类,呵呵,但是很好用)!一起需要三个文件:mydb.php(数据库连接类) backup.php(备份文件) restore.php(还原文件),由于文件内容太长,我给你一个下载地址:http://www.519mir.com/db.rar然后你需要在你的同以及目录下建一个backup文件夹,运行一下backup.php(备份),restore.php(还原)! 关于php的一个bug/问题!关于__unset后访问私有变量的问题! 高手帮忙看看这样的功能要怎么实现 发现了个比较好的免费空间 我用PHP把参数写入xml代码出错请看代码?在线等候…… PHP网上商城 大侠 帮忙看看这段代码 郁闷死了 php在写入ACESS数据库时怎么写入不了长度超过50的内容啊? 求教:如何读取一个图片发送到客户端显示, 不是直接输出... 为什么这里这么多的关于session问题未能真正地解决呢 请大家帮忙,功能实现后给600分!!!! 四年php 求职(限北京)顺便撒分.大家捧场.谢谢. PHP面试题,谁做做?
可惜没怎么用过,一直是用crontab 调shell脚本来备份。<?php
/* 类名:MysqlBackUp
方法说明:
setHost($value); 设置数据库主机名;
setUser($value) 设置数据库用户名;
setPassword($value) 设置数据库密码;
setDatabase($value) 设置数据库名称;
setTables($array) 设置要备份的数据表组成的(数组);
setFilename($value) 设置保存的文件名
Init() 初始化;
list_tables() 返回数据库中所有表的数组.
backup() 备份数据并保存.
restore($sql) 导入数据(从SQL语句).
restoreFromFile($sql) 导入数据(从文件).*/class MysqlBackUp
{
var $Host;
var $User;
var $Password;
var $Database;
var $Tables;
var $Conn;
var $Filename;
var $error;
var $strings;
var $isCreate=false;
function setHost($value)
{
$this->Host=$value;
}
function setUser($value)
{
$this->User=$value;
}
function setPassword($value)
{
$this->Password=$value;
}
function setDatabase($value)
{
$this->Database=$value;
}
function setTables($array)
{
$this->Tables=$array;
}
function setFilename($value)
{
$this->Filename=$value;
}
function setIsCreate($value=false)
{
$this->isCreate=$value;
}
function MysqlBackUp()
{
//blank;
}
function Init()
{
$this->connect();
$this->select_db();
//mysql_query("set NAMES gb2312");
}
function connect()
{
$this->Conn=@mysql_connect($this->Host,$this->User,$this->Password);
if(!$this->Conn)
{
$this->error='连接失败';
return false;
}
else
{
return true;
}
}
function select_db()
{
if(@mysql_select_db($this->Database,$this->Conn))
return true;
else
{
$this->error='选择数据库失败';
return false;
}
}
function list_tables()
{
$result=@mysql_list_tables($this->Database);
$i=0;
while($rows=@mysql_fetch_row($result))
{
$row[$i]=$rows[0];
$i++;
}
return $row;
}
function backup_create_table($table)
{
$result=@mysql_query("show create table ".$table);
$row = mysql_fetch_assoc($result);
$dump='';
$dump .= "\n\n--\n";
$dump .= "-- Table structure for table '$table'\n";
$dump .= "--\n\n";
$dump .= str_replace( "`", "", $row['Create Table'] );
$dump .= ";\n\n"; $dump .= "\n\n--\n";
$dump .= "-- Dumping data for table '$table'\n";
$dump .= "--\n\n";
return $dump;
}
function backup_data($table)
{
$sql="select * from ".$table;
$result=mysql_query($sql);
while ($row = @mysql_fetch_row($result))
{
foreach ($row as $id => $value)
{
$value = str_replace('"','\\"',$value);
$row[$id] = '"'.$value.'"';
}
$dump .= 'INSERT INTO ' . $table . ' VALUES (' . implode(',',$row) . ");\n";
}
return $dump;
}
function backup()
{
if(!$this->Tables)
$this->Tables=$this->list_tables();
$dump='';
for($i=0;$i<sizeof($this->Tables);$i++)
{
if($this->isCreate)
$dump.=$this->backup_create_table($this->Tables[$i]);
$dump.=$this->backup_data($this->Tables[$i]);
}
$this->strings=$dump;
$this->save();
return $dump;
}
function save()
{
$fp=@fopen($this->Filename,'w+');
fwrite($fp,$this->strings);
@fclose($fp);
}
function restore($sql)
{
$result = @mysql_query($sql);
if(!$result)
{
$this->error = "数据导入失败!";
return false;
}
else
{
return true;
}
}
function restoreFromFile($file)
{
if(file_exists($file))
{
$fp=@fopen($file,'r');
$filesize = filesize($file);
$fp = fopen($file,"r");
$buffer = '';
$inside_quote = 0;
$quote_inside = '';
$started_query = 0;
$data_buffer = '';
$last_char = "\n";
while(!feof($fp) || strlen($buffer))
{
do
{
if (!strlen($buffer))
{
$buffer .= fread ($fp,1024);
}
$current_char = $buffer[0];
$buffer = substr($buffer, 1);
if ($started_query)
{
$data_buffer .= $current_char;
}
elseif (preg_match("/[A-Za-z]/i",$current_char) && $last_char == "\n")
{
$started_query = 1;
$data_buffer = $current_char;
}
else
{
$last_char = $current_char;
}
}
while (!$started_query && (!feof($fp) || strlen($buffer)));
if ($inside_quote && $current_char == $quote_inside && $last_char != '\\')
{
$inside_quote = 0;
}
elseif ($current_char == '\\' && $last_char == '\\')
{
$current_char = '';
}
elseif (!$inside_quote && ($current_char == '"' || $current_char == '`' || $current_char == '\''))
{
$inside_quote = 1;
$quote_inside = $current_char;
}
elseif (!$inside_quote && $current_char == ';')
{
if(preg_match('/[cC]{1}[rR]{1}[eE]{1}[aA]{1}[tT]{1}[eE]{1}[ ]{1}[tT]{1}[aA]{1}[bB]{1}[lL]{1}[eE]{1}[ ]{1}[` a-z A-Z 0-9 _ \-]*(\()/',$data_buffer,$row))
{
$table=preg_replace('/[cC]{1}[rR]{1}[eE]{1}[aA]{1}[tT]{1}[eE]{1}[ ]{1}[tT]{1}[aA]{1}[bB]{1}[lL]{1}[eE]{1}[ ]{1}/','',$row[0]);
$table=str_replace('(','',$table);
$table=trim($table);
mysql_query("drop table ".$table);
} mysql_query($data_buffer);
$this->error=mysql_error();
$data_buffer = '';
$last_char = "\n";
$started_query = 0;
}
$last_char = $current_char;
}
}
return true;
}}?>
http://www.519mir.com/db.rar然后你需要在你的同以及目录下建一个backup文件夹,运行一下backup.php(备份),restore.php(还原)!