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

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

导出附加结构

除了数据库和表,您还可以通过包含以下选项明确导出事件和例程定义

  • --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、基础设施和开发工具的文章。他目前与妻子和两只兔子住在柏林。他通常不必以第三人称写作,这对所有相关方来说都是一种解脱。
© . This site is unofficial and not affiliated with Prisma Data, Inc.