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: 在输出中包含事件调度器(Event Scheduler)事件的定义

例如,要导出包含这些额外定义的 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、基础设施和开发工具的文章。他目前与妻子和两只兔子住在柏林。他通常不必以第三人称写作,这对所有相关方来说都是一种解脱。
© . All rights reserved.