备份/还原 MySQL 数据库的程序
uu
|
1#
uu 发表于 2005-06-19 00:15
备份/还原 MySQL 数据库的程序
原理我已经在以前的文章里写过了!这是完整的程序!已经测试成功备份/还原了 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 "保存完毕!"; } ?> |