👉 這是一個或許對你有用的社群
《專案實戰(影片)》:從書中學,往事上“練” 《網際網路高頻面試題》:面朝簡歷學習,春暖花開 《架構 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 工具 | 自動化互動式任務的工具 |
基於 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
命令將加密檔案上傳到遠端伺服器進行異地儲存。

-
壓縮和加密檔案
-
拆分成分卷檔案
-
合併分卷檔案
-
遠端備份
-
刪除過期資料

四、自動化定期備份
/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 檔案備份指令碼
#!/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*
六、總結





