在网上查询了一下halo定时备份有三种方案:邮箱和Dropbox,以及github。
1. 备份到QQ邮箱
1.1. 安装邮件发送依赖组件
1.1.1. Centos 7
1
| yum install sendmail mailx -y
|
1.1.2. Centos 8
1 2 3
| yum -y install postfix sendmail-cf mailx service postfix start sudo systemctl enable postfix
|
1.2. 修改附件发送大小限制
看下现在邮件的大小限制:
1
| sudo postconf message_size_limit
|
message_size_limit = 10240000
差不多是10M,放大10倍,应该差不多了。
1
| sudo postconf -e "message_size_limit = 102400000"
|
1.3. 获得&编辑备份脚本
1
| wget https://raw.githubusercontent.com/iwyang/scripts/master/halo_email_backup.sh
|
1.3.1. 创建备份文件夹
如果选择将文件备份到临时目录的话,这步可跳过,直接修改脚本即可。我直接跳过了这一步。
1.3.2. 修改脚本
脚本原来模样:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| #!/bin/bash # 进入到备份文件夹 cd /home/back #压缩网站数据 tar zcvf web_$(date +"%Y%m%d").tar.gz 网站目录 # 导出数据库到备份文件夹内 mysqldump -uroot -p数据库密码 数据库名称 > web_data_$(date +"%Y%m%d").sql # 以附件形式发送数据库到指定邮箱 echo "Blog date"|mail -s "Backup$(date +%Y-%m-%d)" -a web_data_$(date +"%Y%m%d").sql 收件人邮箱 # 删除本地3天前的数据 rm -rf web_$(date -d -3day +"%Y%m%d").tar.gz web_data_$(date -d -3day +"%Y%m%d").sql # 登录FTP lftp ftp地址 -u ftp用户名,ftp密码 << EOF # 进入FTP根目录 cd ftp根目录文件夹 # 删除3天前备份文件 mrm web_$(date -d -3day +"%Y%m%d").tar.gz mrm web_data_$(date -d -3day +"%Y%m%d").sql # 上传当天备份文件 mput web_$(date +"%Y%m%d").tar.gz mput web_data_$(date -d -3day +"%Y%m%d").sql bye EOF
|
根据实际需求,改成下面模样:
1 2 3 4 5
| #!/bin/bash cd /tmp tar zcvf web_$(date +"%Y%m%d").tar.gz /root/.halo echo "Blog date"|mail -s "Backup$(date +%Y-%m-%d)" -a web_$(date +"%Y%m%d").tar.gz 455343442@qq.com rm -f web_$(date +"%Y%m%d").tar.gz
|
上面代码中最后的rm -f web_$(date +"%Y%m%d").tar.gz
,表示删除本地的临时文件。
1.4. 设置定时任务
1.4.1. 赋予文件执行权限
1
| chmod +x /root/halo_email_backup.sh
|
运行的时候就输入下面的代码即可:./halo_email_backup.sh
1.4.2. 设定自动任务
1
| 01 00 * * * /root/halo_email_backup.sh
|
意思是每天凌晨0:01运行这个脚本。
2. 备份到Dropbox
2.1. 创建Dropbox应用
首先,需要创建一个Dropbox应用,可以从该网址进行创建:https://www.dropbox.com/developers/apps/create
在这里,应用类型选择Dropbox API
,数据存储类型选择App folder
,然后命名
创建。然后记录下App key
,App secret
,token
,下面要用。
2.2. 下载dropbox_uploader.sh
dropbox_uploader 是一个第三方Dropbox备份脚本,首先下载脚本:
1
| curl "https://raw.githubusercontent.com/andreafabrizi/Dropbox-Uploader/master/dropbox_uploader.sh" -o dropbox_uploader.sh
|
然后,为该脚本添加执行权限:
1
| chmod +x dropbox_uploader.sh
|
执行该脚本,绑定APP:
根据提示输入Dropbox应用中的token
,然后输入y
确认。
之后可以执行下面的命令测试上传,提示Done就是绑定成功了:
1
| ./dropbox_uploader.sh upload /etc/passwd /backup/passwd.old
|
2.3. 编写备份脚本
编写定时备份脚本,取名为backup.sh
。代码原来模样如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| #!/bin/bash SCRIPT_DIR="/root" #这个改成你存放刚刚下载下来的dropbox_uploader.sh的文件夹位置 DROPBOX_DIR="/backup" #这个改成你的备份文件想要放在Dropbox下面的文件夹名称,如果不存在,脚本会自动创建 BACKUP_SRC="/home/wwwroot /usr/local/nginx/conf" #这个是你想要备份的本地服务器上的文件,不同的目录用空格分开 BACKUP_DST="/tmp" #这个是你暂时存放备份压缩文件的地方,一般用/tmp即可 MYSQL_SERVER="localhost" #这个是你mysql服务器的地址,一般填这个本地地址即可 MYSQL_USER="mysqluser" #这个是你mysql的用户名名称,比如root或admin之类的 MYSQL_PASS="password" #这个是你mysql用户的密码 # 下面的一般不用改了 NOW=$(date +"%Y.%m.%d") DESTFILE="$BACKUP_DST/$NOW.tar.gz" # 备份mysql数据库并和其它备份文件一起压缩成一个文件 mysqldump -u $MYSQL_USER -h $MYSQL_SERVER -p$MYSQL_PASS --all-databases > "$NOW-Databases.sql" echo "数据库备份完成,打包网站数据中..." tar cfzP "$DESTFILE" $BACKUP_SRC "$NOW-Databases.sql" echo "所有数据打包完成,准备上传..." # 用脚本上传到dropbox $SCRIPT_DIR/dropbox_uploader.sh upload "$DESTFILE" "$DROPBOX_DIR/$NOW.tar.gz" if [ $? -eq 0 ];then echo "上传完成" else echo "上传失败,重新尝试" fi # 删除本地的临时文件 rm -f "$NOW-Databases.sql" "$DESTFILE"
|
根据实际情况改成下面模样:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #!/bin/bash SCRIPT_DIR="/root" DROPBOX_DIR="/backup" BACKUP_SRC="/root/.halo" BACKUP_DST="/tmp" NOW=$(date +"%Y.%m.%d") DESTFILE="$BACKUP_DST/$NOW.tar.gz" echo "打包网站数据中..." tar cfzP "$DESTFILE" $BACKUP_SRC echo "所有数据打包完成,准备上传..." $SCRIPT_DIR/dropbox_uploader.sh delete "$DROPBOX_DIR" $SCRIPT_DIR/dropbox_uploader.sh upload "$DESTFILE" "$DROPBOX_DIR/$NOW.tar.gz" if [ $? -eq 0 ];then echo "上传完成" else echo "上传失败,重新尝试" fi rm -f "$DESTFILE"
|
先用$SCRIPT_DIR/dropbox_uploader.sh delete "$DROPBOX_DIR"
删除Dropbox
备份文件夹,再上传文件。这样就保证Dropbox
永远只有一个最新的备份文件,不用手动删除多余的备份文件了。
当然也可以通过脚本设置保留旧数据的时长。如下面一个脚本就是让旧数据在Dropbox保留7天,本地保留10天。(不过觉得没有必要,还是上面的方法简单,下面方法尝试过,老是出现问题,旧数据删除不了,不想折腾了)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| #!/bin/bash # 定义需要备份的目录 WEB_DIR=/home/www # 网站数据存放目录 # 定义备份存放目录 DROPBOX_DIR=/$(date +%Y-%m-%d) # Dropbox上的备份目录 LOCAL_BAK_DIR=/home/backup # 本地备份文件存放目录 # 定义备份文件名称 DBBakName=DB_$(date +%Y%m%d).tar.gz WebBakName=Web_$(date +%Y%m%d).tar.gz # 定义旧数据名称 Old_DROPBOX_DIR=/$(date -d -7day +%Y-%m-%d) OldDBBakName=DB_$(date -d -10day +%Y%m%d).tar.gz OldWebBakName=Web_$(date -d -10day +%Y%m%d).tar.gz cd $LOCAL_BAK_DIR #使用命令导出数据库 mongodump --out $LOCAL_BAK_DIR/mongodb/ --db bastogne #压缩数据库文件合并为一个压缩文件 tar zcf $LOCAL_BAK_DIR/$DBBakName $LOCAL_BAK_DIR/mongodb rm -rf $LOCAL_BAK_DIR/mongodb #压缩网站数据 cd $WEB_DIR tar zcf $LOCAL_BAK_DIR/$WebBakName .
|
2.4. 赋予文件执行权限
运行的时候就输入下面的代码即可:./backup.sh
2.5. 设置定时任务
1
| 02 00 * * * /root/backup.sh
|
这样,就可以每天凌晨00:02自动备份到Dropbox了。
2.6. 修改时区
如果你不知道服务器当前时间,可以使用下面的命令,查看当前时间:
修改当前时区为上海(这步未进行):
1
| cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
|
3. 备份到github
3.1. 准备工作
首先当然是在服务器上安装GIt
,配置ssh公钥
,并且在github
上添加服务器ssh公钥
。具体过程略。
3.2. 初始化仓库
1 2 3 4 5 6
| cd /root/.halo git init git remote add origin git@github.com:iwyang/halo.git git add . git commit -m "site backup" git push --force origin master
|
注意要删除主题文件夹下的.git
文件夹,不然的话就无法备份主题了。当然也可以不备份主题,因为主题所有配置选项都在数据库里。如果这样的话,命令要作如下调整:
1
| git add application.yaml upload/ db/
|
3.3. 设置定时任务
3.3.1.编写备份脚本
脚本原来模样:
1 2 3 4 5 6 7 8
| #!/bin/bash #进入到网站根目录,记得修改为自己的站点 cd /home/xxx.com #将数据库导入到该目录,这里以mysql为例,passwd为数据库密码,typecho为数据库名称,typecho.sql为备份的数据库文件 mysqldump -uroot -ppasswd typecho > typecho.sql git add -A git commit -m "backsite" git push -u origin master
|
根据实际情况修改如下:
1 2 3 4 5 6
| #!/bin/bash echo -e "\033[0;32mDeploying updates to github...\033[0m" cd /root/.halo git add . git commit -m "site backup" git push --force origin master
|
为了防止服务器里.git
文件夹过大,脚本可以作如下调整:
1 2 3 4 5 6 7 8 9 10
| #!/bin/bash echo -e "\033[0;32mDeploying updates to github...\033[0m" cd /root/.halo rm -rf .git git init git remote add origin git@github.com:iwyang/halo.git git add . git commit -m "site backup" git push --force origin master rm -rf .git
|
3.3.2. 赋予文件执行权限
1
| chmod +x /root/github.sh
|
3.3.3. 设定自动任务
1
| 03 00 * * * /root/github.sh
|
意思是每天凌晨0:03运行这个脚本。
3.4. 还原博客
1
| git clone git@github.com:iwyang/halo.git .halo
|
接下来就是配置个 Java 环境,下载个 Halo 运行包,配置域名访问。具体可参考官方文档。
4. 总结
halo
博客迁移后,最好删除logs
文件夹下的日志文件。
5. SCP命令
5.1. 下载文件
从服务器下载文件到本地,在Git Bash
执行:
1
| scp root@104.224.191.88:/root/.ssh/mysite ssh
|
意思是将服务器/root/.ssh
目录下的mysite文件复制到当前路径下ssh
文件夹下。
5.2. 上传文件
从本地上传文件到服务器,在Git Bash
执行:
1
| scp .halo.zip root@137.220.43.191:/root/
|
意思是将当前目录下.halo.ip
文件上传到服务器/root/目录下
。
6. wordpress常用命令
附录:wordpress常用mysql命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| mysqladmin -u root -p drop wordpress
mysqladmin -u root -p create wordpress
mysql -uroot -p”你的密码” wordpress < 你的数据sql文件
mysql -u root -p
use wordpress
SELECT * FROM wp_options WHERE option_name = 'home'; UPDATE wp_options SET option_value="https://new_url/" WHERE option_name = "home";
SELECT * FROM wp_options WHERE option_name = 'siteurl'; UPDATE wp_options SET option_value="https://new_url/" WHERE option_name = "siteurl";
|
6. 参考链接