当前位置:Linux教程 - Mysql - 备份/还原 MySQL 数据库的程序

备份/还原 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 "保存完毕!";
    }
    ?>
    发布人:netbull 来自:奥索网