HOWTO · MySQL
使用 Mysqldump 导出 MySQL 数据库
我们将学习如何使用 mysqldump 命令行实用程序导出 MySQL 数据库。我们还将学习如何从特定数据库中导出表。
本页内容
使用 mysqldump 将 MySQL 数据库导出为 SQL 文件。添加表名可以限制导出范围;使用 --databases 或 --all-databases 可以扩大范围;使用 --no-data 可以只导出结构,不包含数据行。示例说明了命令参数和密码提示,但不能证明转储文件可以成功还原。
使用 mysqldump 导出 MySQL 数据库
mysqldump 是一个命令行工具,可将 MySQL 数据库导出为 SQL 语句。转储文件可以包含表定义和数据、选定的表、多个指定的数据库、所有数据库,也可以只包含数据库结构。下面的命令会将转储内容写入文件,但不能验证生成的备份是否可以还原。
了解 mysqldump 的语法和选项
典型命令的格式如下:mysqldump -u USER -p [OPTIONS] DATABASE [TABLE ...] > FILE.sql。请将大写占位符替换为你的账户、数据库、可选的表名和目标路径。数据库名称必须放在表名之前。Shell 运算符 > 会将标准输出重定向到目标文件;如果该文件已存在,内容会被覆盖。若要保留现有备份,请选择新路径,或先移走原文件。
-u 选项用于指定 MySQL 用户名。单独使用 -p 时,工具会提示你输入密码;不要把密码直接写在 -p 后面,否则它可能出现在 Shell 历史记录或进程信息中。--no-data 选项会省略表中的数据行,--databases 用于选择指定的数据库,--all-databases 用于选择所有数据库。有关其他选项以及你所安装版本的详细信息,请参阅 MySQL 的 mysqldump 参考手册。
本文改写中的这个独立 Shell 示例尚未执行。根据 Shell 的重定向语义,它会将示例文本写入临时文件,再显示该文件的内容;它不会连接 MySQL,也不会运行 mysqldump。
本节中的代码以及显示的标签或输出仍为英文。
work_dir="$(mktemp -d)"
trap 'rm -rf "$work_dir"' EXIT
printf '%s\n' 'CREATE TABLE customer (id INT);' > "$work_dir/person.sql"
cat "$work_dir/person.sql"
导出一个数据库
要导出一个数据库,请运行 mysqldump -u root -p person > person_backup.sql。出现提示时,输入 root 的密码。文件名相对于命令当前所在的目录;若要指定具体位置,可以使用 /backups/person_backup.sql 这样的绝对路径。请确认该账户有权读取数据库,并且目标目录可写。
导出选定的表
先写数据库名称,再写要包含的每个表名。导出一个表时,使用 mysqldump -u root -p person customer > customer_table.sql。导出两个表时,使用 mysqldump -u root -p person customer employee > customer_employee.sql。默认情况下,这些命令会导出所选表的定义和数据。如果需要其他行为,请添加适用于你所用 MySQL 版本的文档中所述选项。
导出多个或所有数据库
导出一个或多个指定数据库时,请将 --databases 放在数据库名称之前,例如:mysqldump -u root -p --databases person courses > person_courses.sql。此选项会在转储文件中包含数据库创建语句,便于导入这些指定的数据库。
要导出该账户可访问的所有数据库,请使用拼写正确的 --all-databases 选项:mysqldump -u root -p --all-databases > all_databases.sql。账户权限决定了哪些数据库和对象可以包含在导出内容中。完整转储文件可能包含敏感数据,请将其保存在受保护的位置。
仅导出数据库结构,不包含数据
使用 --no-data 可以导出表定义而不包含数据行:mysqldump -u root -p --no-data person > person_structure.sql。如果你需要用于开发或文档编写的结构副本,这种方式会很有用。该命令仍会连接 MySQL 服务器,并且需要适当的访问权限;它不能在不连接服务器的情况下转换现有文件。
总结
请根据导出范围选择命令:完整导出一个数据库时指定数据库名称;选择表时在数据库名称后添加表名;导出指定数据库时使用 --databases;导出服务器范围内的所有数据库时使用 --all-databases;仅导出结构、不包含数据行时使用 --no-data。请在提示时输入密码,并选择能安全保存转储文件的位置。命令成功运行只表示生成了转储文件;将其作为备份使用前,还应单独测试还原过程。