避免删库跑路的最好办法
👉 这是一个或许对你有用的社群
🐱 一对一交流/面试小册/简历优化/求职解惑,欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料:
《项目实战(视频)》:从书中学,往事上“练” 《互联网高频面试题》:面朝简历学习,春暖花开 《架构 x 系统设计》:摧枯拉朽,掌控面试高频场景题 《精进 Java 学习指南》:系统学习,互联网主流技术栈 《必读 Java 源码专栏》:知其然,知其所以然
👉这是一个或许对你有用的开源项目
国产 Star 破 10w+ 的开源项目,前端包括管理后台 + 微信小程序,后端支持单体和微服务架构。
功能涵盖 RBAC 权限、SaaS 多租户、数据权限、商城、支付、工作流、大屏报表、微信公众号、CRM 等等功能:
Boot 仓库:https://gitee.com/zhijiantianya/ruoyi-vue-pro Cloud 仓库:https://gitee.com/zhijiantianya/yudao-cloud 视频教程:https://doc.iocoder.cn 【国内首批】支持 JDK 21 + SpringBoot 3.2.2、JDK 8 + Spring Boot 2.7.18 双版本
一、前言
1.1 删库跑路是什么?
删库跑路
:是一个在开发和运维领域常见的幽默说法,但它指的是一种严重的故障情境:意外删除了生产数据库中的数据。
在实际操作中,这种情况可能会导致严重的数据丢失和业务中断。
1.2 避免删除跑路的方式
权限控制: 限制对生产环境的直接访问和操作,确保只有受信任的人员才能执行敏感操作。
日志审计: 记录所有操作,包括谁、什么时间、做了什么操作,以便追踪和审计。
备份策略: 实施完善的备份策略,定期备份数据,并将备份数据存储在安全的地方,以便在出现问题时能够快速恢复数据。
多地备份: 将备份数据存储在不同的地理位置,以防止因某一地点发生灾难而导致数据丢失。
权限分离: 采用最小权限原则,给予员工仅限于其工作职责所需的最低权限,避免滥用权限。
监控预警: 部署监控系统,监视系统状态和用户行为,及时发现异常操作并采取措施。
培训意识: 对员工进行安全意识培训,让他们了解删除跑路的危害,以及如何正确处理数据和执行操作。
而最最最重要的一种方式就是备份!
重要的事情说三遍:备份!备份!备份!
为什么说备份是最重要的,因为只要有备份文件,数据就能恢复。但前提是备份文件别被删了!
那么今天我们就来看下如何备份数据库以及重要的文件。
基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
项目地址:https://github.com/YunaiV/ruoyi-vue-pro 视频教程:https://doc.iocoder.cn/video/
二、环境说明
本篇涉及到的服务器环境如下表所示:
序号 | 说明 | 说明 |
---|---|---|
1 | Ubuntu 系统 | 服务器操作系统 |
2 | Docker 容器 | 容器 |
3 | MySQL 数据库 | 备份数据库,以容器化部署 |
4 | FastDFS 文件存储或 Redis 数据文件 | 备份磁盘文件 |
5 | expect 工具 | 自动化交互式任务的工具 |
Ubuntu 上安装有 Docker,MySQL 以容器化的形式部署,FastDFS 分布式文件系统,expect 自动化交互式任务的工具(可以用来远程拷贝,但功能不仅仅如此),可自行安装该工具。
基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
项目地址:https://github.com/YunaiV/yudao-cloud 视频教程:https://doc.iocoder.cn/video/
三、备份方案
3.1 备份 MySQL 数据库的所有数据
使用 mysqldump
命令备份所有数据,并生成一个 SQL 文件。使用 tar
命令将 SQL 文件压缩成一个文件。使用 openssl 加密压缩文件。 删除过期数据 使用 scp
或rsync
命令将加密文件上传到远程服务器进行异地存储。
3.2 备份数据文件
压缩和加密文件
拆分成分卷文件
合并分卷文件
远程备份
删除过期数据
四、自动化定期备份
当我们编写好备份的脚本后,还需要定期执行备份操作,那么就少不了添加定时任务了。
Linux 系统自带定时任务功能,我们可以指定一个 cron 作业,在每天凌晨 2 点 10 分运行该备份脚本,并将输出追加到 /home/passjava/backup/cron_log.txt
文件中。
步骤如下:
编辑定时任务
crontab -uroot -e
添加定时任务
10 2 * * * bash /home/passjava/backup/你的脚本 >> /home/passjava/backup/cron_log.txt
五、备份脚本
5.1 数据库备份脚本
#!/bin/bash
# 设置mysql的登录用户名和密码(根据实际情况填写)
mysql_user="root"
mysql_password="xxx"
mysql_host="数据库服务器 ip"
mysql_port="3306"
#mysql_charset="utf8mb4"
# 备份文件存放地址(根据实际情况填写)
backup_location=/home/passjava/backup/mysql/passjava_web
# 是否删除过期数据
expire_backup_delete="ON"
expire_days=7
backup_time=`date +%Y-%m-%d-%H-%M-%S`
#根据docker ps获取mysql容器的ID
mysqlContainerName=`sudo docker ps -q --filter="name=mysql"`
#在运行在docker环境的mysql中执行备份命令
sudo docker exec $mysqlContainerName mysqldump passjava_web -u$mysql_user -p$mysql_password > $backup_location/$backup_time-backup-mysql-passjava_web.sql
tar -czvf - $backup_location/$backup_time-backup-mysql-passjava_web.sql | openssl des3 -salt -k passjava123456 -out $backup_location/$backup_time-backup-mysql-passjava_web.sql.tar.gz
# 删除过期数据
if [ "$expire_backup_delete" == "ON" -a "$backup_location" != "" ];then
`find $backup_location/ -type f -mtime +$expire_days | xargs rm -rf`
echo "Expired backup data delete complete!"
fi
echo "开始远程备份 passjava_web"
expect -c "
spawn scp -r /home/passjava/backup/mysql/passjava_web/$backup_time-backup-mysql-passjava_web.sql.tar.gz passjava@异地服务器1:/home/passjava/backup/mysql/passjava_web
expect {
\"*assword\" {set timeout 300; send \"passjava\r\"; exp_continue;}
\"yes/no\" {send \"yes\r\";}
}
spawn scp -r /home/passjava/backup/mysql/passjava_web/$backup_time-backup-mysql-passjava_web.sql.tar.gz passjava@异地服务器2:/home/passjava/backup/mysql/passjava_web
expect {
\"*assword\" {set timeout 300; send \"passjava\r\"; exp_continue;}
\"yes/no\" {send \"yes\r\";}
}
expect eof"
echo "完成远程备份 passjava_web"
rm -f $backup_location/$backup_time-backup-mysql-passjava_web.sql
5.2 文件备份脚本
本脚本用于备份 FastDFS 分布式文件系统的文件,也可以改为备份 redis 的数据文件。
#!/bin/bash
# 备份文件存放地址(根据实际情况填写)
backup_location=/home/passjava/backup/fdfs/data
# 是否删除过期数据
expire_backup_delete="ON"
expire_days=7
backup_time=`date +%Y-%m-%d-%H-%M-%S`
# 压缩加密数据库备份文件
tar -czvf - /home/passjava/fdfs | openssl des3 -salt -k passjava123456 | split -b 200m -d - $backup_location/$backup_time-fdfs-data.tar.gz
# 删除过期数据
if [ "$expire_backup_delete" == "ON" -a "$backup_location" != "" ];then
`find $backup_location/ -type f -mtime +$expire_days | xargs rm -rf`
echo "Expired backup data delete complete!"
fi
cat $backup_location/$backup_time-fdfs-data.tar.gz* > $backup_location/$backup_time-fdfs-data-all.tar.gz
echo "开始远程备份 fdfs"
expect -c "
spawn scp -r $backup_location/$backup_time-fdfs-data-all.tar.gz [email protected]:/home/passjava/backup/fdfs/data
expect {
\"*assword\" {set timeout 300; send \"passjava\r\"; exp_continue;}
\"yes/no\" {send \"yes\r\";}
}
expect eof"
echo "完成远程备份 fdfs"
rm -f $backup_location/$backup_time-fdfs-data.tar.gz*
六、总结
删库跑路是指某人恶意删除重要数据后逃避责任的行为,可能导致严重的经济损失和安全风险。
为了避免此类情况,需要实施权限管理、定期备份数据,并建立自动化的备份脚本,以确保数据安全和系统稳定运行。
本篇主要讲解了如何备份数据库和重要的文件,希望能带给你启发。
欢迎加入我的知识星球,全面提升技术能力。
👉 加入方式,“长按”或“扫描”下方二维码噢:
星球的内容包括:项目实战、面试招聘、源码解析、学习路线。
文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)
微信扫码关注该文公众号作者