如何 从 MySQL 数据库 导出 SQL 文件

本文提供了一个使用PHP进行MySQL数据库备份的脚本示例。通过设置数据库连接参数,该脚本可以实现数据库表结构及数据的完整备份,并将其导出为SQL文件格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

From: http://topic.youkuaiyun.com/t/20040726/11/3209900.html
改进: mysql_query("set names utf8");
 <?   
/*
程序功能: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);
$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;
}
?>
### 导出MySQL数据库SQL脚本文件的方法 #### 使用命令行工具导出SQL脚本文件 为了通过命令行导出MySQL数据库SQL脚本文件,需进入MySQL安装目录下的`bin`文件夹并在此处启动命令行界面[^2]。随后,在命令行中执行特定的mysqldump命令来完成数据导出操作。 对于Windows环境而言,基本的导出语句结构如下所示: ```bash "C:\Program Files\MySQL\MySQL Server X.X\bin\mysqldump.exe" -u 用户名 -p 数据库名称 > 文件路径.sql ``` 而在Linux环境中,则可利用以下形式的命令实现相同目的: ```bash #/usr/local/mysql/bin/mysqldump -u用户名 -p密码 数据库名 > /path/to/file.sql ``` 需要注意的是,当涉及到整个数据库而非单一表格的数据迁移时,应当省略具体表名参数以便覆盖全部所需内容[^4]。 #### 利用图形化管理软件进行SQL脚本导出 除了命令行方式外,还可以借助诸如MySQL Workbench这样的可视化应用程序来进行更便捷的操作。这类程序通常提供直观易懂的用户界面用于选择待备份的对象以及指定保存位置等选项[^1]。 #### 解决可能出现的字符编码问题 如果遇到由于字符集不匹配而导致的内容显示异常情况——即所谓的“乱码”,建议确认所使用的编辑器和支持工具均已配置成统一采用UTF-8作为默认编码标准;另外也可以尝试调整目标数据库本身的字符集设定以确保一致性[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值