可直接用 zcat 或 gunzip -c 解压并管道导入 mysql,无需落地文件;适用于 sql 类(如 backup.sql.gz)和 csv/tsv 类(需 load data local infile)压缩文件,要求客户端和服务端启用 local_infile,注意权限与语句兼容性。

可以直接用 zcat(或 gunzip -c)解压输出到标准输出,再通过管道重定向给 MySQL 客户端执行导入,全程不落地、不生成中间文件。
适用场景:SQL 类 gz 文件(如 backup.sql.gz)
这类文件本质是压缩的 SQL 脚本,解压后可直接被 MySQL 执行:
- 命令结构简洁:`zcat file.sql.gz | mysql -u用户 -p密码 -D数据库名`
- 无需提前解压,节省磁盘空间和 I/O 时间
- 适合自动化脚本或资源受限环境(如容器、小内存服务器)
- 注意:MySQL 用户需有目标库的写权限,且 SQL 文件中不能含交互式语句(如 `USE db;` 可能被忽略,建议显式指定 `-D`)
适用场景:CSV/TSV 类 gz 文件(需 LOAD DATA)
若压缩的是纯数据文本(如 user.csv.gz),需配合 LOAD DATA LOCAL INFILE '/dev/stdin':
- 命令示例:
zcat user.csv.gz | mysql -h127.1 -P2828 -umyuser -pmypass -Dtest -e "LOAD DATA LOCAL INFILE '/dev/stdin' INTO TABLE users FIELDS TERMINATED BY ',';" - 关键前提:MySQL 客户端启用
--local-infile=1(默认可能关闭),服务端需开启local_infile=ON - 字段分隔符、行结束符、是否跳过首行等,按实际数据结构调整参数
兼容性与替代写法
部分系统无 zcat,可用 gunzip -c 替代;Windows 下推荐安装 Git for Windows 或 WSL 后使用相同语法:
gunzip -c data.sql.gz | mysql -uroot -pmydb- 加
-v参数可查看进度(如zcat -v file.gz),但会混入 stderr,生产环境慎用 - 若导入中途失败,管道会自动中断,不会写入脏数据
这种方式把解压和导入合为一个原子操作,既避免临时文件残留,又减少出错环节。











