【DBA实战】删库跑路?不存在的!生产环境MySQL自动备份全攻略

简介: 本文介绍如何用Shell脚本结合`mysqldump`实现MySQL数据库的自动备份,涵盖备份、压缩、按日期命名及30天自动清理策略,并通过Crontab定时执行,确保数据安全。

前言

在 IT 圈流传着一句玩笑话:“从删库到跑路”。虽然是玩笑,但数据安全绝对是后端开发的生命线。

无论是人为误操作(DELETE 忘加 WHERE)、系统故障,还是黑客勒索,唯一能救你命的只有一样东西——备份

很多开发者在开发环境习惯了手动导出 SQL,但在生产环境,我们需要一套全自动、可追溯、带清理策略的备份方案。今天我们就用 Linux Shell + mysqldump 来实现它。

1. 选择备份工具:mysqldump

MySQL 备份主要分为两种:

  1. 物理备份(XtraBackup): 直接复制磁盘文件,速度快,适合超大数据量(TB级)。
  2. 逻辑备份(mysqldump): 将数据导出为 SQL 语句,可读性好,跨版本兼容性强,适合中小规模数据(几十G以内)。

对于大多数中小型项目,mysqldump 是最通用、最简单的选择。

2. 编写自动备份脚本

我们将编写一个 Shell 脚本,完成以下“一条龙”服务:

  1. 导出数据库。
  2. 压缩文件(节省磁盘空间)。
  3. 按日期命名。
  4. 自动删除 30 天前的旧备份。

创建脚本文件:

Bash

vim /data/scripts/mysql_backup.sh

脚本内容(请根据你的实际情况修改配置项):

Bash

#!/bin/bash
# ================= 配置区域 =================
# 数据库用户名
DB_USER="root"
# 数据库密码 (建议使用 .my.cnf 配置文件以免密码泄露,此处仅为演示)
DB_PASS="你的数据库密码"
# 需要备份的数据库名
DB_NAME="my_app_db"
# 备份文件存放路径
BACKUP_DIR="/data/backup/mysql"
# 获取当前时间,用于文件名
DATE=$(date +%Y%m%d_%H%M%S)
# ===========================================
# 1. 检查备份目录是否存在
if [ ! -d "$BACKUP_DIR" ]; then
    mkdir -p "$BACKUP_DIR"
fi
echo "[Start] 开始备份数据库: $DB_NAME ..."
# 2. 执行备份并压缩
# --single-transaction: 保证InnoDB备份时的数据一致性,不锁表
# --routines --events: 备份存储过程和事件
# | gzip: 管道传输,直接压缩,不占用临时磁盘空间
mysqldump -u$DB_USER -p$DB_PASS --single-transaction --routines --events "$DB_NAME" | gzip > "$BACKUP_DIR/${DB_NAME}_${DATE}.sql.gz"
# 3. 检查备份结果
if [ $? -eq 0 ]; then
    echo "[Success] 备份文件已生成: $BACKUP_DIR/${DB_NAME}_${DATE}.sql.gz"
else
    echo "[Error] 备份失败!"
    exit 1
fi
# 4. 清理旧备份 (保留最近30天)
find "$BACKUP_DIR" -type f -name "*.sql.gz" -mtime +30 -exec rm -rf {} \;
echo "[Cleanup] 已清理30天前的旧备份。"

3. 赋予权限并测试

千万别写完就丢那不管,一定要手动运行一次!

Bash

# 赋予执行权限
chmod +x /data/scripts/mysql_backup.sh
# 手动执行脚本
./mysql_backup.sh

如果看到 [Success] 并且在备份目录下生成了 .sql.gz 文件,说明脚本没问题。

4. 自动化:加入 Crontab

我们通常选择在业务低峰期(比如凌晨 3 点)进行备份。

Bash

crontab -e

添加如下一行:

Bash

# 每天凌晨 03:00 执行数据库备份
0 3 * * * /data/scripts/mysql_backup.sh >> /var/log/mysql_backup.log 2>&1

5. 关键时刻:如何恢复?

备份的目的是为了恢复。如果不会恢复,备份就是一堆废文件。

假设数据库崩了,我们需要用备份文件 my_app_db_20231027.sql.gz 进行恢复:

Bash

# 1. 解压并导入
# gunzip -c : 解压输出到标准输出
# | mysql : 管道输入给 mysql 命令执行
gunzip -c /data/backup/mysql/my_app_db_20231027.sql.gz | mysql -u root -p my_app_db

或者分两步走:

Bash

# 1. 解压
gzip -d my_app_db_20231027.sql.gz
# 2. 导入
mysql -u root -p my_app_db < my_app_db_20231027.sql

