分享到

概述

本文档介绍了如何从 MySQL 数据库中导出数据以及如何将数据导入到 MySQL 数据库中。您可以在官方 MySQL 文档 中了解更多相关信息。

使用 mysqldump 导出数据

mysqldump 是一个本地的 MySQL 命令行实用程序,您可以使用它从 MySQL 数据库中导出数据。要查看此命令的所有选项,请运行

mysqldump --help

请注意,您的 MySQL 安装 默认情况下包含 mysqldump,有时在 macOS 上包含在 /usr/local/mysql/bin 中。如果命令无法自动识别,您可以通过指向该目录 /usr/local/mysql/bin/mysqldump 来调用命令,或者 将其添加到您的 PATH 中,以便您可以运行 mysqldump 而不必指定目录。

来自 MySQL 文档

mysqldump 客户端实用程序执行逻辑备份,生成一组可以执行的 SQL 语句,以重现原始数据库对象定义和表数据。它转储一个或多个 MySQL 数据库以进行备份或转移到另一个 SQL 服务器。 mysqldump 命令还可以生成 CSV、其他分隔文本或 XML 格式的输出。

基本命令如下所示

mysqldump DB_NAME > OUTPUT_FILE

您需要将 DB_NAMEOUTPUT_FILE 占位符替换为您各自的

  • 您的 **数据库名称**
  • 所需 **输出文件** 的名称(应以 .sql 结尾,以确保最佳的互操作性)

例如,要从名为 mydb 的数据库中从本地 MySQL 服务器导出数据到名为 mydb.sql 的文件中,您可以使用以下命令

mysqldump mydb > mydb.sql

提供数据库凭据

您可以添加以下参数来指定 MySQL 数据库服务器的位置

参数默认描述
--host (short: -h)localhost服务器主机机器的地址
--port (short: -p)-服务器主机机器上 MySQL 服务器监听的端口

要对 MySQL 数据库服务器进行身份验证,您可以使用以下参数

参数默认描述
--user (short: -u)-数据库用户的名称。
--password (short: -p)-触发密码提示。

例如,如果您要从具有以下 连接字符串 的 MySQL 数据库中导出数据

mysql://opnmyfngbknppm:[email protected]:5432/d50rgmkqi2ipus

您可以使用以下 mysqldump 命令

mysqldump --host ec2-46-137-91-216.eu-west-1.compute.amazonaws.com --port --user opnmyfngbknppm --password d50rgmkqi2ipus > backup.sql

请注意,**此命令将触发一个提示,您需要在其中指定提供的用户的密码**。

控制输出

在某些情况下,您可能不想转储整个数据库,例如,您可能想要

  • 仅转储实际数据,但不包括 DDL(即定义数据库模式的 SQL 语句,如 CREATE TABLE 等)
  • 仅转储 DDL,但不包括实际数据
  • 排除特定表

以下是您可以在这些情况下使用的几个命令行选项的概述

参数默认描述
--no-create-db (short: -n)false排除任何 DDL 语句,并且仅导出数据。
--no-data (short: -d)false排除数据,并且仅导出 DDL 语句。
--tables默认情况下包括所有表明确指定要转储的表的名称。
--ignore-table-从转储中排除特定表。

从 SQL 文件导入数据

使用 mysqldump 将 MySQL 数据库导出为 SQL 文件后,您可以通过将 SQL 文件馈送到 mysql 来恢复数据库的状态

mysql DB_NAME < INPUT_FILE

请注意,您的 MySQL 安装 默认情况下包含 mysql,有时包含在 macOS 上的 /usr/local/mysql/bin 中。如果系统无法自动识别该命令,您可以通过指向该目录 /usr/local/mysql/bin/mysql 来调用该命令,或者 将其添加到您的 PATH 中,以便您无需指定目录即可运行 mysql

您需要将 DB_NAMEINPUT_FILE 占位符替换为相应的值,用于

  • 您的 数据库名称(必须事先创建具有该名称的数据库!)
  • 目标 输入文件 的名称(可能以 .sql 结尾)

例如

mysql mydb < mydb.sql

要进行身份验证,您可以使用上面讨论的 --user--password 选项

mysql --user root --password mydb < mydb.sql

要事先创建数据库,您可以使用以下 SQL 语句

CREATE DATABASE mydb;

结论

从 MySQL 导出数据并再次导入以重新创建数据结构并填充数据库是迁移数据、备份和恢复或准备复制的好方法。了解 mysqldumpmysql 工具如何协同工作以完成此任务将有助于您跨数据库边界传输数据。

关于作者
Justin Ellingwood

Justin Ellingwood

Justin 自 2013 年以来一直在撰写有关数据库、Linux、基础设施和开发人员工具的文章。他目前与妻子和两只兔子住在柏林。他通常不必以第三人称写作,这对所有相关方来说都是一种解脱。