瞎BB
做网站的都知道数据的重要性,肯定能想起来时刻备份网站或者数据库,原来我弄的是将这些文件备份到本地,然后增量备份到另一台vps上。
但是另一台vps不想维护了,毕竟在一直吃灰,而不备份是不可能的,那就备份到本地?太麻烦了,而且会老是忘记,于是就折腾了这一遭,备份到阿里云盘上,美滋滋。
当然,最好能双备份,也就是说最好能备份到两个不同的地方,否则,你懂的,特别是网络上的事情、特别是套路云。
阿里云盘
仿Linux shell文件处理命令的阿里云盘命令行客户 支持以下特色功能:
- 多平台支持,支持Windows,macOS,linux(x86/x64/arm)等
- 阿里云盘多用户支持
- 支持文件网盘,相册网盘无缝切换
- 支持导入/导出功能,快速备份(导出)和恢复(导入)网盘的文件
- 下载网盘内文件,支持多个文件或目录下载,支持断点续传和单文件并行下载
- 上传本地文件,支持多个文件或目录上传,支持排除指定文件夹/文件(正则表达式)功能
- 备份本地文件,支持备份本地文件夹到网盘中,保持本地文件和网盘文件同步.常用于嵌入式或者NAS等设备.
安装阿里云盘
github地址:tickstep/aliyunpan: 阿里云盘命令行客户端 (github.com)
### 以下有部分操作图片中没有,按照教程来就可以
# 进入opt目录
cd /opt
# 下载安装包
wget https://download.fastgit.org/tickstep/aliyunpan/releases/download/v0.0.2/aliyunpan-v0.0.2-linux-amd64.zip
# 解压
unzip aliyunpan-v0.0.2-linux-amd64.zip
# 重命名文件夹
mv aliyunpan-v0.0.2-linux-amd64/ aliyunpan/
# 进入aliyunpan目录
cd aliyunpan/
# 运行aliyunpan
./aliyunpan
登录
首先,必须先登录.目前支持使用RefreshToken
进行登录,RefreshToken
可以参考以下步骤获取,以Chrome
浏览器为例,其他浏览器类似.打开阿里云盘网页并进行登录,然后F12按键打开浏览器调试菜单,选择应用,在左边选择本地存储,找到token
使用login -RefreshToken=你的RefreshToken值
登录
之后输入exit
退出
编写脚本& 修改backup.sh文件权限
在win下编辑文件后,复制到linux上,很可能会报错,若不能执行,先转换一下
#!/bin/bash
# -------------------------------------------------------------------------------
# 设置mysql的登录用户名和密码(根据实际情况填写),注意下面这些路径和执行aliyunpan的路径
WEB_PATH=/www/wwwroot/www.chahuxz.com #网站根目录
ALIYUNPAN_PATH=/site_backup #阿里网盘内的文件夹路径
MYSQL_USER="root" #数据库用户
MYAQL_PASSWORD="r1111111111111" #数据库密码
MYSQL_HOST="localhost" #数据库IP(本地)
MYSQL_PORT="3306" #数据库端口
BACKUP_DIR=/data/aliyun_backup #备份到哪个目录
DATE=`date +%Y%m%d%H%M` #时间
#14天前的时间
ALI_DATE=`date +%Y%m%d%H%M -d '-14 day'`
#删除云端数据(14天以前的数据)
MYSQL_ALI="mysql_backup_$ALI_DATE.sql"
WEB_ALI="WEB_$ALI_DATE.tar.gz"
/data/aliyunpan/aliyunpan rm $ALIYUNPAN_PATH/$MYSQL_ALI $ALIYUNPAN_PATH/$WEB_ALI
# 删除本地备份数据(删除7天以前的备份数据)
echo "正在删除7天以前的本地备份数据!!!"
find $BACKUP_DIR -mtime +7 -type f -name '*.sql' -exec rm -rf {} \;
find $BACKUP_DIR -mtime +7 -type f -name '*.tar.gz' -exec rm -rf {} \;
# 备份全部数据库
mysqldump -h$MYSQL_HOST -u$MYSQL_USER -p$MYAQL_PASSWORD -P$MYSQL_PORT --all-databases >$BACKUP_DIR/mysql_backup_$DATE.sql
if [ $? -eq 0 ]; then
echo "备份成功,时间:" $(date +"%Y-%m-%d %H:%M:%S")
#备份html文件
tar zcPf $BACKUP_DIR/WEB_${DATE}.tar.gz $WEB_PATH
if [ $? -eq 0 ]; then
echo "备份网站根目录成功,路径:$BACKUP_DIR/WEB_${DATE}.tar.gz"
if [ $? -eq 0 ]; then
# 调用aliyunpan上传备份的文件
/data/aliyunpan/aliyunpan upload $BACKUP_DIR/mysql_backup_$DATE.sql $BACKUP_DIR/WEB_${DATE}.tar.gz $ALIYUNPAN_PATH
else
echo "上传文件出错,请检查日志!!!"
fi
else
echo "备份网站根目录出错,请检查日志!!!"
fi
else
echo "备份数据库出错,请检查日志!!!"
fi
chmod 755 /data/backup.sh
crontab 定时任务跑起来
vim /etc/crontab
#每天早上2点执行数据库和html备份脚本
0 2 * * * root /opt/backup.sh > /opt/backup.log 2>&1 &
#注意crontab服务重启一下
service crond restart
如果出现sh脚本不能执行的话
可能是你在windwos中复制过去的,导致在linux中跑不动,此时,需要简单处理一下
Error处理:/bin/bash^M: 坏的解释器: 没有该文件或目录(bad interpreter: No such file or directory)
在Windows下每一行结尾是\n\r,而Linux下则是\n
,将sh中的行尾的\r替换为空白
- 背景—执行.sh脚本时出现$’\r’: 未找到命令,
- 原因—是因为命令直接从windows 复制过来导致的
- 解决—安装后,执行编译转换后,再次执行你那个sh文件就ok
yum install dos2unix
dos2unix **.sh
查看阿里网盘上传是否成功. [c-alert type=”warning”]文件名对不上是因为这个脚本被我改版过很多次,图片截图时间也不一样略过就好[/c-alert]
下载阿里网盘文件/目录
# aliyunpan download <网盘文件或目录的路径1> <文件或目录2> <文件或目录3> ...
# 将阿里云盘中2021-09-25 08:22的WEB和数据库文件下载到本地
/opt/aliyunpan/aliyunpan download /backup/WEB_202109250813.tar.gz /backup/mysql_backup_202109250813.sql
# 下面这个和上面一样不过命令简短
# aliyunpan d <网盘文件或目录的路径1> <文件或目录2> <文件或目录3> ...
[c-alert type=”warning”]下载路径请看输出信息!!![/c-alert]
列出帐号列表
aliyunpan loglist
列出所有已登录的帐号
获取当前帐号
aliyunpan who
切换阿里云盘帐号
切换已登录的帐号
aliyunpan su <uid>
aliyunpan su
请输入要切换帐号的 # 值 >
退出阿里云盘帐号
退出当前登录的帐号
aliyunpan logout
程序会进一步确认退出帐号, 防止误操作.
刷新Token
由于阿里云盘的RefreshToken是会过期的,为了延长最大过期时间,需要定期刷新Token,建议每小时刷新一次。 调用该命令可以自动刷新RefreshToken并保存到配置文件中,但是有一个前提,即Token必须还没有过期,如果Token已经过期是无法刷新的则只能重新登录。
刷新当前登录用户
aliyunpan token update
刷新所有登录的用户
aliyunpan token update -mode 2
如果你的aliyunpan工具是在Linux中运行,则建议你使用crontab定时任务进行Token自动刷新,例如
每小时执行一次Token刷新任务
*/60 * * * * /<your path>/aliyunpan token update -mode 2
本文地址: Linux自动备份网站文件或数据库阿里网盘上