分享到

概述

本文档描述了如何从 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 结尾)

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

mysqldump mydb > mydb.sql

提供数据库凭据

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

参数默认值描述
--host(短写:-hlocalhost服务器主机机器的地址
--port(短写:-p-MySQL 服务器正在监听的服务器主机机器端口

要对 MySQL 数据库服务器进行认证,你可以使用以下参数

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

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

mysql://opnmyfngbknppm:XXX@ec2-46-137-91-216.eu-west-1.compute.amazonaws.com: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(短写:-nfalse排除所有 DDL 语句,只导出数据。
--no-data(短写:-dfalse排除数据,只导出 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

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