6. DBA的忠告

  1. 异地备份: 不要把鸡蛋放在同一个篮子里。脚本生成的备份文件,最好再同步一份到**对象存储(如阿里云OSS)**或者另一台服务器上。否则服务器硬盘坏了,备份和原数据一起没。
  2. 定期演练: 每个季度至少在测试环境试着恢复一次,确保你的备份文件是完好可用的。

总结

数据备份是运维工作的底线。通过这个简单的脚本,我们实现了:

  • 全自动运行
  • 压缩省空间
  • 定期清理

睡个安稳觉,从做好备份开始。

相关文章
|
4月前
|
SQL 监控 druid
【性能优化】拒绝性能瓶颈!数据库连接池配置详解与调优实战
本文深入讲解数据库连接池核心原理与调优技巧,涵盖HikariCP和Druid配置要点,解析四大关键参数、黄金连接数公式及Druid监控功能,助你科学设置连接池,避免性能瓶颈。
|
监控 Kubernetes 负载均衡
spring boot应用优化,6s内启动,内存减半
taptap-developer是一个spring boot框架驱动的纯Grpc服务,所以,只用了四步,移除了web和spring cloud相关的模块后,启动速度就稳稳的保持在了6s内。除了启动速度提升外,在服务待机状态下,内存锐减了50%左右,从500M左右的内存占用,缩减到了250M不到。
10229 113
spring boot应用优化,6s内启动,内存减半
|
Java
Java实现微信支付
Java实现微信支付
856 2
|
5月前
|
SQL JSON 分布式计算
【跨国数仓迁移最佳实践6】MaxCompute SQL语法及函数功能增强,10万条SQL转写顺利迁移
本系列文章将围绕东南亚头部科技集团的真实迁移历程展开,逐步拆解 BigQuery 迁移至 MaxCompute 过程中的关键挑战与技术创新。本篇为第六篇,MaxCompute SQL语法及函数功能增强。 注:客户背景为东南亚头部科技集团,文中用 GoTerra 表示。
501 20
|
4月前
|
缓存 前端开发 安全
数据同步原理
Soul网关通过推拉模式实现配置数据同步,支持WebSocket、HTTP长轮询和Zookeeper三种策略。管理员在后台变更配置后,事件被发布并根据同步策略推送到网关,实现秒级更新。HTTP长轮询借鉴Apollo与Nacos设计,结合异步Servlet机制,确保准实时且高效。
数据同步原理
|
4月前
|
网络协议 安全 应用服务中间件
阿里云 SSL 证书申请全流程:新手也能看懂的图文教程
不管是个人做网站测试,还是企业刚起步需要给网站加安全防护,SSL 证书都是必不可少的 —— 它能让网站从 “http” 变成 “https”,浏览器地址栏会显示小绿锁,访客看着更放心,数据传输也更安全。阿里云提供了不同类型的 SSL 证书,其中免费的个人测试证书适合新手入门,下面就用通俗易懂的语言,一步步教你怎么申请、验证和下载,就算是第一次操作也能跟着做。
|
Java jenkins 网络安全
从零搭建 Gerrit 实现 code review
从零搭建 Gerrit 实现 code review
595 1
|
SQL 关系型数据库 MySQL
数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog
《数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog》介绍了如何利用MySQL的二进制日志(Binlog)恢复误删除的数据。主要内容包括: 1. **启用二进制日志**:在`my.cnf`中配置`log-bin`并重启MySQL服务。 2. **查看二进制日志文件**:使用`SHOW VARIABLES LIKE &#39;log_%&#39;;`和`SHOW MASTER STATUS;`命令获取当前日志文件及位置。 3. **创建数据备份**:确保在恢复前已有备份,以防意外。 4. **导出二进制日志为SQL语句**:使用`mysqlbinlog`
1298 2
|
机器学习/深度学习 人工智能 自然语言处理
【AI系统】AI的领域、场景与行业应用
本文概述了AI的历史、现状及发展趋势,涵盖AI系统的初步设计原则,并深入探讨了AI在计算机视觉、自然语言处理和音频处理三个领域的具体应用。同时,文中还介绍了AI在金融、医疗、教育、互联网及自动驾驶等行业中的广泛应用,强调了AI基础设施的重要性及其对企业竞争力的影响。通过阅读本文,读者不仅可以获得系统的AI知识,还能激发对AI系统研究的兴趣,掌握相关的设计原则与方法。
929 1
|
人工智能 自然语言处理 语音技术
通用大模型VS垂直大模型
【7月更文挑战第16天】通用大模型VS垂直大模型