mysql如何实现数据库备份与压缩导出_结合Linux管道符操作

P粉602998670

P粉602998670

2026-04-16

749人浏览

原创

mysqldump 通过管道直接 | gzip 压缩导出,避免生成中间大文件;支持 --single-transaction 保证一致性、pv 实时监控进度、--ignore-table 等参数灵活过滤,并配合 find 定期清理旧备份。

mysql如何实现数据库备份与压缩导出_结合linux管道符操作

mysqldump 直接配合 gzip 压缩导出,避免生成中间大文件

MySQL 本身不内置压缩导出功能,但 Linux 管道能让 mysqldump 的标准输出直接喂给 gzip,跳过写入磁盘的 .sql 明文文件。这对磁盘空间紧张或备份大库(比如几十 GB)的场景很关键——否则先 dump 出几百 MB 的 SQL,再 gzip,既耗空间又多一次 I/O。

实操命令示例:

mysqldump -u root -p'yourpass' --single-transaction --routines --triggers mydb | gzip > mydb_$(date +%F).sql.gz

注意点:

  • --single-transaction 对 InnoDB 表保证一致性快照,但对 MyISAM 无效(需加 --lock-all-tables
  • -p 后不带空格直接跟密码,虽方便但会出现在进程列表里(ps aux 可见),生产环境建议用 ~/.my.cnf 配置文件存凭证
  • gzip 默认压缩级别是 6,如需更快可加 -1(最低压缩比),要更小体积可加 -9(但 CPU 占用明显上升)

用 pv 实时查看导出进度和速率

mysqldump | gzip 执行时看不到进度,尤其导出上百 GB 库时容易误判是否卡死。加 pv(pipe viewer)就能实时显示已处理字节数、速率和预估剩余时间。

先确认已安装:apt install pv(Debian/Ubuntu)或 yum install pv(CentOS/RHEL)

带进度的备份命令:

mysqldump -u root -p'yourpass' mydb | pv | gzip > mydb_$(date +%F).sql.gz

常见问题:

宝塔Linux面板11.8.1
宝塔Linux面板11.8.1

宝塔Linux面板11.8.1为官网当前正式版,新增AI建站能力并经过宝塔网站工程师深度调教,开放自定义AI功能API,同时对WAF进行界面重构和深度优化,提升拦截能力与运维效率。

下载
  • 如果 pv 报 “No size specified” 且进度条不动,是因为 mysqldump 输出长度未知;可加 -w 参数粗略估算(如 pv -w 2G),但不精确,实际更推荐直接看速率数字(KB/s、MB/s)判断是否正常
  • pv 本身几乎不增加延迟,但会占用少量 CPU,对高负载数据库服务器影响轻微

排除特定表或只导结构不导数据,减少备份体积

有些表(如日志表、临时统计表)没必要每次全量备份,或者只想备份表结构用于迁移验证。这时靠 mysqldump 的过滤参数比后期用 sedawk 处理压缩包更高效(因为不进入管道前就筛掉)。

常用组合:

  • 跳过某张大表:mysqldump ... mydb --ignore-table=mydb.large_log_table | gzip > backup.sql.gz
  • 只导结构(无 INSERT):mysqldump ... mydb --no-data | gzip > schema_only.sql.gz
  • 只导数据(无 CREATE TABLE):mysqldump ... mydb --no-create-info | gzip > data_only.sql.gz

注意:--ignore-table 必须写成 db_name.table_name 格式,漏掉库名会静默失效;多个表要重复写多次该参数,不能用逗号分隔。

定时自动备份 + 保留最近 7 天文件,防止磁盘撑爆

单次手动执行没问题,但长期运行必须加清理逻辑,否则 *.sql.gz 文件越积越多。Linux 的 find 配合 -mtime 最可靠。

完整脚本片段(可放入 /etc/cron.daily/ 或 crontab):

#!/bin/bash
BACKUP_DIR="/backup/mysql"
DATE=$(date +%F)
mysqldump -u root -p'yourpass' --single-transaction mydb | gzip > "$BACKUP_DIR/mydb_$DATE.sql.gz"
find "$BACKUP_DIR" -name "mydb_*.sql.gz" -mtime +7 -delete

关键细节:

  • -mtime +7 表示“修改时间超过 7 天”,注意不是“创建时间”;mysqldump 写入完成即更新 mtime,所以语义正确
  • 务必先测试 find ... -delete 是否真能匹配到目标文件,可先用 -print 替代 -delete 看输出
  • 脚本中所有路径、密码、库名都应变量化或抽到配置文件,避免硬编码泄露风险

管道压缩这事看似简单,真正上线时最容易栽在权限(如 mysqldump 用户没 SELECT 权限)、磁盘满(忘了清理旧备份)、或时区导致 $(date) 生成的文件名在跨天 cron 中错乱——这些地方比语法更值得盯紧。

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

2023.06.20

1118

6

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

2023.06.21

754

5

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.18

472

5

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.19

1375

5

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.25

1880

4

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2023.08.08

618

3

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.11

2245

4

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

2023.08.14

1964

7

mysql事务隔离级别
mysql事务隔离级别

mysql规范中定义了四种事务隔离级别,不同的隔离级别对事务的处理有所不同。本专题为大家提供mysql事务隔离级别相关的文章内容,大家可以免费体验。

2023.08.16

2375

11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL vs MySQL
PostgreSQL vs MySQL

共1课时 | 123人学习

使用phpenv集成环境安装极致CMS
使用phpenv集成环境安装极致CMS

共2课时 | 222人学习

phpEnv手册
phpEnv手册

共0课时 | 0人学习