lnmp环境下全自动备份脚本升级版
往记
撰写于 2023年 08月 06 日

历经两次重装系统,终于把这个新的脚本写好了。之前的那个脚本后把明文密码放在bash命令中,这样不是很安全,于是让bing ai帮我优化了下代码,结果它给的代码有些目录不全,导致把系统删了,所以这次仔仔细细了的检查了所有代码,并且拿其他机器测试十几次没问题后,才正式放到生产环境里。

这次脚本为上一篇《利用rclone对lnmp环境下的网站备份》的升级版,前面rclone挂载的步骤按照上一篇文章就好了,如果已经挂载,就不用管,直接看这篇文章就行。

准备事项

创建文件夹

在系统根目录创建backup文件夹,记得是系统根目录,不是root根目录,要注意区分。然后再到backup目录里创建web、sql、log这三个文件夹,再到log目录里创建backup.log文件,web指存放网站备份文件的地方,sql为存放数据库备份文件的地方,log为存放备份日志的目录,backup.log就是备份日志文件。

开启Mysqldump功能

#打开文件
nano /etc/my.cnf

#编辑文件
[client]
user        =root
password    = 你的数据库root密码
port        = 3306
socket        = /tmp/mysql.sock

我们只需要把前面几行改成这样就可以了,然后按ctrl+x保存,输入y确认,回车保存文件。

自动备份代码

完成上面操作后,到root根目录将如下代码放到backup.sh里,因为没有这个文件,我们需要手动创建。

#创建backup.sh文件
nano /root/backup.sh

将如下代码粘贴到这个文件里,并且保存

#!/bin/bash -e
# 设置变量
web_dir=/home/wwwroot/yunlogs.com  #请将yunlogs.com改为你的网站目录
database=vliang  #请将vliang改为你的数据库名
backup_dir=/root/backup
log_file=/root/backup/log/backup.log
date=$(date +"%Y%m%d%H%M%S")
random=$(shuf -i 10000-99999 -n 1)
zip_cmd="zip -q -r" # 压缩命令
rclone_cmd="rclone sync" # 同步命令
# 定义函数
# 备份网站文件并压缩
backup_web() {
  # 拼接压缩包的名字
  zipname=web_${date}_${random}.zip
  # 进入网站目录
  cd $web_dir
  # 压缩当前目录下的所有文件
  $zip_cmd $zipname *
  # 移动压缩包到/backup/web目录并删除多余的备份文件
  mv $zipname $backup_dir/web/
  find $backup_dir/web/ -maxdepth 1 -name "web_*.zip" -type f -printf "%T@ %p\n" | sort -n | head -n -5 | cut -d' ' -f2 | xargs rm -f
}
# 备份数据库并压缩
backup_db() {
  # 拼接压缩包的名字
  filename=db_${date}_${random}.gz
  # 备份数据库并压缩
  mysqldump --defaults-file=/etc/my.cnf -C --single-transaction $database | gzip > $filename 2>>$log_file
  # 移动压缩包到/backup/sql目录并删除多余的备份文件
  mv $filename $backup_dir/sql/
  find $backup_dir/sql/ -name "db_*.gz" -type f -printf "%T@ %p\n" | sort -n | head -n -5 | cut -d' ' -f2 | xargs rm -f
}
# 同步最新的备份文件到OneDrive,并删除多余的文件
sync_onedrive() {
  $rclone_cmd $backup_dir cysui:/test/  #请将cysui改为你在rclone挂载时创建的名字,/test/改为你在onedrive的目录
}
# 执行函数并写入日志

echo "**********开始备份网站文件**********" >> $log_file
cd $web_dir && backup_web && echo "备份成功 $(date)" >> $log_file || echo "备份失败 $(date)" >> $log_file
echo "**********结束备份网站文件**********" >> $log_file
echo "" >>  $log_file

echo "**********开始备份数据库**********" >> $log_file
cd $backup_dir && backup_db && echo "备份成功 $(date)" >> $log_file || echo "备份失败 $(date)" >> $log_file
echo "**********结束备份数据库**********" >> $log_file
echo "" >>  $log_file

echo "**********开始同步到OneDrive**********" >> $log_file
sync_onedrive && echo "同步成功 $(date)" >> $log_file || echo "同步失败 $(date)" >> $log_file
echo "**********结束同步到OneDrive**********" >> $log_file
echo "" >>  $log_file

给这个文件赋予可执行权限

chmod +x backup.sh

然后手动执行一次代码,需要等个十几二十秒就能上传到onedrive,到onedrive里看看是否存在。

/root/backup.sh

设置定时任务执行脚本

#输入
crontab -e
#选择vim或者nano编辑器都行

#在最后一行加入如下内容
0 2 * * * /root/backup.sh
#该参数表示每天2点的时候自动执行这个脚本,也可以改其他时间

lnmp环境下全自动备份脚本升级版

温馨提示:

