mysql如何使用脚本实现备份_mysql自动化备份示例

来源:这里教程网 时间:2026-02-28 20:41:08 作者:

MySQL 可以通过 Shell 脚本配合

mysqldump
命令实现自动化备份,核心是定时执行导出 + 压缩 + 清理旧备份三步操作。

基础备份脚本(单库 + 压缩)

以下是一个实用的备份脚本示例(保存为

backup_mysql.sh
):

注意:需提前创建备份目录(如

/data/backup/mysql
),并赋予脚本可执行权限(
chmod +x backup_mysql.sh

使用
mysqldump
导出指定数据库(含结构和数据),加上
--single-transaction
保证 InnoDB 一致性
gzip
实时压缩,节省空间
文件名包含日期(
YYYYMMDD_HHMMSS
),便于识别和归档

脚本内容:

#!/bin/bash
DB_USER="root"
DB_PASS="your_password"
DB_NAME="myapp"
BACKUP_DIR="/data/backup/mysql"
DATE=$(date +%Y%m%d_%H%M%S)
<p>mkdir -p $BACKUP_DIR
mysqldump -u$DB_USER -p$DB_PASS --single-transaction --routines --triggers $DB_NAME | gzip > $BACKUP_DIR/${DB<em>NAME}</em>$DATE.sql.gz

增强版:自动清理过期备份

生产环境建议保留最近 7 天备份,避免磁盘占满。在上述脚本末尾追加:

# 删除 7 天前的备份文件
find $BACKUP_DIR -name "${DB_NAME}_*.sql.gz" -mtime +7 -delete

说明:

-mtime +7
表示修改时间超过 7 天的文件;若想按文件名中的日期判断(更精确),可用
awk
date
解析,但对大多数场景,
find -mtime
已足够可靠。

定时执行:用 crontab 每天凌晨 2 点备份

运行

crontab -e
,添加一行:

0 2 * * * /path/to/backup_mysql.sh >> /var/log/mysql_backup.log 2>&1

说明:

0 2 * * *
表示每天 2:00 执行
>>
将标准输出和错误日志追加到日志文件,方便排查失败原因(如密码错误、磁盘满、权限不足)
确保执行用户(如
root
mysql
)有读库权限和写入备份目录的权限

多库备份与配置分离(推荐进阶用法)

当需要备份多个库,或希望密码不硬编码在脚本中,可:

把数据库列表写入配置文件(如
db_list.conf
),每行一个库名
使用 MySQL 配置文件
~/.my.cnf
存放认证信息(比明文密码更安全):
[client]
user = root
password = your_password

然后脚本中直接调用

mysqldump --defaults-file=~/.my.cnf ...
,无需再传
-u -p

不复杂但容易忽略

相关推荐