mysql镜像配置备份压缩可以通过调整备份命令参数、修改镜像内mysql配置以及优化备份脚本三种方式实现,不同场景下选择对应的配置方法即可满足需求。

一、通过mysqldump命令直接设置压缩
如果是通过mysqldump工具执行备份,直接在备份命令中添加压缩参数即可,这种方式不需要修改镜像本身的配置,适合临时备份或者轻量备份场景。
常用的压缩方式是通过管道将备份输出传递给压缩工具,比如使用gzip压缩:
# 执行mysql备份并通过gzip压缩,输出为.sql.gz格式文件 mysqldump -h 127.0.0.1 -u root -p --all-databases | gzip > /backup/all_db_$(date +%Y%m%d).sql.gz
如果需要更高的压缩率,可以替换为bzip2工具,不过压缩速度会相对慢一些:
# 使用bzip2压缩备份文件,压缩率更高但速度更慢 mysqldump -h 127.0.0.1 -u root -p --all-databases | bzip2 > /backup/all_db_$(date +%Y%m%d).sql.bz2
二、修改mysql镜像配置文件开启压缩
如果希望镜像启动后默认支持备份压缩相关配置,可以修改mysql的配置文件my.cnf,然后重新构建镜像或者挂载配置文件启动镜像。
首先在本地创建自定义的my.cnf配置文件,添加如下内容:
[mysqld] # 开启二进制日志压缩,减少日志文件体积 binlog_transaction_compression=ON # 设置二进制日志压缩级别,1-9可选,数值越高压缩率越高 binlog_transaction_compression_level_zstd=3 [mysqldump] # 设置mysqldump默认压缩算法为zstd compress=zstd # 设置压缩级别 zstd_compression_level=3
启动mysql镜像时挂载该配置文件到镜像内的/etc/mysql/my.cnf路径:
docker run -d --name mysql-backup -v /local/path/my.cnf:/etc/mysql/my.cnf -v /local/backup:/backup -e MYSQL_ROOT_PASSWORD=your_password mysql:8.0
三、编写镜像内备份脚本固化配置
如果需要长期执行定时备份,可以在镜像内编写备份脚本,将压缩参数固化到脚本中,避免每次执行备份都需要手动输入参数。
创建备份脚本backup.sh:
#!/bin/bash
# 备份目录
BACKUP_DIR="/backup"
# 当前日期
DATE=$(date +%Y%m%d_%H%M%S)
# 备份文件名
BACKUP_FILE="${BACKUP_DIR}/db_backup_${DATE}.sql.gz"
# 执行备份并压缩
mysqldump -h localhost -u root -p"${MYSQL_ROOT_PASSWORD}" --all-databases | gzip > "${BACKUP_FILE}"
# 删除7天前的备份文件
find "${BACKUP_DIR}" -name "db_backup_*.sql.gz" -mtime +7 -delete
将脚本复制到镜像内并赋予执行权限,之后可以通过定时任务或者手动执行脚本完成压缩备份:
# 赋予脚本执行权限 chmod +x /backup.sh # 执行备份脚本 /backup.sh
四、不同压缩方式对比
可以根据业务需求选择合适的压缩方式,以下是常见压缩方式的对比:
| 压缩方式 | 压缩率 | 压缩速度 | 适用场景 |
|---|---|---|---|
| gzip | 中等 | 快 | 日常备份,对速度要求高 |
| bzip2 | 高 | 慢 | 归档备份,对存储空间敏感 |
| zstd | 高 | 快 | 需要平衡压缩率和速度的场景 |
注意事项
- 压缩级别越高,CPU占用越高,需要根据服务器性能调整,避免影响mysql正常服务
- 备份文件压缩后恢复时需要先解压,恢复命令示例:
gunzip < backup.sql.gz | mysql -u root -p - 如果镜像使用的是非root用户启动,需要确保备份目录有写入权限