避免刪庫跑路的辦法,你知道嗎?
你好,我是悟空。
圖片
一、前言
1.1 刪庫跑路是什么?
刪庫跑路:是一個在開發(fā)和運(yùn)維領(lǐng)域常見的幽默說法,但它指的是一種嚴(yán)重的故障情境:意外刪除了生產(chǎn)數(shù)據(jù)庫中的數(shù)據(jù)。
在實(shí)際操作中,這種情況可能會導(dǎo)致嚴(yán)重的數(shù)據(jù)丟失和業(yè)務(wù)中斷。
1.2 避免刪除跑路的方式
權(quán)限控制: 限制對生產(chǎn)環(huán)境的直接訪問和操作,確保只有受信任的人員才能執(zhí)行敏感操作。
日志審計: 記錄所有操作,包括誰、什么時間、做了什么操作,以便追蹤和審計。
備份策略: 實(shí)施完善的備份策略,定期備份數(shù)據(jù),并將備份數(shù)據(jù)存儲在安全的地方,以便在出現(xiàn)問題時能夠快速恢復(fù)數(shù)據(jù)。
多地備份: 將備份數(shù)據(jù)存儲在不同的地理位置,以防止因某一地點(diǎn)發(fā)生災(zāi)難而導(dǎo)致數(shù)據(jù)丟失。
權(quán)限分離: 采用最小權(quán)限原則,給予員工僅限于其工作職責(zé)所需的最低權(quán)限,避免濫用權(quán)限。
監(jiān)控預(yù)警: 部署監(jiān)控系統(tǒng),監(jiān)視系統(tǒng)狀態(tài)和用戶行為,及時發(fā)現(xiàn)異常操作并采取措施。
培訓(xùn)意識: 對員工進(jìn)行安全意識培訓(xùn),讓他們了解刪除跑路的危害,以及如何正確處理數(shù)據(jù)和執(zhí)行操作。
而最最最重要的一種方式就是備份!
重要的事情說三遍:備份!備份!備份!
為什么說備份是最重要的,因為只要有備份文件,數(shù)據(jù)就能恢復(fù)。但前提是備份文件別被刪了!
那么今天我們就來看下如何備份數(shù)據(jù)庫以及重要的文件。
二、環(huán)境說明
本篇涉及到的服務(wù)器環(huán)境如下表所示:
序號 | 說明 | 說明 |
1 | Ubuntu 系統(tǒng) | 服務(wù)器操作系統(tǒng) |
2 | Docker 容器 | 容器 |
3 | MySQL 數(shù)據(jù)庫 | 備份數(shù)據(jù)庫,以容器化部署 |
4 | FastDFS 文件存儲或 Redis 數(shù)據(jù)文件 | 備份磁盤文件 |
5 | expect 工具 | 自動化交互式任務(wù)的工具 |
Ubuntu 上安裝有 Docker,MySQL 以容器化的形式部署,F(xiàn)astDFS 分布式文件系統(tǒng),expect 自動化交互式任務(wù)的工具(可以用來遠(yuǎn)程拷貝,但功能不僅僅如此),可自行安裝該工具。
三、備份方案
3.1 備份 MySQL 數(shù)據(jù)庫的所有數(shù)據(jù)
- 使用 mysqldump 命令備份所有數(shù)據(jù),并生成一個 SQL 文件。
- 使用 tar 命令將 SQL 文件壓縮成一個文件。
- 使用 openssl 加密壓縮文件。
- 刪除過期數(shù)據(jù)
- 使用 scp 或 rsync 命令將加密文件上傳到遠(yuǎn)程服務(wù)器進(jìn)行異地存儲。
圖片
3.2 備份數(shù)據(jù)文件
- 壓縮和加密文件
- 拆分成分卷文件
- 合并分卷文件
- 遠(yuǎn)程備份
- 刪除過期數(shù)據(jù)
圖片
四、自動化定期備份
當(dāng)我們編寫好備份的腳本后,還需要定期執(zhí)行備份操作,那么就少不了添加定時任務(wù)了。
Linux 系統(tǒng)自帶定時任務(wù)功能,我們可以指定一個 cron 作業(yè),在每天凌晨 2 點(diǎn) 10 分運(yùn)行該備份腳本,并將輸出追加到 /home/passjava/backup/cron_log.txt 文件中。
步驟如下:
編輯定時任務(wù)
crontab -uroot -e
添加定時任務(wù)
10 2 * * * bash /home/passjava/backup/你的腳本 >> /home/passjava/backup/cron_log.txt
五、備份腳本
5.1 數(shù)據(jù)庫備份腳本
#!/bin/bash
# 設(shè)置mysql的登錄用戶名和密碼(根據(jù)實(shí)際情況填寫)
mysql_user="root"
mysql_password="xxx"
mysql_host="數(shù)據(jù)庫服務(wù)器 ip"
mysql_port="3306"
#mysql_charset="utf8mb4"
# 備份文件存放地址(根據(jù)實(shí)際情況填寫)
backup_locatinotallow=/home/passjava/backup/mysql/passjava_web
# 是否刪除過期數(shù)據(jù)
expire_backup_delete="ON"
expire_days=7
backup_time=`date +%Y-%m-%d-%H-%M-%S`
#根據(jù)docker ps獲取mysql容器的ID
mysqlCnotallow=`sudo docker ps -q --filter="name=mysql"`
#在運(yùn)行在docker環(huán)境的mysql中執(zhí)行備份命令
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
# 刪除過期數(shù)據(jù)
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 "開始遠(yuǎn)程備份 passjava_web"
expect -c "
spawn scp -r /home/passjava/backup/mysql/passjava_web/$backup_time-backup-mysql-passjava_web.sql.tar.gz passjava@異地服務(wù)器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@異地服務(wù)器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 "完成遠(yuǎn)程備份 passjava_web"
rm -f $backup_location/$backup_time-backup-mysql-passjava_web.sql
5.2 文件備份腳本
本腳本用于備份 FastDFS 分布式文件系統(tǒng)的文件,也可以改為備份 redis 的數(shù)據(jù)文件。
#!/bin/bash
# 備份文件存放地址(根據(jù)實(shí)際情況填寫)
backup_locatinotallow=/home/passjava/backup/fdfs/data
# 是否刪除過期數(shù)據(jù)
expire_backup_delete="ON"
expire_days=7
backup_time=`date +%Y-%m-%d-%H-%M-%S`
# 壓縮加密數(shù)據(jù)庫備份文件
tar -czvf - /home/passjava/fdfs | openssl des3 -salt -k passjava123456 | split -b 200m -d - $backup_location/$backup_time-fdfs-data.tar.gz
# 刪除過期數(shù)據(jù)
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 "開始遠(yuǎn)程備份 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 "完成遠(yuǎn)程備份 fdfs"
rm -f $backup_location/$backup_time-fdfs-data.tar.gz*
六、總結(jié)
刪庫跑路是指某人惡意刪除重要數(shù)據(jù)后逃避責(zé)任的行為,可能導(dǎo)致嚴(yán)重的經(jīng)濟(jì)損失和安全風(fēng)險。
為了避免此類情況,需要實(shí)施權(quán)限管理、定期備份數(shù)據(jù),并建立自動化的備份腳本,以確保數(shù)據(jù)安全和系統(tǒng)穩(wěn)定運(yùn)行。
本篇主要講解了如何備份數(shù)據(jù)庫和重要的文件,希望能帶給你啟發(fā)。