红联Linux门户
Linux帮助

备份/还原 MySQL 数据库的程序

发布时间:2005-06-19 00:15:33来源:红联作者:uu
原理我已经在以前的文章里写过了!这是完整的程序!已经测试成功备份/还原了 10M 大小的数据库。
自带登陆功能,比较安全。界面烂些!呵呵!!

使用方法:
1 上传到某一个目录,比如 test
2 运行,然后保存,文件为 数据库的名字.txt ,比如,数据库叫 user,则生成的文件为 user.txt
3 用 FTP 把生成的文件转移到你想恢复的机器上,同时这个程序也得传一个呀!!
4 在新服务器上建立你想恢复的数据库,只需要建一个空的库就行!
5 运行新服务器上的这个程序,选择恢复数据库,程序会读出你 fpt 来的数据库文件,然后插入到数据库中,程序会自动建立表格结构和插入数据的!


后计:刚才的文件出现点错误,已经修正了(password 需要改名字为 pass才可以用)

set_time_limit(600);
if($action == "")
{
?>
PHP世纪网 MySQL 数据库备份还原程序























PHP世纪网 MySQL 数据库备份还原程序 2001/3/19
主机名

用户名

密码





}
elseif($action == "login")
{
mysql_connect($host,$user,$pass);
?>
选择要保存的数据库
$dbresult = mysql_list_dbs();
for($i=0;$i{
$db=mysql_dbname($dbresult,$i);
?>











}
}
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{
$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{
$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 "保存完毕!";
}
?>
文章评论

共有 5 条评论

  1. Coso 于 2005-12-07 14:50:11发表:

    支持一下

  2. root 于 2005-10-09 00:27:18发表:

    学习了

  3. WWW 于 2005-08-15 00:26:44发表:

    支持

  4. ming 于 2005-08-02 00:15:24发表:

    支持

  5. 风雨无阻 于 2005-07-01 15:13:10发表: