一. 环境准备

  • 云服务器:乌班图
  • Docker已安装好
  • 能够SSH远程访问云服务器(XShell等软件)

二. 创建网桥

docker network create -d bridge halo-net

三. 安装MySQL服务

1. 配置文件

[client]
default-character-set=utf8mb4
 
[mysql]
default-character-set=utf8mb4

[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket  = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

character-set-server=utf8mb4

secure_file_priv=/var/lib/mysql

server_id=1
log_bin=/var/lib/mysql/mysql-binlog

2. 安装

docker run -d --privileged=true --restart=always -v /home/ubuntu/myDockerApps/mysql/data:/var/lib/mysql -v /home/ubuntu/myDockerApps/mysql/config:/etc/mysql -e MYSQL_ROOT_PASSWORD=密码. --net halo-net --name halo-mysql mysql:8.0.27

3. 进入容器

docker exec -it halo-mysql /bin/bash

4. 登录MySQL

mysql -uroot -p
密码

5. 创建halo用户

CREATE USER 'halo'@'%' IDENTIFIED BY '密码';

6. 给halo赋权

grant all privileges on *.* to 'halo'@'%' with grant option;

7. 创建数据库

create database halo;

三. 安装halo服务

docker run -it -d --name halo -p 8090:8090 -v /home/ubuntu/.halo2:/root/.halo2 --net halo-net --restart=always halohub/halo:2.5.2 --halo.external-url=http://qingshi-web.top:8090/ --halo.security.initializer.superadminusername=qingshi --halo.security.initializer.superadminpassword=密码 --spring.r2dbc.url=r2dbc:pool:mysql://halo-mysql:3306/halo?ssl=false --spring.r2dbc.username=halo --spring.r2dbc.password=密码 --spring.sql.init.platform=mysql

四. 安装Caddy服务

1. Caddyfile文件

qingshi-web.top {
	# Set this path to your site's directory.
	# root * /usr/share/caddy

	# Enable the static file server.
	# file_server

	# Another common task is to set up a reverse proxy:
	reverse_proxy halo:8090
}

2. 安装

docker run -d --name caddy -p 80:80 -p 443:443 -p 2019:2019 -v /home/ubuntu/myDockerApps/caddy:/etc/caddy --net halo-net --restart=always caddy

五. 设置定时任务,对数据库定时备份

1. 创建备份脚本

vim mysql_backup.sh
  • 粘贴下面脚本内容到mysql_backup.sh文件
  • ubuntu 系统非 root 用户,要将备份产生的文件放到 xxx 用户所在的目录下,否则必须使用 sudo 输入管理员密码执行此脚本。
#!/bin/bash
echo '##########################################'
echo '###### The database is automatically backed up at 01:00 am every day ######'
echo '##########################################'
# Setting environment variables
DATE=$(date +%Y_%m_%d_%H_%M_%S)
# $(date +%Y%m%d)
# 数据库用户名
USERNAME=root
# 密码
PASSWORD=123456
# 要备份的数据库
DB=favorites

# Docker容器ID
DOCKERID=********

#DB1=xxxx
# ubuntu 系统非 root 用户,要将备份产生的文件放到 xxx 用户所在的目录下,否则必须使用 sudo 输入管理员密码执行此脚本。
# Linux服务器上备份文件目录。
DIR=/root/data_backup   
echo 'Get system date: ' $DATE

if [ ! -d "$DIR" ]; then
mkdir $DIR
fi
cd $DIR

echo 'backup started...' $(date "+%Y-%m-%d %H:%M:%S")

# 备份 docker 容器中的数据库
# docker exec -it 容器名称 mysqldump -u用户名 -p密码 要备份的数据库名称 | gzip > 要打包到的文件名称

# docker exec -it c7f1b671c57f mysqldump -u$USERNAME -p$PASSWORD $DB > /root/data_backup/database_name_$DATE.sql
# docker exec -it c7f1b671c57f mysqldump -uroot -proot favorites | gzip > /root/data_backup/database_name_2021_05_07.sql.gz

# 最关键的备份语句
docker exec $DOCKERID /usr/bin/mysqldump -u $USERNAME --password=$PASSWORD  $DB | gzip > $DIR/DB_Backup_$DATE.sql.gz

# 备份 直接安装在 linux 系统中的数据库
# /usr/bin/mysqldump -u$USERNAME -p$PASSWORD $DB2 | gzip > xxx_$DATE.sql.gz
# just backup the latest 7 days

find ${DIR} -name "DB_Backup_*.sql.gz" -type f -mtime +7 -exec rm {} \; > /dev/null 2>&1

# find ${DIR} -name "database_name_*.sql.gz" -type f -mtime +7 -exec rm {} \; > /dev/null 2>&1


echo 'backup completed!' $(date "+%Y-%m-%d %H:%M:%S")

2. 给脚本添加权限

chmod 755 mysql_backup.sh

3. 执行脚本

sh mysql_backup.sh

4. 使用crontab添加定时任务

  • 设置编辑器
select-editor
  • 进入编辑页面
crontab -e
  • 格式
* * * * * command
前面5个* 分别代表 分 时 日 月 周
后面command代表具体执行的命令
0 1 * * * /home/ubuntu/myDockerApps/halo_backup/halo_mysql_backup.sh

corntab.jpg

5. 恢复

  • 解压
gzip /wanwutech/backup/2022-05-05/2022-05-05_120000.sql.gz   #解压备份文件
#上面那种解压会删掉原压缩文件 ,可以采用下面这种方式解压
gunzip -c /wanwutech/backup/2022-05-05/2022-05-05_120000.sql.gz > /wanwutech/backup/2022-05-05/2022-05-05_120000.sql
  • 导入
mysql -u root -p 
# 输入密码...
# 进入对应数据库
use application;
# 恢复数据
source /wanwutech/backup/2022-05-05/2022-05-05_120000.sql