语法
1
| mysqldump -h 数据库地址 -P 端口号 -u 用户名 -p 数据库名 表名 [可选参数] > 导出文件路径
|
样例
远程 MySQL 导出(非默认端口 + 字符集)
1 2 3 4
| # 远程地址192.168.1.100,端口3307,筛选id>500 或 dt='2026-02-26',指定utf8mb4避免中文乱码 mysqldump -h 192.168.1.100 -P 3307 -uroot -p --default-character-set=utf8mb4 testdb order --no-create-info --where="id > 500 OR dt = '2026-02-26'" > /tmp/order_filter.sql
--no-create-info 禁用表结构导出,只导出 INSERT 数据语句。
|
远程导出大表(InnoDB,不锁表 + 筛选 + 压缩)
1 2 3 4 5
| mysqldump -h 192.168.1.100 -P 3306 -uroot -p \ --default-character-set=utf8mb4 \ --single-transaction --quick --skip-lock-tables \ testdb user --no-create-info --where="id>100 OR dt='2026-02-27'" \ | gzip > /tmp/user_filter.sql.gz
|
本地导出表结构 + 完整 INSERT 语句
1
| mysqldump -uroot -p testdb user --complete-insert > /tmp/user_full.sql
|
只导出指定字段(id,name)且筛选条件
1
| mysqldump -uroot -p testdb user --no-create-info --columns="id,name" --where="dt='2026-02-27'" > /tmp/user_fields.sql
|
常用可选参数
基础连接参数
1 2 3 4 5 6 7
| 参数 作用 示例 -h, --host 指定 MySQL 服务器地址(本地默认 127.0.0.1) -h 192.168.1.100 -P, --port 指定 MySQL 端口(默认 3306,大写 P 避免和密码混淆) -P 3307 -u, --user 连接 MySQL 的用户名 -uroot -p, --password 密码(建议只写-p,回车输入,避免明文泄露) -p(不推荐-proot) --default-character-set 指定字符集(避免中文乱码,推荐 utf8mb4) --default-character-set=utf8mb4 -S, --socket 本地连接时指定 socket 文件(默认 /var/lib/mysql/mysql.sock) -S /tmp/mysql.sock
|
导出内容控制
1 2 3 4 5 6 7 8
| 参数 作用 示例 --no-create-info (-t) 只导出数据,不导出表结构(最常用) --no-create-info --no-data (-d) 只导出表结构,不导出数据 --no-data --create-db (-B) 导出时包含CREATE DATABASE语句(整库导出用) --create-db --tables 指定要导出的表(多表用空格分隔) --tables testdb user order --where (-w) 筛选导出数据(和 SQL 的 WHERE 一致) --where="id>100 OR dt='2026-02-27'" --columns (-c) 只导出指定字段(多字段用逗号分隔) --columns="id,name,dt" --ignore-table 排除指定表(整库导出时用) --ignore-table=testdb.log
|
性能优化参数
1 2 3 4 5 6 7
| 参数 作用 示例 --quick (-q) 逐行读取数据,不加载到内存(避免大表导出内存溢出) --quick --single-transaction InnoDB 表导出时开启事务,保证数据一致性(不锁表) --single-transaction --lock-tables (-l) MyISAM 表导出时锁表(避免导出过程中数据修改) --lock-tables --lock-all-tables (-x) 锁定所有表(整库导出一致性,高并发慎用) --lock-all-tables --skip-lock-tables 不锁表(InnoDB 优先用这个 + single-transaction) --skip-lock-tables --max_allowed_packet 设置最大数据包大小(大字段 / 大表导出) --max_allowed_packet=64M
|
数据格式 / 兼容参数
1 2 3 4 5 6 7
| 参数 作用 示例 --compact 精简导出格式(去掉注释、空行,减小文件体积) --compact --complete-insert (-c) 导出完整的 INSERT 语句(包含字段名,易读) --complete-insert --extended-insert (-e) 导出多行 INSERT(默认开启,减小文件体积) --extended-insert(关闭用--skip-extended-insert) --hex-blob 二进制字段(BLOB/TEXT)导出为十六进制(避免乱码) --hex-blob --quote-names (-Q) 表名 / 字段名用反引号包裹(避免关键字冲突) --quote-names --skip-add-drop-table 导出时不包含DROP TABLE语句(避免恢复时删表) --skip-add-drop-table
|
输出 / 压缩参数
1 2 3 4
| 参数 作用 示例 --compress (-C) 传输数据时压缩(远程导出减少网络带宽) --compress --result-file (-r) 指定导出文件路径(替代 >`,避免字符编码问题) --result-file=/tmp/user.sql 管道压缩 导出同时压缩(推荐,减小文件体积) `mysqldump ... | gzip > /tmp/user.sql.gz`
|
高级参数
1 2 3 4 5
| 参数 作用 示例 --master-data 导出时记录 binlog 位置(主从复制场景) --master-data=2(2 = 注释掉 binlog 语句,1 = 生效) --flush-logs 导出前刷新 binlog 日志(主从同步用) --flush-logs --dump-date 导出文件末尾添加导出时间(默认开启,关闭用--skip-dump-date) --skip-dump-date --force (-f) 忽略导出过程中的错误(比如表不存在) --force
|