操作环境
操作系统:Linux CentOS 8.0
数据库:mysql 8.0
站点备份的目的
1.提前为站点未来可能迁移服务器做好准备。
2.考虑到站点被入侵、攻击、销毁数据的可能,提前做好数据备份,出现问题可及时进行还原。
3.个人心态原因,重要数据和好东西不实实在在”拿“在自己手里不放心。
站点备份的思路
站点设置、图片资源等数据:使用Halo自带备份还原功能。
站点数据库:由于本人使用的为mysql,故使用mysql本身的备份还原指令,将数据库导出为.sql文件后进行备份还原。
Halo配置文件:直接下载保存备份。
站点备份及还原的过程
旧服务器备份
1.备份Halo站点设置、图片资源等数据。后台使用Halo自带备份功能进行备份,得到一个.zip格式压缩包,该压缩包主要包含站点的设置、保存的图片、安装的插件等。
2.备份Halo配置文件。进入服务器,在“.halo2文件夹”内将Halo配置文件“application.yaml”下载保存,该配置文件主要作用为数据库及站点相关设置,具体代码如下:
注:.halo2文件夹
”为隐藏文件夹,用于存放上传的图片、备份等文件。一般位于创建该文件夹及运行Halo站点时的用户所在目录下。例如创建该文件夹及运行Halo站点的用户为非root账户,则该配置文件的路径为/home/系统用户名/application.yaml。如创建该文件夹及运行Halo站点的用户为root账户,则该配置文件的路径为/root/.halo2/application.yaml。
server:
port: 8090 #运行端口
spring:
#数据库配置,支持 MySQL、MariaDB、PostgreSQL、H2 Database
r2dbc:
url: r2dbc:h2:file://${halo.work-dir}/db/halo-next?MODE=MySQL&DB_CLOSE_ON_EXIT=FALSE
username: admin #数据库账户
password: 123456 #数据库密码
sql:
init:
mode: always
platform: h2 #数据库类型
halo:
caches:
page:
disabled: true #是否禁用页面缓存
work-dir: ${user.home}/.halo2 #工作目录位置
external-url: http://localhost:8090 #站点外部访问地址
# 附件映射配置,通常用于迁移场景
attachment:
resource-mappings:
- pathPattern: /upload/**
locations:
- migrate-from-1.x
#-------------以上为配置文件代码,以下为备注提示--------------
#spring.r2dbc.url 数据库连接地址(指代码中r2dbc结构下需填写的参数,例如设置为mysql数据库则填入r2dbc:pool:mysql://你的服务器地址:3306/halodb(数据库名)
#spring.r2dbc.username 数据库用户名
#spring.r2dbc.password 数据库密码
#spring.sql.init.platform 数据库平台名称,支持 postgresql、mysql、mariadb、h2,需要使用哪个数据库则填写对应的数据库名称参数
#PostgreSQL数据库设置标准:
#r2dbc:pool:postgresql://{HOST}:{PORT}/{DATABASE} postgresql
#MySQL数据库设置标准:
#r2dbc:pool:mysql://{HOST}:{PORT}/{DATABASE} mysql
#MariaDB数据库设置标准:
#r2dbc:pool:mariadb://{HOST}:{PORT}/{DATABASE} mariadb
#H2 Database数据库设置标准:
#r2dbc:h2:file:///${halo.work-dir}/db/halo-next?MODE=MySQL&DB_CLOSE_ON_EXIT=FALSE h2
3.备份mysql数据库。进入服务器,执行mysql备份指令并将生成的sql文件保存。(需牢记数据库名,因为还原时需要先创建数据库,此时数据库名称必须保持一致):
mysqldump -uUser -pAdmin123 halodb > /var/www/halodb.sql
/*
mysqldump -u数据库账号 -p数据库密码 数据库名 > 文件路径和文件名.sql
*/
服务器还原(假设该服务器已运行Halo站点,但旧服务器数据未迁移过来):
1.创建数据库。在mysql数据库中创建名为halodb的数据库:
/*#使用mysql数据库管理账户登入mysql*/
mysql -u root -p
/*创建数据库(数据库名需与备份数据库名一致)*/
create database halodb character set utf8mb4 collate utf8mb4_bin;
/*halodb为要创建的数据库名*/
2.删除h2数据库文件。进入.halo2/db/目录下,如果存在”halo-next.mv.db“文件则删除该文件,该文件为Halo站点默认的h2数据库文件。
3.数据库账户授权。如果你需要新建专门的数据库账户允许halo,那么还需对该账户授权访问halo数据库才行:
GRANT ALL PRIVILEGES ON halodb.* TO '数据库账户名'@'localhost';
4.还原数据库。将备份的.sql文件上传至服务器(假设这里我将文件上传至/var/www/路径):
/*使用mysql数据库管理账户登入mysql*/
mysql -u root -p
/*切换到创建的数据库*/
USE halodb; /*halodb为要创建的数据库名*/
/*执行数据库还原*/
SOURCE /var/www/halodb.sql; /*路径+.sql文件名*/
/*还原成功的提示信息*/
/*
Query OK, 0 rows affected (0.00 sec)
Records: 241 Duplicates: 0 Warnings: 0
*/
5.还原Halo配置文件“application.yaml”。进入”.halo2文件夹“,将“application.yaml”替换为备份的“application.yaml”。
6.重新编译运行Halo站点。如果你是以.service服务开机自启动运行Halo站点,则执行以下代码进行重启服务:
#重启服务。因Halo项目编译运行较慢,还需等待1分钟左右(视服务器配置决定)
sudo systemctl restart halo.service #halo.service为你的halo服务名
7.恢复Halo站点设置、图片资源数据及相关插件。进入Halo后台初始化,初始化完成后进入后台”概览“查看数据库是否成功切换为mysql,接着使用Halo自带的备份功能还原站点设置、图片资源数据及相关插件相关数据。至此,Halo站点已全部迁移还原完成。
还原后遇到的问题
问题1:还原后点赞、目录层级无法展开,并且打开任意文章报错
报错代码示例:
post.min.js?v=1.2.2:1 Uncaught TypeError: Cannot read properties of undefined (reading 'enable_read_limit')
at Object.initReadLimit (post.min.js?v=1.2.2:1:7853)
at post.min.js?v=1.2.2:1:15500
at Array.forEach (<anonymous>)
at HTMLDocument.<anonymous> (post.min.js?v=1.2.2:1:15429)
common.min.js?v=1.2.2:1 Uncaught TypeError: Cannot read properties of undefined (reading 'enable_fold_long_code')
at Object.foldCode (common.min.js?v=1.2.2:1:3404)
at common.min.js?v=1.2.2:1:16960
at Array.forEach (<anonymous>)
at common.min.js?v=1.2.2:1:16906
post.min.js?v=1.2.2:1 Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'enable_comment')
at post.min.js?v=1.2.2:1:14468
at l (post.min.js?v=1.2.2:1:1972)
at t._invoke (post.min.js?v=1.2.2:1:1732)
at Generator.next (post.min.js?v=1.2.2:1:2327)
at s (post.min.js?v=1.2.2:1:7485)
at r (post.min.js?v=1.2.2:1:7682)
at post.min.js?v=1.2.2:1:7741
at new Promise (<anonymous>)
at post.min.js?v=1.2.2:1:7623
at Object.jumpToComment (post.min.js?v=1.2.2:1:15333)
解决方法:
1.停止halo。
2.删除.halo文件夹下\halo-theme-Joe3-1.2.2\templates\assets\js\min\下所有gz包。
3.启动halo。
4.主题——>清除模板缓存、重载主题配置。
5.仪表盘——>刷新搜索引擎、刷新页面缓存。
问题2:还原后网站后台无法进入
报错代码示例:
GET https://服务器IP/themes/theme-Joe3/assets/font/joe_future.woff2 net::ERR_ABORTED 500 (Internal Server Error)
121.36.206.171/:1 Third-party cookie will be blocked. Learn more in the Issues tab.
font-awesome.min.css:1
GET https://服务器IP/themes/theme-Joe3/assets/lib/font-awesome/fonts/fontawesome-webfont.woff2?v=4.4.0 500 (Internal Server Error)
font-awesome.min.css:1
GET https://服务器IP/themes/theme-Joe3/assets/lib/font-awesome/fonts/fontawesome-webfont.woff?v=4.4.0 500 (Internal Server Error)
font-awesome.min.css:1
GET https://服务器IP/themes/theme-Joe3/assets/lib/font-awesome/fonts/fontawesome-webfont.ttf?v=4.4.0 net::ERR_ABORTED 500 (Internal Server Error)
解决方法:
1.进入WAF防火墙。
2.进入“防护站点——>全局配置”,关闭启用 HTTP/2
、启用 HSTS
、支持 GZip 压缩
、支持 Brotli 压缩
。
评论区