原理我已经在以前的文章里写过了!这是完整的程序!已经测试成功备份/还原了 10M 大小的数据库。
自带登陆功能,比较安全。界面烂些!呵呵!!
使用方法:
1 上传到某一个目录,比如 test
2 运行,然后保存,文件为 数据库的名字.txt ,比如,数据库叫 user,则生成的文件为 user.txt
3 用 FTP 把生成的文件转移到你想恢复的机器上,同时这个程序也得传一个呀!!
4 在新服务器上建立你想恢复的数据库,只需要建一个空的库就行!
5 运行新服务器上的这个程序,选择恢复数据库,程序会读出你 fpt 来的数据库文件,然后插入到数据库中,程序会自动建立表格结构和插入数据的!
后计:刚才的文件出现点错误,已经修正了(password 需要改名字为 pass才可以用)
<? set_time_limit(600); if($action == "") { ?>
<title>PHP世纪网 MySQL 数据库备份还原程序</title>
<body bgcolor="#FFFFFF">
<table width="400" border="0" cellspacing="0" cellpadding="2" align="center" bgcolor="f0f0f0">
<form method=post>
<input type=hidden name=action value=login>
<tr align="center" bgcolor="#000066">
<td colspan="2" height="20"><font color="#FFFFFF">PHP世纪网 MySQL 数据库备份还原程序 2001/3/1</font>9</td>
</tr> <tr> <td>主机名</td>
<td>
<input type="text" name="host" size="30" value="localhost">
</td> </tr> <tr>
<td>用户名</td> <td>
<input type="text" name="user" size="30">
</td> </tr> <tr>
<td>密码</td> <td>
<input type="pass" name="pass" size="30">
</td> </tr>
<tr align="center">
<td colspan="2">
<input type="submit" name="Submit" value="登陆">
<input type="reset" name="Submit2" value="重填">
</td> </tr> </form> </table>
<? }
elseif($action == "login") { mysql_connect($host,$user,$pass); ?> 选择要保存的数据库 <? $dbresult = mysql_list_dbs();
for($i=0;$i<mysql_numrows($dbresult);$i++) {
$db=mysql_dbname($dbresult,$i); ?>
<form method=post target=_blank>
<input type=hidden name=action value="do">
<input type=hidden name=host value="<?echo $host?>">
<input type=hidden name=user value="<?echo $user?>">
<input type=hidden name=pass value="<?echo $pass?>">
<input type=hidden name=db value="<?echo $db?>"> <?echo $db?>
<input type=submit name=submit value="保存">
<input type=submit name=submit value="还原">
</form>
<? } } elseif(($action == "do") && ($submit == "还原")) { mysql_connect($host,$user,$pass);
if(!file_exists("$db.txt")) { echo "文件不存在!请先上传数据库备份文件 $db.txt"; exit(); } //读入数据库文件
// $handle = fopen("$db.txt","r");
$message = file("$db.txt"); $pointer = 0;
$copyright = chop($message[$pointer++]); if(substr($copyright,0,36) != "PHP世纪网 - MySQL 数据库备份还原程序") { echo "000 - 文件格式不对!";
fclose($handle); exit(); } $tablenum = chop($message[$pointer++]); for($i=0;$i<$tablenum;$i++) {
chop($message[$pointer++]);
$table = chop($message[$pointer++]);
//删除表格
$droptable = chop($message[$pointer++]); mysql_db_query($db,$droptable);
//创建表格 $creattable = chop($message[$pointer++]); mysql_db_query($db,$creattable);
//恢复数据 $rownum = chop($message[$pointer++]); $numfields = chop($message[$pointer++]); for($j=0;$j<$rownum;$j++) {
$value=""; for($k=0;$k<($numfields-1);$k++) { $value .= "'".addslashes(str_replace(" ","\r\n",chop($message[$pointer++])))."',"; } $value .= "'".str_replace(" ","\r\n",chop($message[$pointer++]))."'"; mysql_db_query($db,"insert into $table values (".$value.")"); } } echo "$db 还原成功";
exit(); } elseif(($action == "do") && ($submit == "保存")) { mysql_connect($host,$user,$pass);
function save_table_struct($db, $table) { //删除旧的表格
$schema_create .= "DROP TABLE IF EXISTS $table\r\n";
//创建
$schema_create .= "CREATE TABLE $table (";
//读取字段信息
$result = mysql_db_query($db, "SHOW FIELDS FROM $table"); while($row = mysql_fetch_array($result)) { $schema_create .= " $row[Field] $row[Type]";
//默认属性 if(isset($row["Default"]) && (!empty($row["Default"]) || $row["Default"] == "0")) $schema_create .= " DEFAULT '$row[Default]'";
//为空属性
if($row["Null"] != "YES") $schema_create .= " NOT NULL";
//额外属性 if($row["Extra"] != "") $schema_create .= " $row[Extra]"; $schema_create .= ","; }
//去掉里面的错误的部分 $schema_create = ereg_replace(",$", "", $schema_create);
//读取关键字 $result = mysql_db_query($db, "SHOW KEYS FROM $table"); while($row = mysql_fetch_array($result)) { $kname=$row['Key_name'];
if(($kname != "PRIMARY") && ($row['Non_unique'] == 0)) $kname="UNIQUE|$kname";
if(!isset($index[$kname])) $index[$kname] = array(); $index[$kname][] = $row['Column_name']; }
while(list($x, $columns) = @each($index)) {
$schema_create .= ","; if($x == "PRIMARY") $schema_create .= " PRIMARY KEY (" . implode($columns, ", ") . ")";
elseif (substr($x,0,6) == "UNIQUE") $schema_create .= " UNIQUE ".substr($x,7)." (" . implode($columns, ", ") . ")"; else
$schema_create .= " KEY $x (" . implode($columns, ", ") . ")"; }
//结束 $schema_create .= ")\r\n"; return (stripslashes($schema_create)); }
function save_table_data($db,$table) { global $handle; $result = mysql_db_query($db,"select * from $table"); fputs($handle,@mysql_num_rows($result)."\r\n"); $numfields = mysql_num_fields($result); fputs($handle,$numfields."\r\n"); if(@mysql_num_rows($result) <= 0) return;
for($k=0;$k<mysql_num_rows($result);$k++) {
$msg = mysql_fetch_row($result); for($i=0;$i<$numfields;$i++) { $msg[$i] = str_replace("\r\n"," ",$msg[$i]); $msg[$i] = str_replace("\n" ," ",$msg[$i]); fputs($handle,$msg[$i]."\r\n"); } }
} mysql_connect($host,$user,$pass); //创建文件
$handle = fopen("$db.txt","w");
//文件标识
fputs($handle,"PHP世纪网 - MySQL 数据库备份还原程序 V1.0 www.php2000.com\r\n");
//列出所有的表格
$tableresult = mysql_list_tables($db); fputs($handle,mysql_num_rows($tableresult)."\r\n"); for($i=0;$i<mysql_numrows($tableresult);$i++) {
$table = mysql_tablename($tableresult,$i);
//保存表格结构
fputs($handle,"------- 转换 $db - $table 开始 --------\r\n"); fputs($handle,"$table\r\n"); fputs($handle,save_table_struct($db,$table)); fputs($handle,save_table_data($db,$table)); } fclose($handle);
echo "保存完毕!"; } ?>
|
|