From 0e586092b8057ba7722a4b17ae1bddf68811e8a8 Mon Sep 17 00:00:00 2001 From: iwyang <455343442@qq.com> Date: Sat, 23 Jul 2022 19:38:45 +0800 Subject: [PATCH] site backup --- ...75\347\232\204\346\226\271\346\263\225.md" | 1066 +++++++++-------- 1 file changed, 576 insertions(+), 490 deletions(-) diff --git "a/source/_posts/halo\345\256\232\346\227\266\345\244\207\344\273\275\347\232\204\346\226\271\346\263\225.md" "b/source/_posts/halo\345\256\232\346\227\266\345\244\207\344\273\275\347\232\204\346\226\271\346\263\225.md" index 97ec90bc44..083a48f701 100644 --- "a/source/_posts/halo\345\256\232\346\227\266\345\244\207\344\273\275\347\232\204\346\226\271\346\263\225.md" +++ "b/source/_posts/halo\345\256\232\346\227\266\345\244\207\344\273\275\347\232\204\346\226\271\346\263\225.md" @@ -1,490 +1,576 @@ ---- -title: halo定时备份的方法 -categories: - - 技术 -tags: - - halo -abbrlink: 3a4bd17 -date: 2020-07-26 13:49:25 -cover: false ---- - - - - 在网上查询了一下halo定时备份有三种方案:邮箱和Dropbox,以及github。 - -## 备份到QQ邮箱 - -### **安装邮件发送依赖组件** - -#### Centos 7 - -```bash -yum install sendmail mailx -y -``` - -#### Centos 8 - -```bash -yum -y install postfix sendmail-cf mailx -service postfix start -sudo systemctl enable postfix -``` -#### Debian -1. 安装 mailtuils: -```bash -sudo apt install mailutils -y -``` -2. 安装postfix后缀: -```bash -sudo apt install postfix -``` -在安装过程即将结束时,您将看到一个类似于下图中的窗口的窗口。默认选项是`Internet Site`。这是本教程的推荐选项,请按`TAB`,然后按`ENTER`。 -之后,您将获得另一个窗口,就像下一个图像中的窗口一样。该系统邮件名称应该是一样的,你分配给服务器,当你在创造它的名字。如果它显示子域`subdomain.example.com`,请将其更改为`ust example.com`。完成后,按`TAB`,然后`ENTER`。 - - - -### 修改附件发送大小限制 - -看下现在邮件的大小限制: - -```bash -sudo postconf message_size_limit -``` - -
message_size_limit = 20480000
- -差不多是10M,放大20倍,应该差不多了。 - -```bash -sudo postconf -e "message_size_limit = 204800000" -``` - -### 获得&编辑备份脚本 - -```bash -wget https://raw.githubusercontent.com/iwyang/scripts/master/halo_email_backup.sh -``` - -#### 创建备份文件夹 - -
如果选择将文件备份到临时目录的话,这步可跳过,直接修改脚本即可。我直接跳过了这一步。
- -```bash -mkdir -p /home/back -``` - -#### 修改脚本 - -脚本原来模样: - -```js -#!/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 -``` - -根据实际需求,改成下面模样: - -``` -vi email.sh -``` - -```js -#!/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`,表示删除本地的临时文件。 ->**注意**在**Debian**下要讲`-a` 改成 `-A`(如下) - -```diff -- echo "Blog date"|mail -s "Backup$(date +%Y-%m-%d)" -a web_$(date +"%Y%m%d").tar.gz 455343442@qq.com -+ echo "Blog date"|mail -s "Backup$(date +%Y-%m-%d)" -A web_$(date +"%Y%m%d").tar.gz 455343442@qq.com -``` - -#### 设置定时任务 - -##### 赋予文件执行权限 - -```bash -chmod +x /root/email.sh -``` - -运行的时候就输入下面的代码即可:`./halo_email_backup.sh` - -##### 设定自动任务 - -```bash -crontab -e -``` - -```bash -01 00 * * * /root/email.sh -``` - -意思是每天凌晨0:01运行这个脚本。 - -## 备份到Dropbox - -### 创建Dropbox应用 - -首先,需要创建一个Dropbox应用,可以从该网址进行创建:https://www.dropbox.com/developers/apps/create - -在这里,应用类型选择`Dropbox API`,数据存储类型选择`App folder`,然后`命名`创建。然后切换到`Permissions`选项卡,勾选相应权限。最后记录下`App key`,`App secret`,下面要用。 - -![](../img/halo%E5%AE%9A%E6%97%B6%E5%A4%87%E4%BB%BD%E7%9A%84%E6%96%B9%E6%B3%95/dropbox_uploader.jpg) - -### 下载dropbox_uploader.sh - -[dropbox_uploader](https://github.com/andreafabrizi/Dropbox-Uploader/) 是一个第三方Dropbox备份脚本,首先下载脚本: - -```bash -curl "https://raw.githubusercontent.com/andreafabrizi/Dropbox-Uploader/master/dropbox_uploader.sh" -o dropbox_uploader.sh -``` - -然后,为该脚本添加执行权限: - -```bash -chmod +x dropbox_uploader.sh -``` - -执行该脚本,绑定APP: - -```bash -./dropbox_uploader.sh -``` -在终端里输入`App key`,`App secret`,接着会返回一个网址,浏览器打开,复制得到的`token`,最后在终端里完成绑定。 - -之后可以执行下面的命令测试上传,提示Done就是绑定成功了: - -```bash -./dropbox_uploader.sh upload /etc/passwd /backup/passwd.old -``` -如果报错`unlink`,先执行命令`rm ~/.dropbox_uploader`,删除相应文件夹,然后删除上面申请的APP。按上面的操作重新申请 - -APP、重新绑定,一般第二次申请就会成功。 - -### 编写备份脚本 - -编写定时备份脚本,取名为`backup.sh`。代码原来模样如下: - -```bash -vi backup.sh -``` - -```js -#!/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" -``` - -根据实际情况改成下面模样: - -```js -#!/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天。(不过觉得没有必要,还是上面的方法简单,下面方法尝试过,老是出现问题,旧数据删除不了,不想折腾了) - -```js -#!/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 ./* - -cd ~ -#开始上传 -./dropbox_uploader.sh upload $LOCAL_BAK_DIR/$DBBakName $DROPBOX_DIR/$DBBakName -./dropbox_uploader.sh upload $LOCAL_BAK_DIR/$WebBakName $DROPBOX_DIR/$WebBakName - -#删除旧数据 -rm -rf $LOCAL_BAK_DIR/$OldDBBakName $LOCAL_BAK_DIR/$OldWebBakName -./dropbox_uploader.sh delete $Old_DROPBOX_DIR/ - -echo -e "Backup Done!" -``` - ---- - -### 赋予文件执行权限 - -```bash -chmod +x backup.sh -``` - -运行的时候就输入下面的代码即可:`./backup.sh` - -### 设置定时任务 - -```bash -crontab -e -``` - -```bash -02 00 * * * /root/backup.sh -``` - -这样,就可以每天凌晨00:02自动备份到Dropbox了。 - -## 备份到github - -### 准备工作 - -首先当然是在服务器上安装`GIt`,配置`ssh公钥`,并且在`github`上添加服务器`ssh公钥`。具体过程略。 - -### 初始化仓库 - -```bash -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`文件夹,不然的话就无法备份主题了。当然也可以不备份主题,因为主题所有配置选项都在数据库里。如果这样的话,命令要作如下调整: - -```bash -git add application.yaml upload/ db/ -``` - ---- - -### 设置定时任务 - -#### 编写备份脚本 - -```bash -cd /root -vi github.sh -``` - -脚本原来模样: - -```js -#!/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 -``` - -根据实际情况修改如下: - -```js -#!/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`文件夹过大,脚本可以作如下调整: - -```js -#!/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 -``` - -#### 赋予文件执行权限 - -```bash -chmod +x /root/github.sh -``` - -#### 设定自动任务 - -```bash -crontab -e -``` - -```js -03 00 * * * /root/github.sh -``` - -意思是每天凌晨0:03运行这个脚本。 - -### 还原博客 - -```bash -git clone git@github.com:iwyang/halo.git .halo -``` - - 接下来就是配置个 Java 环境,下载个 Halo 运行包,配置域名访问。具体可参考[官方文档](https://halo.run/)。 - -## 总结 - -`halo`博客迁移后,最好删除`logs`文件夹下的日志文件。 - ---- - -## SCP命令 - -### 下载文件 - -从服务器下载文件到本地,在`Git Bash`执行: - -```bash -scp root@104.224.191.88:/root/.ssh/mysite ssh -``` - -意思是将服务器`/root/.ssh`目录下的mysite文件复制到当前路径下`ssh`文件夹下。 - -### 上传文件 - -从本地上传文件到服务器,在`Git Bash`执行: - -```bash -scp .halo.zip root@137.220.43.191:/root/ -``` - -意思是将当前目录下`.halo.ip`文件上传到服务器`/root/目录下`。 - -## wordpress常用命令 - -
附录:wordpress常用mysql命令
- -```yaml -# 1.删除数据库 -mysqladmin -u root -p drop wordpress -# 2.新建一个空数据库 -mysqladmin -u root -p create wordpress -# 3.导入数据 -mysql -uroot -p”你的密码” wordpress < 你的数据sql文件 -# 4.更新Url -# 4.1.连接数据库 -mysql -u root -p -# 4.2. 选择数据库 -use wordpress -# 4.3.更新URL -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"; -``` - ---- - -## `nginx`: command not found 解决方案 - -只需要输入`source /etc/profile` ,让配置文件重新生效一下即可。 - -## 参考链接 - -+ [1.Linux 每日自动备份到FTP及数据库通过邮箱发送方法](https://www.moerats.com/archives/69/) -+ [2.fetchmail: SMTP error: 552 5.3.4 Message size exceeds fixed limit](http://blog.sina.com.cn/s/blog_7edf8b9f0100to4p.html) -+ [3.如何将服务器上的网站数据定时自动备份到Dropbox](http://sufaming.com/?p=189) -+ [4.Linux 定时备份服务器/网站数据到Github私人仓库](https://www.moerats.com/archives/858/) -+ [5.MySQL 教程](https://www.runoob.com/mysql/mysql-tutorial.html) -+ [6.Changing the WordPress site URL using the MySQL command line](https://precisionsec.com/changing-the-wordpress-site-url-using-the-mysql-command-line/) -+ [7.CentOs8系统安装mailx发邮件](https://blog.csdn.net/jia12216/article/details/106098267) -+ [8.Impossible to unlink](https://github.com/andreafabrizi/Dropbox-Uploader/issues/459) -+ [9.如何在Debian 9上安装和配置Postfix作为仅发送SMTP服务](https://cloud.tencent.com/developer/article/1363216) \ No newline at end of file +--- +title: halo定时备份的方法 +categories: + - 技术 +tags: + - halo +abbrlink: 3a4bd17 +date: 2020-07-26 13:49:25 +cover: false +--- + + + + 在网上查询了一下halo定时备份有三种方案:邮箱和Dropbox,以及github。 + +## 备份到QQ邮箱 + +### **安装邮件发送依赖组件** + +#### Centos 7 + +```bash +yum install sendmail mailx -y +``` + +#### Centos 8 + +```bash +yum -y install postfix sendmail-cf mailx +service postfix start +sudo systemctl enable postfix +``` +#### Debian +1. 安装 mailtuils: +```bash +sudo apt install mailutils -y +``` +2. 安装postfix后缀: +```bash +sudo apt install postfix +``` +在安装过程即将结束时,您将看到一个类似于下图中的窗口的窗口。默认选项是`Internet Site`。这是本教程的推荐选项,请按`TAB`,然后按`ENTER`。 +之后,您将获得另一个窗口,就像下一个图像中的窗口一样。该系统邮件名称应该是一样的,你分配给服务器,当你在创造它的名字。如果它显示子域`subdomain.example.com`,请将其更改为`ust example.com`。完成后,按`TAB`,然后`ENTER`。 + + + +### 修改附件发送大小限制 + +看下现在邮件的大小限制: + +```bash +sudo postconf message_size_limit +``` + +
message_size_limit = 20480000
+ +差不多是10M,放大20倍,应该差不多了。 + +```bash +sudo postconf -e "message_size_limit = 204800000" +``` + +### 获得&编辑备份脚本 + +```bash +wget https://raw.githubusercontent.com/iwyang/scripts/master/halo_email_backup.sh +``` + +#### 创建备份文件夹 + +
如果选择将文件备份到临时目录的话,这步可跳过,直接修改脚本即可。我直接跳过了这一步。
+ +```bash +mkdir -p /home/back +``` + +#### 修改脚本 + +脚本原来模样: + +```js +#!/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 +``` + +根据实际需求,改成下面模样: + +``` +vi email.sh +``` + +```js +#!/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`,表示删除本地的临时文件。 +>**注意**在**Debian**下要讲`-a` 改成 `-A`(如下) + +```diff +- echo "Blog date"|mail -s "Backup$(date +%Y-%m-%d)" -a web_$(date +"%Y%m%d").tar.gz 455343442@qq.com ++ echo "Blog date"|mail -s "Backup$(date +%Y-%m-%d)" -A web_$(date +"%Y%m%d").tar.gz 455343442@qq.com +``` + +#### 设置定时任务 + +##### 赋予文件执行权限 + +```bash +chmod +x /root/email.sh +``` + +运行的时候就输入下面的代码即可:`./halo_email_backup.sh` + +##### 设定自动任务 + +```bash +crontab -e +``` + +```bash +01 00 * * * /root/email.sh +``` + +意思是每天凌晨0:01运行这个脚本。 + +## 备份到Dropbox + +### 创建Dropbox应用 + +首先,需要创建一个Dropbox应用,可以从该网址进行创建:https://www.dropbox.com/developers/apps/create + +在这里,应用类型选择`Dropbox API`,数据存储类型选择`App folder`,然后`命名`创建。然后切换到`Permissions`选项卡,勾选相应权限。最后记录下`App key`,`App secret`,下面要用。 + +![](../img/halo%E5%AE%9A%E6%97%B6%E5%A4%87%E4%BB%BD%E7%9A%84%E6%96%B9%E6%B3%95/dropbox_uploader.jpg) + +### 下载dropbox_uploader.sh + +[dropbox_uploader](https://github.com/andreafabrizi/Dropbox-Uploader/) 是一个第三方Dropbox备份脚本,首先下载脚本: + +```bash +curl "https://raw.githubusercontent.com/andreafabrizi/Dropbox-Uploader/master/dropbox_uploader.sh" -o dropbox_uploader.sh +``` + +然后,为该脚本添加执行权限: + +```bash +chmod +x dropbox_uploader.sh +``` + +执行该脚本,绑定APP: + +```bash +./dropbox_uploader.sh +``` +在终端里输入`App key`,`App secret`,接着会返回一个网址,浏览器打开,复制得到的`token`,最后在终端里完成绑定。 + +之后可以执行下面的命令测试上传,提示Done就是绑定成功了: + +```bash +./dropbox_uploader.sh upload /etc/passwd /backup/passwd.old +``` +如果报错`unlink`,先执行命令`rm ~/.dropbox_uploader`,删除相应文件夹,然后删除上面申请的APP。按上面的操作重新申请 + +APP、重新绑定,一般第二次申请就会成功。 + +### 编写备份脚本 + +编写定时备份脚本,取名为`backup.sh`。代码原来模样如下: + +```bash +vi backup.sh +``` + +```js +#!/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" +``` + +根据实际情况改成下面模样: + +```js +#!/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天。(不过觉得没有必要,还是上面的方法简单,下面方法尝试过,老是出现问题,旧数据删除不了,不想折腾了) + +```js +#!/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 ./* + +cd ~ +#开始上传 +./dropbox_uploader.sh upload $LOCAL_BAK_DIR/$DBBakName $DROPBOX_DIR/$DBBakName +./dropbox_uploader.sh upload $LOCAL_BAK_DIR/$WebBakName $DROPBOX_DIR/$WebBakName + +#删除旧数据 +rm -rf $LOCAL_BAK_DIR/$OldDBBakName $LOCAL_BAK_DIR/$OldWebBakName +./dropbox_uploader.sh delete $Old_DROPBOX_DIR/ + +echo -e "Backup Done!" +``` + +--- + +### 赋予文件执行权限 + +```bash +chmod +x backup.sh +``` + +运行的时候就输入下面的代码即可:`./backup.sh` + +### 设置定时任务 + +```bash +crontab -e +``` + +```bash +02 00 * * * /root/backup.sh +``` + +这样,就可以每天凌晨00:02自动备份到Dropbox了。 + +## 备份到github + +### 准备工作 + +首先当然是在服务器上安装`GIt`,配置`ssh公钥`,并且在`github`上添加服务器`ssh公钥`。具体过程略。 + +### 初始化仓库 + +```bash +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`文件夹,不然的话就无法备份主题了。当然也可以不备份主题,因为主题所有配置选项都在数据库里。如果这样的话,命令要作如下调整: + +```bash +git add application.yaml upload/ db/ +``` + +--- + +### 设置定时任务 + +#### 编写备份脚本 + +```bash +cd /root +vi github.sh +``` + +脚本原来模样: + +```js +#!/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 +``` + +根据实际情况修改如下: + +```js +#!/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`文件夹过大,脚本可以作如下调整: + +```js +#!/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 +``` + +#### 赋予文件执行权限 + +```bash +chmod +x /root/github.sh +``` + +#### 设定自动任务 + +```bash +crontab -e +``` + +```js +03 00 * * * /root/github.sh +``` + +意思是每天凌晨0:03运行这个脚本。 + +### 还原博客 + +```bash +git clone git@github.com:iwyang/halo.git .halo +``` + + 接下来就是配置个 Java 环境,下载个 Halo 运行包,配置域名访问。具体可参考[官方文档](https://halo.run/)。 + +## 总结 + +`halo`博客迁移后,最好删除`logs`文件夹下的日志文件。 + +--- + +## SCP命令 + +### 下载文件 + +从服务器下载文件到本地,在`Git Bash`执行: + +```bash +scp root@104.224.191.88:/root/.ssh/mysite ssh +``` + +意思是将服务器`/root/.ssh`目录下的mysite文件复制到当前路径下`ssh`文件夹下。 + +### 上传文件 + +从本地上传文件到服务器,在`Git Bash`执行: + +```bash +scp .halo.zip root@137.220.43.191:/root/ +``` + +意思是将当前目录下`.halo.ip`文件上传到服务器`/root/目录下`。 + +## wordpress相关 + +### wordpress常用mysql命令 + +```yaml +# 1.删除数据库 +mysqladmin -u root -p drop wordpress +# 2.新建一个空数据库 +mysqladmin -u root -p create wordpress +# 3.导入数据 +mysql -uroot -p”你的密码” wordpress < 你的数据sql文件 +# 4.更新Url +# 4.1.连接数据库 +mysql -u root -p +# 4.2. 选择数据库 +use wordpress +# 4.3.更新URL +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"; +``` + +--- + +### Debian 10 五分钟/一键安装Wordpress + +```bash +#Debian8下载脚本 +wget http://w3.gubo.org/pubfiles/tylemp/10/tylemp.sh +#安装稳定版Nginx+PHP+MariaDB +bash tylemp.sh stable +#安装wordpress,www.yourdomain.com即为你的域名 +bash tylemp.sh wordpress www.yourdomain.com +``` + +命令列表 + +```bash +bash tylemp.sh system # 优化系统,删除不需要组件,dropbear替代sshd +bash tylemp.sh exim4 # 更轻量级邮件系统 +bash tylemp.sh mysql # 安装mysql +bash tylemp.sh nginx # 安装nginx,默认一个进程,可调整 +bash tylemp.sh php # 安装php,包含php5-gd,可使用验证码 +bash tylemp.sh stable # 安装上面所有,软件是debian官方stable源,版本较旧 +bash tylemp.sh wordpress www.yourdomain.com # 一键安装wordpress, 数据库自动配置好。 +bash tylemp.sh vhost www.yourdomain.com # 一键安装静态虚拟主机。 +bash tylemp.sh dhost www.yourdomain.com # 一键安装动态虚拟主机,方便直接上传网站程序。 +bash tylemp.sh typecho www.yourdomain.com # 安装typecho,提供数据库名,密码等自主添加完成安装 +bash tylemp.sh phpmyadmin www.yourdomain.com # 一键安装phpmyadmin 数据库管理软件,用http://www.yourdomain.com/phpMyAdmin访问 +bash tylemp.sh addnginx 2 #调整nginx进程,这里2表示调整后的进程数,请根据vps配置(cpu核心数)更改 +bash tylemp.sh sshport 22022 #更改ssh端口号22022,建议更改10000以上端口。重启后生效。 +bash tylemp.sh rainloop www.yourdomain.com # 增加Gmail的web客户端一键安装 +bash tylemp.sh carbon www.yourdomain.com # 增加Carbon Forum的一键安装 +``` + +### 修改 WordPress 上传文件大小限制 + +1.查找php.ini配置文件 + +``` +find / -name "php.ini" +``` + +会出现两个结果,修改类似`/etc/php/7.3/fpm/php.ini` + + + +2.修改 `php.ini` + +``` +vi /etc/php/7.3/fpm/php.ini +``` + +在其中搜索并修改以下配置: + +```bash +upload_max_filesize = 512M +post_max_size = 512M +max_execution_time = 3000 +``` + +这里配置上限为 512 MB,同时增加了最大处理时间。 + + + +3.修改 nginx.conf + +``` +vi /etc/nginx/conf.d/blog.bore.vip.conf +``` + +在 `http` 或 `server` 配置下添加 + +``` +client_max_body_size 512M; +``` + +这里配置上限为 512 MB。 + + + +4.重启nginx和php + +``` +service nginx restart +service php7.3-fpm restart +``` + +## `nginx`: command not found 解决方案 + +只需要输入`source /etc/profile` ,让配置文件重新生效一下即可。 + +## 参考链接 + ++ [1.Linux 每日自动备份到FTP及数据库通过邮箱发送方法](https://www.moerats.com/archives/69/) ++ [2.fetchmail: SMTP error: 552 5.3.4 Message size exceeds fixed limit](http://blog.sina.com.cn/s/blog_7edf8b9f0100to4p.html) ++ [3.如何将服务器上的网站数据定时自动备份到Dropbox](http://sufaming.com/?p=189) ++ [4.Linux 定时备份服务器/网站数据到Github私人仓库](https://www.moerats.com/archives/858/) ++ [5.MySQL 教程](https://www.runoob.com/mysql/mysql-tutorial.html) ++ [6.Changing the WordPress site URL using the MySQL command line](https://precisionsec.com/changing-the-wordpress-site-url-using-the-mysql-command-line/) ++ [7.CentOs8系统安装mailx发邮件](https://blog.csdn.net/jia12216/article/details/106098267) ++ [8.Impossible to unlink](https://github.com/andreafabrizi/Dropbox-Uploader/issues/459) ++ [9.如何在Debian 9上安装和配置Postfix作为仅发送SMTP服务](https://cloud.tencent.com/developer/article/1363216) ++ [10.Debian LNMP/LEMP/WordPress一键脚本](https://www.gubo.org/debian-lemp-script/) ++ [11.修改 WordPress 上传文件大小限制](https://blog.nex3z.com/2020/07/14/%E4%BF%AE%E6%94%B9-wordpress-%E4%B8%8A%E4%BC%A0%E6%96%87%E4%BB%B6%E5%A4%A7%E5%B0%8F%E9%99%90%E5%88%B6/) \ No newline at end of file