沉冰浮水

沉冰浮水

做最终到的事,成为最终成为的人!
github
bilibili
mastodon
zhihu
douban

「折騰」Linux 定時備份教程

2022-04-13:新增搬家記錄,在文章末尾;

2022-04-12:

很多年前的筆記了,也一直有用這個方案備份,然而我能說定時執行用的 crontab 一直沒能正確開機自啟麼?「(╯﹏╰)」

因為開發環境從 Win 換到了 wsl,導致了文件被錯誤覆蓋(代碼本身有坑,保是 win 下不會顯現),恢復文件時發現備份日期是 3-25,雖然丟失的文本並不是經常修改的到也還好;

決定先臨時搬家到新買的空間裡,然後把舊的重裝下;

「VPS」HostNamaste $20 年付_廣告慎入_沉冰浮水

「折騰」VSCode + wsl2 + Docker 探究_電腦網絡_沉冰浮水

「折騰」莫名其妙得解決了 wsl2 內 Docker 的自啟動_電腦網絡_沉冰浮水 ← 寫下這段文字時並沒有真正解決


相關推薦:【筆記】LNMP 部署 / 續期 SSL 證書_電腦網絡_沉冰浮水

使用環境為 CentOS;

BAK_DIR=~/Backup

# if [ ! -d ~/BackupTMP ]; then
#   mkdir ~/BackupTMP
# fi

if [ ! -d $BAK_DIR ]; then
  mkdir $BAK_DIR
fi

cd $BAK_DIR

DATE_SUFF=$(date +%Y%m%d)
#—— 日期後綴

if [ ! -d bak_$DATE_SUFF ]; then
  mkdir bak_$DATE_SUFF
fi

# 打包網站文件
cd /home/wwwroot
tar -czf $BAK_DIR/bak_$DATE_SUFF/bak_www.wdssmq.com.tar.gz www.wdssmq.com
# tar -czf $BAK_DIR/bak_$DATE_SUFF/bak_www.wdssmq.com.tar.gz www.wdssmq.com --exclude .git
# tar -czf $BAK_DIR/bak_$DATE_SUFF/bak_www.wdssmq.com.tar.gz www.wdssmq.com \
  # --exclude Editormd \
  # --exclude Neditor \
  # --exclude live2d2 \
  # --exclude WebDir/upload/* \
  # --exclude TidWiki/backup/* \
  # --exclude TidWiki/var/* \
  # --exclude zb_users/cache/thumbs/* \
  # --exclude .git
# —— 不確定上邊排除姿勢對不對;可以打包一次下來,用 WizTree 分析佔用,排除掉不重要的部分
# —— WizTree - https://www.diskanalyzer.com/

# 導出數據庫
/usr/local/mysql/bin/mysqldump -uroot -p數據庫密碼 數據庫名 > $BAK_DIR/bak_$DATE_SUFF/db_www.wdssmq.com.sql.gz
# -u 和 -p 參數值前不能有空格

# del 3 days ago
find $BAK_DIR/ -type d -mtime +5 -name "bak*" -print -exec rm -rf {} \;

# 「可選」鏡像同步至遠程 FTP
lftp -u FTP用戶名,FTP密碼 -e "mirror -R --delete --only-newer --verbose $BAK_DIR /遠程目錄;exit" www.FTP地址.com
if [ ! -d ~/bin ]; then
  mkdir ~/bin
fi
cd ~/bin

code bak.sh
# —— code 是 VSCode 遠程連接後打開文件的命令

# 添加執行權限
chmod g+x ~/bin/bak.sh

# 主動執行測試
cd ~
./bin/bak.sh

將代碼寫入到 bak.sh 文件放在 ~/bin 目錄下,然後設置一個定時,比如每天凌晨 3 點執行。

0 3 * * * /root/bin/bak.sh

# 查看定時任務列表
crontab -l
# 0 3 */7 * * /usr/local/acme.sh/upgrade.sh

# 開啟命令行編輯
crontab -e
# —— 實際文件路徑在 /var/spool/cron
# —— VSCode 可直接遠程編輯
# —— 參考: https://www.wdssmq.com/post/20201120519.html

cd /var/spool/cron && ls
code root

# 修改後重新載入配置文件
/sbin/service crond reload
crontab -l
# 0 3 */7 * * /usr/local/acme.sh/upgrade.sh
# 0 3 * * * /root/bin/bak.sh
chkconfig --list crond
chkconfig --list nginx
chkconfig --list httpd
chkconfig --level 35 crond on
# 查看狀態
service crond status
# 啟動服務
service crond start

定時需要 crontabs,參考:http://www.ha97.com/910.html

關於 lftp:參考:https://www.centos.bz/2011/06/incremental-backup-site-using-lftp/


搬家記錄正文:

把舊空間的vhost/*.conf直接搬到新空間就不需要重新創建了,如果有 ssl 也一起;

舊空間內:

# 可以修改備份腳本中的 DATE_SUFF 變量,比如加個 _X 後綴然後執行一次打包最新數據
# cd ~/bin
# ./bak.sh
# 進入舊空間實際存放打包文件夾的路徑 /root/Backup/bak_20220413_X
ln -s /usr/local/apache/conf/vhost vhost_a
ln -s /usr/local/nginx/conf/vhost  vhost_n
if [ ! -d /usr/local/nginx/conf/ssl ]; then
  mkdir /usr/local/nginx/conf/ssl
fi
ln -s /usr/local/nginx/conf/ssl    ssl_n

然後 sftp 把打包文件和 vhost 文件夾一並下載回來;

新空間內:

# 新空間內
cd /home/wwwroot
ln -s /usr/local/apache/conf/vhost vhost_a
ln -s /usr/local/nginx/conf/vhost  vhost_n
if [ ! -d /usr/local/nginx/conf/ssl ]; then
  mkdir /usr/local/nginx/conf/ssl
fi
ln -s /usr/local/nginx/conf/ssl    ssl_n

phpMyAdmin 內創建數據庫表上傳db_*.tar.gz

sftp 上傳 vhost 文件夾和「站點文件」的打包文件到wwwroot目錄;

# 新空間內
cd /home/wwwroot
# 批量解壓文件
for tar in bak_*.tar.gz;  do tar xvf $tar; done
# 文件權限
chown -Rv www:www  /home/wwwroot/*
find ./ -type d -print|xargs chmod 755
find ./ -type f -print|xargs chmod 644

先不要刪壓縮包或符號連接,FileZilla Client 到是應該可以關掉了,之後 VSCode 內操作;

檢查確認下站點程序內的數據庫連接信息;

# 新空間內
# 重啟
lnmp restart
# 寫入當前日期到 test.txt,用以驗證解析切換是否成功
cd /home/wwwroot
for dir in $(ls -d */); do echo $(date +%Y%m%d) > $dir/test.txt; done
# —— 這裡怎麼排除掉 ln ?

切換解析,等待生效;「切換解析後建議儘快停掉舊空間的 web 服務」

然後照著上邊教程為新空間重新配置一次自動備份;

清理文件

新空間內:

cd /home/wwwroot
rm -rf *.tar.gz *.sql.gz
rm -rf rm -rf vhost_a vhost_n ssl_n

命令備忘錄:

# 列出子目錄
ls -d */
# default/  demo.wdssmq.com/ www.wdssmq.com/
# 按行輸出
ls -F | grep /$
default/
demo.wdssmq.com/
www.wdssmq.com/
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。