避免刪庫跑路的最好辦法

👉 這是一個或許對你有用的社群
🐱 一對一交流/面試小冊/簡歷最佳化/求職解惑,歡迎加入芋道快速開發平臺知識星球。下面是星球提供的部分資料:
👉這是一個或許對你有用的開源專案
國產 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 加密壓縮檔案。
  • 刪除過期資料
  • 使用 scprsync 命令將加密檔案上傳到遠端伺服器進行異地儲存。
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*

六、總結

刪庫跑路是指某人惡意刪除重要資料後逃避責任的行為,可能導致嚴重的經濟損失和安全風險。
為了避免此類情況,需要實施許可權管理、定期備份資料,並建立自動化的備份指令碼,以確保資料安全和系統穩定執行。
本篇主要講解了如何備份資料庫和重要的檔案,希望能帶給你啟發。

歡迎加入我的知識星球,全面提升技術能力。
👉 加入方式,長按”或“掃描”下方二維碼噢
星球的內容包括:專案實戰、面試招聘、原始碼解析、學習路線。
文章有幫助的話,在看,轉發吧。
謝謝支援喲 (*^__^*)

相關文章