mysqldump导出单表或多表直接在数据库名后空格列出表名,如mysqldump -u root -p mydb users orders;排除表用--ignore-table=mydb.tablename;只导结构用--no-data,乱码需统一utf8mb4字符集。

mysqldump 导出单个或多个表时怎么写命令
直接指定表名就行,不需要额外开关——mysqldump 默认就支持在数据库名后跟表名列表。漏掉数据库名是常见错误,会导致 Unknown database 或直接报错找不到表。
- 导出一个表:
mysqldump -u root -p mydb users - 导出多个表:
mysqldump -u root -p mydb users orders products - 注意:表名之间用空格分隔,不能用逗号,也不能加引号(除非表名含特殊字符)
- 如果表名是 MySQL 保留字(比如
order),必须用反引号:mysqldump -u root -p mydb `order`
跳过某些表(比如日志表)该用什么参数
用 --ignore-table,它接受“数据库名.表名”完整格式,且可重复使用多次。别误用成 --exclude-table(不存在)、也别漏掉数据库前缀,否则参数会被忽略。
解析 MySQL 8.0 的 DDL 脚本,并将表结构导出为 Excel 格式。适用于用户需将 MySQL 的 `CREATE TABLE` 语句转换为结构化的 Excel 文件场景,导出内容包含字段名、数据类型、长度及精度等信息。支持多张表的批量处理,每张表对应 Excel 中的一个独立工作表。适用于数据库文档编写、数据字典生成及模式分析等任务。
- 排除两个表:
mysqldump -u root -p mydb --ignore-table=mydb.audit_log --ignore-table=mydb.tmp_report - 这个参数只跳过数据和建表语句,不影响其他表的导出结果
- 不支持通配符(比如
mydb.log_%),想批量跳过得写全名或改用脚本生成命令
导出时要不要加 --no-create-info 或 --skip-inserts
看你要的是结构、数据,还是两者都要。默认行为是两者都导出,但很多场景其实只需要其一。
- 只要建表语句(不含数据):
--no-data(推荐)或--no-create-info(效果不同,慎用) - 只要 INSERT 语句(已有表结构):
--no-create-info -
--skip-inserts是错的——它根本不是mysqldump的合法参数,会报错unrecognized option '--skip-inserts' - 性能上,加
--no-data几乎秒出;而大表加--no-create-info能省下解析结构的时间,但 INSERT 还是照常生成
中文乱码或 emoji 存不进去怎么办
本质是字符集没对齐,重点检查三处:客户端连接、源表定义、导出文件编码。只设 --default-character-set=utf8mb4 不够,还可能被 MySQL 服务端配置覆盖。
- 强制指定连接字符集:
mysqldump --default-character-set=utf8mb4 -u root -p mydb users - 确认源表用的是
utf8mb4:查SHOW CREATE TABLE users,看CHARSET=utf8mb4和COLLATE=utf8mb4_* - 导出后用
file -i dump.sql看编码,如果是charset=binary,说明中间被转码污染了 - 避免用 Windows 记事本打开/保存 dump 文件——它会偷偷转成 GBK,再导入就全乱了
sql_mode=STRICT_TRANS_TABLES 下导出的 INSERT 在老版本里可能报错,但这得看具体环境,没法一概而论。

















