避免刪庫跑路的辦法,你知道嗎?
你好,我是悟空。
圖片
一、前言
1.1 刪庫跑路是什么?
刪庫跑路:是一個在開發和運維領域常見的幽默說法,但它指的是一種嚴重的故障情境:意外刪除了生產數據庫中的數據。
在實際操作中,這種情況可能會導致嚴重的數據丟失和業務中斷。
1.2 避免刪除跑路的方式
權限控制: 限制對生產環境的直接訪問和操作,確保只有受信任的人員才能執行敏感操作。
日志審計: 記錄所有操作,包括誰、什么時間、做了什么操作,以便追蹤和審計。
備份策略: 實施完善的備份策略,定期備份數據,并將備份數據存儲在安全的地方,以便在出現問題時能夠快速恢復數據。
多地備份: 將備份數據存儲在不同的地理位置,以防止因某一地點發生災難而導致數據丟失。
權限分離: 采用最小權限原則,給予員工僅限于其工作職責所需的最低權限,避免濫用權限。
監控預警: 部署監控系統,監視系統狀態和用戶行為,及時發現異常操作并采取措施。
培訓意識: 對員工進行安全意識培訓,讓他們了解刪除跑路的危害,以及如何正確處理數據和執行操作。
而最最最重要的一種方式就是備份!
重要的事情說三遍:備份!備份!備份!
為什么說備份是最重要的,因為只要有備份文件,數據就能恢復。但前提是備份文件別被刪了!
那么今天我們就來看下如何備份數據庫以及重要的文件。
二、環境說明
本篇涉及到的服務器環境如下表所示:
序號 | 說明 | 說明 |
1 | Ubuntu 系統 | 服務器操作系統 |
2 | Docker 容器 | 容器 |
3 | MySQL 數據庫 | 備份數據庫,以容器化部署 |
4 | FastDFS 文件存儲或 Redis 數據文件 | 備份磁盤文件 |
5 | expect 工具 | 自動化交互式任務的工具 |
Ubuntu 上安裝有 Docker,MySQL 以容器化的形式部署,FastDFS 分布式文件系統,expect 自動化交互式任務的工具(可以用來遠程拷貝,但功能不僅僅如此),可自行安裝該工具。
三、備份方案
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_locatinotallow=/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
mysqlCnotallow=`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_locatinotallow=/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 passjava@192.168.1.100:/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*
六、總結
刪庫跑路是指某人惡意刪除重要數據后逃避責任的行為,可能導致嚴重的經濟損失和安全風險。
為了避免此類情況,需要實施權限管理、定期備份數據,并建立自動化的備份腳本,以確保數據安全和系統穩定運行。
本篇主要講解了如何備份數據庫和重要的文件,希望能帶給你啟發。