260801-mysql5.7.26.压缩导出.md

MySQL 5.7.26 可以直接使用官方自带的 mysqlpump.exe 压缩导出。它支持 ZLIBLZ4 两种压缩算法。

案例

服务端执行,解决异常问题

mysqlpump: [WARNING] (13) Can’t get stat of ‘.\mysql\general_log.CSV’ (Errcode: 2 - No such file or directory)
mysqlpump: [ERROR] (13) Can’t get stat of ‘.\mysql\general_log.CSV’ (Errcode: 2 - No such file or directory)

1
2
3
4
5
6
7
8
9
10
11
12
## 关闭
SET GLOBAL general_log=OFF;
SET GLOBAL slow_query_log=OFF;
SET GLOBAL log_output='FILE';

SELECT @@GLOBAL.general_log, @@GLOBAL.log_output, @@GLOBAL.slow_query_log;


## 生产环境可以保持
SET GLOBAL general_log = OFF;
SET GLOBAL log_output = 'FILE';
SET GLOBAL slow_query_log = ON;

含义是:

  • general_log = OFF:关闭所有 SQL 通用日志,避免日志量巨大和性能下降。
  • log_output = FILE:日志写到文件,不写入损坏的系统 CSV 表。
  • slow_query_log = ON:保留慢查询日志,用于排查慢 SQL。

这是比较合理的生产配置,无须为了导出结束而恢复成 TABLE

算法文件对比

假设原始 SQL 文件为 10 GB,实际结果可能类似:

算法 可能的压缩大小 导出压缩耗时
LZ4 3~5 GB 较短
ZLIB 2~4 GB 较长

推荐:ZLIB 压缩导出

在 Windows CMD 或 PowerShell 中执行:

1
2
3
4
5
6
7
8
9
10
"C:\Program Files\MySQL\MySQL Server 5.7\bin\mysqlpump.exe" ^
-h 127.0.0.1 ^
-P 3306 ^
-u root ^
-p ^
--single-transaction ^
--default-character-set=utf8mb4 ^
--compress-output=ZLIB ^
--result-file="D:\mysql-backup\km_database.sql.zlib" ^
km_database

执行后生成:

1
D:\mysql-backup\km_database.sql.zlib

这里建议使用 --result-file,不要在 PowerShell 中写:

1
mysqlpump ... > backup.zlib

因为 Windows PowerShell 的输出重定向可能改变输出编码;官方也建议 Windows 使用 --result-file

指定表并使用 LZ4 压缩

1
2
3
4
5
6
7
8
9
10
11
12
13
"C:\Program Files\MySQL\MySQL Server 5.7\bin\mysqlpump.exe" ^
-h 127.0.0.1 ^
-P 3306 ^
-u root ^
-p ^
--single-transaction ^
--default-character-set=utf8mb4 ^
--compress-output=LZ4 ^
--result-file="D:\mysql-backup\km_tables.sql.lz4" ^
km_database ^
product_auto_task_data ^
product_auto_task_data_detail ^
km_device

这条命令只导出:

1
2
3
km_database.product_auto_task_data
km_database.product_auto_task_data_detail
km_database.km_device

LZ4ZLIB 都是 MySQL 5.7 mysqlpump 支持的输出压缩算法。

解压备份

MySQL 5.7.26 自带 zlib_decompress.exe

1
2
3
"C:\Program Files\MySQL\MySQL Server 5.7\bin\zlib_decompress.exe" ^
"D:\mysql-backup\km_database.sql.zlib" ^
"D:\mysql-backup\km_database.sql"

zlib_decompress 从 MySQL 5.7.10 开始提供,因此 5.7.26 可以使用。

导入恢复

1
2
3
4
5
6
7
8
"C:\Program Files\MySQL\MySQL Server 5.7\bin\mysql.exe" ^
-h 127.0.0.1 ^
-P 3306 ^
-u root ^
-p ^
--default-character-set=utf8mb4 ^
km_database ^
< "D:\mysql-backup\km_database.sql"

LZ4 方式

LZ4 一般压缩速度更快,也可以直接使用:

1
2
3
4
5
6
7
mysqlpump.exe ^
-u root ^
-p ^
--single-transaction ^
--compress-output=LZ4 ^
--result-file="D:\mysql-backup\km_database.sql.lz4" ^
km_database

解压:

1
2
3
lz4_decompress.exe ^
"D:\mysql-backup\km_database.sql.lz4" ^
"D:\mysql-backup\km_database.sql"

因此,你这个版本优先使用:

1
mysqlpump.exe + --compress-output=ZLIB + --result-file

mysqldump + 7-Zip 更直接,不需要先生成未压缩的 SQL 文件。