以前是採用PHP讀取數據庫結構和內容,而後寫文件,這樣可能會致使導出的文件不必定能百分百導入到MySQL中去,想一想以後採用MySQL自帶的導入導出命令最保險,如下是代碼:php
1、備份數據庫並下載到本地【db_backup.php】mysql
- <?php
-
- $filename=date("Y-m-d_H-i-s")."-".$cfg_dbname.".sql";
-
- header("Content-disposition:filename=".$filename);
- header("Content-type:application/octetstream");
- header("Pragma:no-cache");
- header("Expires:0");
-
- $tmpFile = (dirname(__FILE__))."\\".$filename;
-
- exec("mysqldump -u$cfg_dbuser -p$cfg_dbpwd --default-character-set=utf8 $cfg_dbname > ".$tmpFile);
- $file = fopen($tmpFile, "r");
- echo fread($file,filesize($tmpFile));
- fclose($file);
- exit;
- ?>
2、還原數據庫【db_restore.php】sql
- <form id="form1" name="form1" method="post" action="">
- 【數據庫SQL文件】:<input id="sqlFile" name="sqlFile" type="file" />
- <input id="submit" name="submit" type="submit" value="還原" />
- </form>
- <?php
-
- require_once((dirname(__FILE__).'/../../include/config.php'));
- if ( isset ( $_POST['sqlFile'] ) )
- {
- $file_name = $_POST['sqlFile'];
- $dbhost = $cfg_dbhost;
- $dbuser = $cfg_dbuser;
- $dbpass = $cfg_dbpwd;
- $dbname = $cfg_dbname;
-
- set_time_limit(0);
- $fp = @fopen($file_name, "r") or die("不能打開SQL文件 $file_name");
- mysql_connect($dbhost, $dbuser, $dbpass) or die("不能鏈接數據庫 $dbhost");
- mysql_select_db($dbname) or die ("不能打開數據庫 $dbname");
-
- echo "<p>正在清空數據庫,請稍等....<br>";
- $result = mysql_query("SHOW tables");
- while ($currow=mysql_fetch_array($result))
- {
- mysql_query("drop TABLE IF EXISTS $currow[0]");