Linux 定时备份 MySQL 数据库(完整教程)

为了防止数据丢失,我们需要定时把数据备份起来。

我们使用用 Linux crontab + mysqldump 实现定时自动备份,包含备份、压缩、保留历史、自动清理旧文件。

一、先准备备份脚本

创建一个备份脚本 mysql_backup.sh,放在 /usr/local/bin/ 方便管理。

复制代码
#!/bin/bash

# ====================== 配置项(请修改这里)======================
# MySQL 用户名
MYSQL_USER="root"
# MySQL 密码
MYSQL_PASS="你的MySQL密码"
# MySQL 主机(一般不用改)
MYSQL_HOST="localhost"
# 要备份的数据库名(多个用空格隔开)
DATABASES="db1 db2 db3"
# 备份文件存放目录
BACKUP_DIR="/data/backup/mysql"
# 保留多少天的备份(自动删除过期文件)
DAYS_KEEP=7
# =================================================================

# 创建备份目录(不存在则自动创建)
mkdir -p $BACKUP_DIR

# 获取当前时间
DATE=$(date +%Y%m%d_%H%M%S)

# 循环备份每个数据库
for DB in $DATABASES
do
  echo "开始备份数据库:$DB"
  mysqldump -h$MYSQL_HOST -u$MYSQL_USER -p$MYSQL_PASS --databases $DB | gzip > $BACKUP_DIR/${DB}_${DATE}.sql.gz
done

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

echo "MySQL 备份完成!"

二、给脚本执行权限

复制代码
chmod +x /usr/local/bin/mysql_backup.sh

三、测试脚本是否能正常运行

复制代码
/usr/local/bin/mysql_backup.sh

✅ 运行后去 /data/backup/mysql/ 看有没有生成 .sql.gz 备份文件,有就说明正常。


四、设置定时任务(crontab)

1. 编辑定时任务

复制代码
crontab -e

2. 添加定时规则(示例)

复制代码
# 每天凌晨 2:00 自动备份
0 2 * * * /usr/local/bin/mysql_backup.sh >> /var/log/mysql_backup.log 2>&1

常用定时示例

复制代码
# 每天凌晨2点备份(推荐)
0 2 * * * /usr/local/bin/mysql_backup.sh >> /var/log/mysql_backup.log 2>&1

# 每6小时备份一次
0 */6 * * * /usr/local/bin/mysql_backup.sh >> /var/log/mysql_backup.log 2>&1

# 每周日凌晨3点备份
0 3 * * 0 /usr/local/bin/mysql_backup.sh >> /var/log/mysql_backup.log 2>&1

3. 查看定时任务是否生效

复制代码
crontab -l

五、备份文件说明

  • 备份路径:/data/backup/mysql/
  • 文件名格式:库名_20260404_020000.sql.gz
  • 自动压缩(体积小)
  • 自动删除 7 天前的备份

六、恢复备份方法

如果你需要恢复数据,执行:

复制代码
# 解压
gzip -d 备份文件.sql.gz

# 恢复
mysql -u root -p 库名 < 备份文件.sql

七、安全优化(可选但推荐)

不建议在脚本里明文写密码,更安全的方式:创建 MySQL 配置文件:

复制代码
vi /etc/my.cnf.d/mysql-backup.cnf

写入:

ini

复制代码
[mysqldump]
user=root
password=你的密码
host=localhost

然后修改权限:

bash

运行

复制代码
chmod 600 /etc/my.cnf.d/mysql-backup.cnf

最后把脚本里的 -u$MYSQL_USER -p$MYSQL_PASS 删掉即可,更安全。

相关推荐
喵喵喵~~~~1 小时前
2026 指挥控制台源头工厂深度测评:按行业项目落地能力择优采购指南
大数据·运维·人工智能·智能家居
小顿的企业观察2 小时前
从人形机器人到AI销售智能体,AI正在重塑中企出海的底层逻辑
大数据·运维·人工智能·机器人·产品运营·制造
whn19773 小时前
如何避免以root用户执行达梦
数据库
brave_zhao3 小时前
openEuler下安装tar包解压工具
linux·服务器·数据库
工业HMI实战笔记3 小时前
【拯救HMI】:低碳制造:自动化技术如何助力企业节能降耗
运维·前端·自动化·交互·制造
小宏运维有点菜3 小时前
JumpServer
linux·运维
是个西兰花3 小时前
Linux:死锁与生产者消费者模型解析
linux·运维·服务器·c++·死锁·生产者消费者模型
RisunJan4 小时前
Linux命令-rsync(远程/本地文件同步 —— 增量传输的备份与镜像神器)
linux·运维·服务器
爆浇牛肉面4 小时前
Linux进阶命令:测开必学的curl和jq
linux
fu15935745684 小时前
【边缘计算实战】P1:从零搭建边云任务卸载仿真实验台(Python 可复现)
数据库·python·边缘计算