「折腾」Linux 定时备份教程

吐槽/反馈/建议:咸鱼哪有心    爱发电-@wdssmq

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/

爱发电

本文标题:《「折腾」Linux 定时备份教程》作者:沉冰浮水
原文链接:https://www.wdssmq.com/post/20140816860.html
特别注明外均为原创,转载请注明。

分享到微信

扫描二维码

可在微信查看或分享至朋友圈。

相关文章

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

召唤伊斯特瓦尔