Rclone开机自动挂载onedrive备份网站数据
因为网站数据没备份重新搞一次有点头大,手里有几个onedrive账号,刚好用来备份。
1. 获取微软账号的client_id和client_secret
访问https://portal.azure.com/#blade/Microsoft_AAD_RegisteredApps/ApplicationsListBlade点击应用注册→新注册
名称随意,帐户类型选第三个,选Web,URL自己填一个,点击注册
在返回的页面将看到应用程序(客户端) ID,这个就是等会儿要用的client_id。
点击API权限→添加权限→Microsoft Graph
点击委托的权限,勾选Files.Read, Files.ReadWrite, Files.Read.All, Files.ReadWrite.All, offline_access, User.Read 和 Sites.Read.All(可选),添加权限
添加客户端密码(client_secret),点击证书和密码→新客户端密码,填入说明和截至期限,有效期最长2年,点击添加。
值即为client_secret。
2.安装配置rclone
因为VPS没浏览器,所以本地Windows和VPS都需要装rclone,下载地址在这里rclone
VPS安装
sudo -v ; curl https://rclone.org/install.sh | sudo bash
rclone config
会让你输入一个名字,随便输入一个。存储我这里选的35
client_id和client_secret填入上面微软注册应用生成的。我这个是国际版选的1,编辑高级配置n,是否用浏览器(web browser)验证,选择n
将生成的rclone authorize这一大长串儿复制,
windows解压下载的rclone压缩包,在目录打开终端。粘贴上面复制的东西,rclone换成.\rclone.exe
将会自动打开浏览器,登录验证就行。
接受会看到这个。
把终端生成的token复制粘贴到VPS填入config_token处
最后回车配置就生成好了
3.开机自动挂载onedrive
创建挂载目录
mkdir /onedrive
创建/usr/local/bin/rclone.sh文件,写入
#!/bin/bash
rclone mount syncone: /onedrive --allow-other --allow-non-empty --vfs-cache-mode writes
添加执行权限chmod +x /usr/local/bin/rclone.sh
创建/etc/systemd/system/rclone-mount.service文件,写入
[Unit]
Description=Rclone Mount Service
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
ExecStart=/usr/local/bin/rclone.sh
ExecStop=/bin/fusermount -u /one
Restart=on-failure
User=root
[Install]
WantedBy=multi-user.target
开机自启
systemctl enable rclone-mount.service
重启验证。
4. 自动备份
mkdir /backup
vi /backup/backup.sh
chmod +x /backup/backup.sh
#写入
#!/bin/bash
# The script is used to backup wordpress and database;
DATE=`date +%Y-%m-%d_%s`
cd /backup
/usr/local/mysql/bin/mysqldump 数据库名字 > db_$DATE.sql
tar -zc /var/www/wordpress db_$DATE.sql | gpg -er [email protected] > wordpress.$DATE.tgz.gpg #这一步是用gpg加密网站文件
/bin/rm -f db_$DATE.sql
/bin/cp -ar wordpress.$DATE.tgz.gpg /onedrive/
find /backup/ -mtime +7 -type f -name \*.tgz.gpg -exec rm -f {} \; #删除7天以上备份
exit 0
创建备份数据库用户并授予权限
mysql> CREATE USER 'backupuser'@'localhost' IDENTIFIED BY '这里是数据库用户密码';
mysql> GRANT PROCESS ON *.* TO 'backupuser'@'localhost' ;
mysql> GRANT SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER ON `dbname`.* TO 'backupuser'@'localhost' ;
创建~/.my.cnf文件写入数据库用户名和密码
[mysqldump]
user=backupuser
password=xxxxxx
crontab -e
设置定时任务,每天凌晨2点备份一次。
0 2 * * * bash /backup/backup.sh &> /backup/backup.log
大功告成。
参考链接:
https://rclone.org/onedrive/