127 lines
6.3 KiB
Plaintext
127 lines
6.3 KiB
Plaintext
---
|
|
title: 数据库导出
|
|
description: 将一个或多个数据库的结构、数据和可读取对象流式导出为 SQL 文件。
|
|
---
|
|
|
|
数据库导出会生成可审阅的 SQL 脚本,用于小型备份、迁移、测试数据准备或高风险操作前留档。它可以导出单个数据库/Schema,也可以按连接批量导出多个数据库。
|
|
|
|
<Callout type="info">SQL 导出是逻辑导出,不等同于数据库原生物理备份。大型生产库、时间点恢复、增量备份或严格一致性要求,应优先使用数据库官方备份工具;MySQL、PostgreSQL 和 openGauss 的定时一致性备份可参阅 [数据库备份](/cn/docs/database-backup)。</Callout>
|
|
|
|
## 可以导出的内容
|
|
|
|
| 内容 | 说明 |
|
|
| --- | --- |
|
|
| 表结构 | `CREATE TABLE`、字段、主键、索引、约束以及驱动可读取的 DDL |
|
|
| 表数据 | 按批读取并生成 `INSERT` 语句,不需要先把整表加载到内存 |
|
|
| 数据库对象 | 视图、序列、扩展、存储过程、函数、触发器、事件等;具体范围取决于数据库和源码可见性 |
|
|
| 创建数据库 | MySQL 可选生成 `CREATE DATABASE IF NOT EXISTS` 和 `USE` 前导脚本 |
|
|
| 导入辅助语句 | 根据引擎生成外键检查、identity 写入、例程分隔符等必要的 setup/收尾语句 |
|
|
|
|
启用“仅选中表”时,表结构和数据只处理所选表。例程等 Schema 级对象不会因为选择少量表而被一并带出;对象导出始终受当前数据库能力限制。
|
|
|
|
openGauss 导出目前不会生成 `CREATE SEQUENCE`、`ALTER SEQUENCE ... OWNED BY` 和 `setval`,恢复后自增计数器会从 1 开始,自定义序列也会缺失;同样因为相关处理仅适用于 PostgreSQL,存在循环外键的 Schema 无法恢复。
|
|
|
|
## 单库导出
|
|
|
|
<Steps>
|
|
<Step>
|
|
### 选择连接和数据库
|
|
|
|
选择数据库以及 Schema(如适用),再勾选需要导出的表。
|
|
|
|
</Step>
|
|
<Step>
|
|
### 配置内容和 DDL 选项
|
|
|
|
选择结构、数据、对象、删除已存在表、MySQL 创建数据库和自增起始值处理。
|
|
|
|
</Step>
|
|
<Step>
|
|
### 选择输出位置
|
|
|
|
Desktop 选择本地 `.sql` 路径;Docker/Web 在服务器临时目录生成文件,完成后由浏览器下载。
|
|
|
|
</Step>
|
|
<Step>
|
|
### 后台生成并检查结果
|
|
|
|
进度显示准备阶段、当前对象、对象序号、导出行数、错误和取消状态。任务可以保留在进度中心继续观察。
|
|
|
|
</Step>
|
|
</Steps>
|
|
|
|
Desktop 导出成功后可以从任务结果直接在文件管理器中打开输出文件所在目录。Web 下载完成后,服务器临时文件会被清理。
|
|
|
|
## 导出所有数据库
|
|
|
|
启用“导出所有数据库”后,可以搜索并选择当前连接中的多个数据库:
|
|
|
|
- 非 Schema 型数据库通常每个数据库生成一个 `.sql` 文件
|
|
- PostgreSQL 等 Schema 感知数据库会为选中数据库下的每个 Schema 建立导出计划;一个数据库包含多个 Schema 时,文件名包含数据库和 Schema
|
|
- Desktop 选择输出目录,文件按计划逐个写入
|
|
- Docker/Web 在服务器逐个生成文件并触发浏览器下载
|
|
- 任一计划项失败或被取消时,后续计划停止;已完成的文件不会自动删除
|
|
|
|
“所有数据库”是多个逻辑导出的串行编排,不是单个跨库事务,也不提供整个实例的一致时间点快照。
|
|
|
|
## 结构选项
|
|
|
|
### 删除已存在表
|
|
|
|
启用后,会在对应 `CREATE TABLE` 前写入数据库适配的 `DROP TABLE IF EXISTS`。执行导出文件时,这会删除目标表及其数据,应谨慎使用。
|
|
|
|
### MySQL 创建数据库
|
|
|
|
MySQL 可以在文件开头加入 `CREATE DATABASE IF NOT EXISTS` 和 `USE`。导入账号需要相应权限;默认关闭,避免脚本意外创建或切换数据库。
|
|
|
|
### MySQL 自增起始值
|
|
|
|
默认保留表级 `AUTO_INCREMENT=N`。启用“省略自增值”后,DBX 只移除表选项中的起始值,不会移除字段本身的 `AUTO_INCREMENT` 属性,适合在新环境中重新初始化序列位置。
|
|
|
|
## 数据写入和一致性
|
|
|
|
DBX 使用分页或流式读取,把数据分批写入输出文件。交互式导出的批大小当前固定为 1000 行;实际 `INSERT` 形态会根据数据库能力选择多行或单行语句。
|
|
|
|
导出实现会尽量:
|
|
|
|
- 对 MySQL 临时关闭并在末尾恢复外键检查
|
|
- 对需要的 identity 列生成允许显式写入的包裹语句
|
|
- 正确处理字符串、日期、JSON、数组、二进制和 `NULL` 等字面量
|
|
- 对存储过程和函数生成数据库需要的分隔符或批次边界
|
|
- 在支持的连接上使用稳定会话读取,减少同一表批次间的漂移
|
|
|
|
交互式 SQL 导出仍不能保证所有数据库、所有对象都位于同一个全局快照。需要一致性备份时使用 [数据库备份](/cn/docs/database-backup) 或数据库原生工具。
|
|
|
|
## 错误和取消
|
|
|
|
- 普通导出在某个表或对象无法读取时,会在允许的路径中把错误写成 SQL 注释并继续;严重的元数据、连接或文件错误会终止任务
|
|
- 取消会在对象边界或数据批次之间生效
|
|
- Desktop 已写入的部分文件可能保留,需要在复用前检查完整性
|
|
- Web 失败或取消时会清理服务器临时文件,不触发成功下载
|
|
- 导出成功只表示文件生成完成,不代表它已在目标数据库成功恢复
|
|
|
|
## 恢复和验证
|
|
|
|
可以使用 [SQL 文件执行](/cn/docs/sql-file) 预览并运行导出的脚本。恢复前应检查:
|
|
|
|
- 目标数据库类型和版本是否兼容
|
|
- 文件是否包含 `DROP TABLE`、`CREATE DATABASE` 或大批量 `INSERT`
|
|
- 账号是否有建表、对象创建和数据写入权限
|
|
- 导入后表数、行数、索引、约束、序列和关键对象是否符合预期
|
|
|
|
<Callout type="warn">导出文件可能包含密码哈希、令牌、个人信息和业务敏感数据。不要把未脱敏文件提交到公开仓库或发送到不可信环境。</Callout>
|
|
|
|
## 相关功能
|
|
|
|
<Cards>
|
|
<Card title="数据库备份" href="/cn/docs/database-backup">
|
|
在 Desktop 中为 MySQL、PostgreSQL 和 openGauss 配置定时一致性 SQL 备份。
|
|
</Card>
|
|
<Card title="SQL 文件执行" href="/cn/docs/sql-file">
|
|
预览、批量执行并检查 SQL 文件结果。
|
|
</Card>
|
|
<Card title="数据传输" href="/cn/docs/data-transfer">
|
|
不落地 SQL 文件,直接在连接之间复制表数据。
|
|
</Card>
|
|
</Cards>
|