一、備份前的準備工作
systemctl stop your-java-app.service
或kill -9 <PID>
),避免數據不一致。二、核心數據與文件備份方法
mysqldump
導出數據庫為SQL文件,支持壓縮以節省空間。mysqldump -u [username] -p[password] [database_name] > /path/to/backup/[db_name]_$(date +%Y%m%d).sql
-C
參數啟用壓縮,或通過管道傳遞給gzip
:mysqldump -u user -p db | gzip > db_backup.sql.gz
。pg_dump
導出,語法類似:pg_dump -U [username] -W -F c [database_name] > /path/to/backup/[db_name].dump
(-F c
表示自定義格式,支持壓縮)。tar
命令將Java項目目錄(含代碼、src
、target
、config
等)打包為壓縮文件,保留文件屬性。tar -czvf /path/to/backup/java_app_$(date +%Y%m%d).tar.gz /path/to/java/app
。rsync -avzh /path/to/java/app /path/to/backup/app --delete
(--delete
同步刪除備份目錄中多余的文件)。sudo apt-clone clone /path/to/backup/java_packages.apt-clone
(生成.tar.gz
文件)。java -version
)及安裝路徑(如/usr/lib/jvm/java-11-openjdk-amd64
),避免恢復時混淆。三、工具化備份方案(簡化操作)
sudo apt install timeshift
;配置:打開Timeshift,選擇“RSYNC”類型,設置備份位置(如外接硬盤),點擊“創建”生成系統快照。sudo apt install duplicity
;示例:duplicity /path/to/java/app sftp://user@remote_host/backup/path
(加密需添加--encrypt-key
參數)。sudo apt install borgbackup
;初始化倉庫:borg init --encryption=repokey /path/to/backup/repo
;備份:borg create --stats /path/to/backup/repo::java_app_{now:%Y-%m-%d} /path/to/java/app
。docker build -t my-java-app .
(構建鏡像);docker save -o /path/to/backup/my-java-app.tar my-java-app
(保存鏡像)。/var/lib/docker/volumes/java_app_data
)。四、自動化備份(避免遺漏)
crontab
設置定時任務,定期執行備份腳本。crontab
(crontab -e
),添加以下行(每天凌晨2點執行備份腳本):0 2 * * * /bin/bash /path/to/backup_script.sh
backup_script.sh
):包含數據庫備份、應用打包、壓縮等命令,并添加執行權限(chmod +x /path/to/backup_script.sh
)。五、恢復步驟
mysql
命令導入備份的SQL文件。mysql -u [username] -p[password] [database_name] < /path/to/backup/[db_name]_20250101.sql
。pg_restore
導入(自定義格式):pg_restore -U [username] -d [database_name] /path/to/backup/[db_name].dump
。tar
解壓備份的壓縮包到原目錄。tar -xzvf /path/to/backup/java_app_20250101.tar.gz -C /path/to/java/app
。rsync -avzh /path/to/backup/app/ /path/to/java/app
。apt-clone
恢復已安裝的Java包。sudo apt-clone restore /path/to/backup/java_packages.apt-clone
,然后運行sudo apt-get update
更新包列表。sudo apt install openjdk-11-jdk
)。六、注意事項
chmod 600
),避免敏感信息泄露。