MySQL / 简短指南

如何在 MySQL 中导出数据库和表模式

分享到

简介

在关系型数据库中,数据库模式 定义了数据库的结构及其组成部分,例如表、字段和索引。在许多情况下提取和导出这些信息非常有用,包括备份、迁移到新环境、可视化数据结构以及在代码库中管理这些结构。

在本简短指南中,我们将讨论如何使用 mysqldump 命令导出 MySQL 数据库模式。虽然此实用程序可以从 MySQL 导出许多类型的数据,但本指南将重点介绍提取数据结构本身。

基本用法

从 MySQL 导出数据库模式所需的基本命令如下所示

mysqldump --user=USERNAME --host=HOSTNAME --password --no-data DATABASE > schema.sql

这里的选项可以分为两个不同的类别。

第一类定义了通用的基本连接信息,您需要提供这些信息才能连接到任何 MySQL 实用程序

  • --user= / -u: 您要用来进行身份验证的数据库用户名
  • --password / -p: 强制 mysqldump 提示输入密码以进行身份验证
  • --host= / -h: MySQL 所在位置的主机名或 IP 地址
  • --port= / -p: MySQL 监听的端口号

如果您连接到在默认配置中运行的本地 MySQL 实例,通常可以省略主机和端口选项。

第二类告诉 mysqldump 要导出什么

  • --no-data / -d: 这告诉实用程序只导出结构本身,而不是它们包含的记录

此外,第一个非选项参数(此处用单词“DATABASE”表示)表示要导出的确切数据库。

使用这些信息,您可以使用名为 sales_reporter 的有限用户导出名为 SALES 的数据库的模式,使用以下命令

mysqldump --user=sales_reporter --password --no-data SALES > sales_database_schema.sql

修改导出行为

上面讨论的基本用法将输出与所讨论数据库相关的每个结构。我们可以使用许多其他选项来修改此行为。

目标是多个数据库

您可以使用以下选项之一来修改导出将目标设为多少个数据库

  • --databases / -B: 将所有名称参数视为数据库名称。这允许您同时从多个数据库导出模式。
  • --all-databases / -A: 导出 MySQL 中的所有数据库(除了内部使用的 performance_schema 数据库除外)

因此要转储所有数据库,您可以使用

mysqldump --user=USERNAME --password --no-data --all-databases > all_schemas.sql

或者要转储来自三个不同数据库的结构,您可以使用

mysqldump --user=USERNAME --password --no-data --databases FIRST SECOND THIRD > three_db_schemas.sql

仅导出某些结构

您还可以通过在数据库名称之后命名要导出的特定表来减少导出的结构。

例如,如果 SALES 数据库中的三个表分别称为 EMPLOYEESTOREINVENTORY,则可以通过以下方式仅导出这些结构

mysqldump --user=USERNAME --password --no-data SALES EMPLOYEE STORE INVENTORY > some_sales_tables.sql

在此结构中,第一个参数始终被假定为数据库名称,所有其他命名参数都被视为该数据库中的表。因此,此用法与 --databases 选项不兼容,该选项会修改 mysqldump 对其他参数的解释方式。

导出其他结构

除了数据库和表之外,您还可以通过包含以下选项来显式导出事件和例程定义。

  • --routines / -R: 将存储过程和函数包含在导出的模式转储中。
  • --events / -E: 在输出中包含事件调度程序事件的定义。

例如,要包含数据库 SALES 的转储,其中包含这些额外的定义,您可以键入

mysqldump --user=USERNAME --password --no-data --routines --events SALES > all_sales_schemas.sql

其他相关选项

根据您的目标,一些额外的选项可能会有用,包括

  • --add-drop-database: 在每个 CREATE DATABASE 语句之前,向转储文件添加一个 DROP DATABASE 语句。这确保首先删除给定数据库的任何先前定义的结构,以避免冲突。
  • --single-transaction: 将事务隔离级别设置为 "可重复读",以帮助确保使用 InnoDB 等存储引擎时数据库状态更一致。这会在初始化转储时转储数据库的快照。

这些选项可以添加到您的模式转储命令中,而不会改变其他组件的基本语义或含义。

结论

能够导出您的模式使您能够将数据库结构保存到数据库本身之外。这在设置新环境、根据您的需求演化您的模式以及可视化您存储的信息的结构时很有用。

关于作者
Justin Ellingwood

Justin Ellingwood

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