以前是采用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]");