本文最后更新于2023年08月28日,已超过178天没有更新,若内容或图片失效,请留言反馈。

历经两次重装系统,终于把这个新的脚本写好了。之前的那个脚本后把明文密码放在bash命令中,这样不是很安全,于是让bing ai帮我优化了下代码,结果它给的代码有些目录不全,导致把系统删了,所以这次仔仔细细了的检查了所有代码,并且拿其他机器测试十几次没问题后,才正式放到生产环境里。

这次脚本为上一篇《利用rclone对lnmp环境下的网站备份》的升级版,前面rclone挂载的步骤按照上一篇文章就好了,如果已经挂载,就不用管,直接看这篇文章就行。

准备事项

创建文件夹

在系统根目录创建backup文件夹,记得是系统根目录,不是root根目录,要注意区分。然后再到backup目录里创建web、sql、log这三个文件夹,再到log目录里创建backup.log文件,web指存放网站备份文件的地方,sql为存放数据库备份文件的地方,log为存放备份日志的目录,backup.log就是备份日志文件。

开启Mysqldump功能

#打开文件
nano /etc/my.cnf

#编辑文件
[client]
user        =root
password    = 你的数据库root密码
port        = 3306
socket        = /tmp/mysql.sock

我们只需要把前面几行改成这样就可以了,然后按ctrl+x保存,输入y确认,回车保存文件。

自动备份代码

完成上面操作后,到root根目录将如下代码放到backup.sh里,因为没有这个文件,我们需要手动创建。

#创建backup.sh文件
nano /root/backup.sh

将如下代码粘贴到这个文件里,并且保存

#!/bin/bash -e
# 设置变量
web_dir=/home/wwwroot/yunlogs.com  #请将yunlogs.com改为你的网站目录
database=vliang  #请将vliang改为你的数据库名
backup_dir=/root/backup
log_file=/root/backup/log/backup.log
date=$(date +"%Y%m%d%H%M%S")
random=$(shuf -i 10000-99999 -n 1)
zip_cmd="zip -q -r" # 压缩命令
rclone_cmd="rclone sync" # 同步命令
# 定义函数
# 备份网站文件并压缩
backup_web() {
  # 拼接压缩包的名字
  zipname=web_${date}_${random}.zip
  # 进入网站目录
  cd $web_dir
  # 压缩当前目录下的所有文件
  $zip_cmd $zipname *
  # 移动压缩包到/backup/web目录并删除多余的备份文件
  mv $zipname $backup_dir/web/
  find $backup_dir/web/ -maxdepth 1 -name "web_*.zip" -type f -printf "%T@ %p\n" | sort -n | head -n -5 | cut -d' ' -f2 | xargs rm -f
}
# 备份数据库并压缩
backup_db() {
  # 拼接压缩包的名字
  filename=db_${date}_${random}.gz
  # 备份数据库并压缩
  mysqldump --defaults-file=/etc/my.cnf -C --single-transaction $database | gzip > $filename 2>>$log_file
  # 移动压缩包到/backup/sql目录并删除多余的备份文件
  mv $filename $backup_dir/sql/
  find $backup_dir/sql/ -name "db_*.gz" -type f -printf "%T@ %p\n" | sort -n | head -n -5 | cut -d' ' -f2 | xargs rm -f
}
# 同步最新的备份文件到OneDrive,并删除多余的文件
sync_onedrive() {
  $rclone_cmd $backup_dir cysui:/test/  #请将cysui改为你在rclone挂载时创建的名字,/test/改为你在onedrive的目录
}
# 执行函数并写入日志

echo "**********开始备份网站文件**********" >> $log_file
cd $web_dir && backup_web && echo "备份成功 $(date)" >> $log_file || echo "备份失败 $(date)" >> $log_file
echo "**********结束备份网站文件**********" >> $log_file
echo "" >>  $log_file

echo "**********开始备份数据库**********" >> $log_file
cd $backup_dir && backup_db && echo "备份成功 $(date)" >> $log_file || echo "备份失败 $(date)" >> $log_file
echo "**********结束备份数据库**********" >> $log_file
echo "" >>  $log_file

echo "**********开始同步到OneDrive**********" >> $log_file
sync_onedrive && echo "同步成功 $(date)" >> $log_file || echo "同步失败 $(date)" >> $log_file
echo "**********结束同步到OneDrive**********" >> $log_file
echo "" >>  $log_file

给这个文件赋予可执行权限

chmod +x backup.sh

然后手动执行一次代码,需要等个十几二十秒就能上传到onedrive,到onedrive里看看是否存在。

/root/backup.sh

设置定时任务执行脚本

#输入
crontab -e
#选择vim或者nano编辑器都行

#在最后一行加入如下内容
0 2 * * * /root/backup.sh
#该参数表示每天2点的时候自动执行这个脚本,也可以改其他时间

赞 (0)

评论区(暂无评论)

这里空空如也,快来评论吧~

我要评论

点击验证后再提交