本文档说明如何在 MySQL 中导出数据库、表结构和表数据,包含两种常见方式:
mysqldump 导出适用于本地测试环境,也适合日常开发场景。
在 MySQL 中,常见的导出对象有以下几种:
包含:
适合:
包含:
适合:
只包含:
CREATE TABLEINSERT适合:
只包含:
INSERT INTO ...适合:
MySQL 原生导出通常使用 mysqldump。
基础格式:
mysqldump -h 主机 -P 端口 -u 用户 -p 数据库名 > 导出文件.sql
执行后,命令会提示输入密码。
注意:
-p后面通常不要直接加空格和密码。最常见写法就是-p,然后回车输入密码。
testdbmysqldump -h 127.0.0.1 -P 3306 -u root -p testdb > testdb.sql
这个文件通常会包含:
users 和 orders 两张表mysqldump -h 127.0.0.1 -P 3306 -u root -p testdb users orders > testdb_partial.sql
testdb 是数据库名users orders 是表名列表适合:
mysqldump -h 127.0.0.1 -P 3306 -u root -p --no-data testdb > testdb_schema.sql
--no-dataINSERT 数据适合:
mysqldump -h 127.0.0.1 -P 3306 -u root -p --no-data testdb users > users_schema.sql
mysqldump -h 127.0.0.1 -P 3306 -u root -p --no-create-info testdb > testdb_data.sql
--no-create-infoCREATE TABLE适合:
users 表的数据mysqldump -h 127.0.0.1 -P 3306 -u root -p --no-create-info testdb users > users_data.sql
下面是 mysqldump 中最常见、最实用的参数。
-h指定 MySQL 主机地址。
示例:
-h 127.0.0.1
常见值:
127.0.0.1:本机 TCP 连接localhost:本机,某些环境下可能走 socket192.168.1.10建议:
127.0.0.1localhost 因 socket/TCP 差异导致问题-P指定端口。
示例:
-P 3306
-u指定用户名。
示例:
-u root
-p提示输入密码。
示例:
-p
也可以写成:
-p123456
但不推荐,因为:
--databases显式告诉 mysqldump:后面跟的是数据库名。
示例:
mysqldump -h 127.0.0.1 -P 3306 -u root -p --databases testdb > testdb.sql
特点:
CREATE DATABASE 和 USE 数据库名如果你不用 --databases,通常只导出库内对象定义和数据,不一定包含建库语句。
--tables显式告诉 mysqldump:后面跟的是表名。
示例:
mysqldump -h 127.0.0.1 -P 3306 -u root -p testdb --tables users orders > partial.sql
虽然很多情况下可以省略,但写上会更清晰。
--no-data只导出结构。
--no-create-info只导出数据。
--where按条件导出数据。
users 表中 id > 100 的数据mysqldump -h 127.0.0.1 -P 3306 -u root -p --no-create-info testdb users --where="id > 100" > users_gt_100.sql
适合:
--single-transaction用于 InnoDB 表的一致性导出,尤其适合在线导出。
示例:
mysqldump -h 127.0.0.1 -P 3306 -u root -p --single-transaction testdb > testdb.sql
作用:
适合:
注意:
--routines导出存储过程和函数。
示例:
mysqldump -h 127.0.0.1 -P 3306 -u root -p --routines testdb > testdb_with_routines.sql
--triggers导出触发器。
示例:
mysqldump -h 127.0.0.1 -P 3306 -u root -p --triggers testdb > testdb_with_triggers.sql
--events导出事件。
示例:
mysqldump -h 127.0.0.1 -P 3306 -u root -p --events testdb > testdb_with_events.sql
--add-drop-table在每个 CREATE TABLE 前增加:
DROP TABLE IF EXISTS 表名;
示例:
mysqldump -h 127.0.0.1 -P 3306 -u root -p --add-drop-table testdb > testdb_drop_create.sql
适合:
注意:
--default-character-set指定导出连接使用的字符集。
示例:
mysqldump -h 127.0.0.1 -P 3306 -u root -p --default-character-set=utf8mb4 testdb > testdb_utf8mb4.sql
建议:
utf8mb4mysqldump \-h 127.0.0.1 \-P 3306 \-u root \-p \--databases testdb \--single-transaction \--default-character-set=utf8mb4 \> testdb_full.sql
mysqldump \-h 127.0.0.1 \-P 3306 \-u root \-p \--no-data \--default-character-set=utf8mb4 \testdb \> testdb_schema.sql
mysqldump \-h 127.0.0.1 \-P 3306 \-u root \-p \--no-create-info \--default-character-set=utf8mb4 \testdb \> testdb_data.sql
mysqldump \-h 127.0.0.1 \-P 3306 \-u root \-p \--no-create-info \testdb users \--where="created_at >= '2026-01-01'" \> users_2026.sql
Sequel Ace 是 macOS 上常见的 MySQL 可视化工具,适合不想记命令的场景。
打开 Sequel Ace 后填写:
127.0.0.1root3306testdb点击 Connect。
连接成功后,通常可以通过以下入口导出:
File / Export不同版本界面可能略有差异,但核心选项类似。
Sequel Ace 导出时通常会让你选择以下内容:
含义:
CREATE TABLE适合:
含义:
INSERT INTO适合:
含义:
DROP TABLE IF EXISTS适合:
注意:
含义:
USE testdb适合:
含义:
适合:
通常可以选择:
区别:
推荐选择:
适合:
推荐选择:
适合:
推荐选择:
适合:
适合:
注意:
适合:
优点:
适合:
建议明确指定:
utf8mb4--default-character-set=utf8mb4mysqldump -h 127.0.0.1 -P 3306 -u root -p --databases testdb --single-transaction --default-character-set=utf8mb4 > testdb_full.sql
mysqldump -h 127.0.0.1 -P 3306 -u root -p --no-data testdb > testdb_schema.sql
mysqldump -h 127.0.0.1 -P 3306 -u root -p --no-create-info testdb > testdb_data.sql
mysqldump -h 127.0.0.1 -P 3306 -u root -p testdb users orders > partial.sql