来源 http://topic.csdn.net/t/20040726/11/3209900.html
<? /* 程序功能:mysql数据库备份功能 作者: 唐小刚 说明:本程序主要是从mysqladmin中提取出来,并作出一定的调整,希望对大家在用php编程时备份数据有定帮助. 如果不要备份结构:请屏掉这句://echo get_table_def($dbname,$table,$crlf).";$crlf$crlf"; 如果不要备份内容:请屏掉这句:echo get_table_content($dbname, $table, $crlf); */ header("Content-disposition: filename=backup.sql");//所保存的文件名 header("Content-type: application/octetstream"); header("Pragma: no-cache"); header("Expires: 0"); //备份数据 $i = 0; $crlf="\r\n"; $dbname="数据库名";//数据库名 global $dbconn; $dbconn = mysql_connect("localhost","用户名","密码");//数据库主机,用户名,密码 $db = mysql_select_db($dbname,$dbconn); mysql_query("set names utf8"); // The language-code of the database
$tables = mysql_list_tables($dbname,$dbconn); $num_tables = @mysql_numrows($tables); while($i < $num_tables) { $table = mysql_tablename($tables, $i); print $crlf; print $crlf; echo get_table_def($dbname, $table, $crlf).";$crlf$crlf"; echo get_table_content($dbname, $table, $crlf); $i++; } //定义抽取表结构与数据 function get_table_def($db, $table, $crlf) { global $drop; $schema_create = ""; if(!empty($drop)) $schema_create .= "DROP TABLE IF EXISTS $table;$crlf"; $schema_create .= "CREATE TABLE $table ($crlf"; $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 .= ",$crlf"; } $schema_create = ereg_replace(",".$crlf."$", "", $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 .= ",$crlf"; 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 .= "$crlf)"; return (stripslashes($schema_create)); } //保存数据表的值 function get_table_content($db, $table, $crlf) { $schema_create = ""; $temp = ""; $result = mysql_db_query($db, "SELECT * FROM $table"); $i = 0; while($row = mysql_fetch_row($result)) { $schema_insert = "INSERT INTO $table VALUES ("; for($j=0; $j<mysql_num_fields($result);$j++) { if(!isset($row[$j])) $schema_insert .= " NULL,"; elseif($row[$j] != "") $schema_insert .= " '".addslashes($row[$j])."',"; else $schema_insert .= " '',"; } $schema_insert = ereg_replace(",$", "", $schema_insert); $schema_insert .= ");$crlf"; $temp = $temp.$schema_insert ; $i++; } return $temp; } ?>