@@ -100,6 +100,11 @@ ls -l /www/server/pyporject_evn/versions/3.12.13/bin/python*
|
||||
|
||||
Redis 应返回 `PONG`。
|
||||
|
||||
如果这里显示宿主机 `mysql/mysqldump` 是 5.7,而 Docker 容器是
|
||||
MySQL 8.0.35,不需要卸载旧客户端。宿主机 5.7 客户端只用于简单连通性测试;
|
||||
生产自动备份必须配置 `MYSQL_CONTAINER`,使用容器内部的 MySQL 8
|
||||
`mysqldump`,避免跨版本备份兼容问题。
|
||||
|
||||
## 4. 配置 Docker MySQL 8.0.35
|
||||
|
||||
宝塔 `MySQL 多版本管理(Docker 应用)` 中设置:
|
||||
@@ -170,7 +175,8 @@ CREATE DATABASE hulumath
|
||||
CHARACTER SET utf8mb4
|
||||
COLLATE utf8mb4_0900_ai_ci;
|
||||
|
||||
CREATE USER 'hulumath'@'%' IDENTIFIED BY 'ReplaceWithStrongPassword';
|
||||
CREATE USER 'hulumath'@'%'
|
||||
IDENTIFIED WITH mysql_native_password BY 'ReplaceWithStrongPassword';
|
||||
GRANT ALL PRIVILEGES ON hulumath.* TO 'hulumath'@'%';
|
||||
FLUSH PRIVILEGES;
|
||||
|
||||
@@ -182,6 +188,10 @@ SHOW VARIABLES LIKE 'sql_mode';
|
||||
|
||||
版本必须是 `8.0.35`,字符集应为 `utf8mb4`。
|
||||
|
||||
这里使用 `mysql_native_password` 是为了兼容服务器现有 MySQL 5.7 命令行客户端
|
||||
和系统 `mysqlclient` 动态库。数据库端口只绑定 `127.0.0.1:3307`,该账号不会
|
||||
暴露公网。
|
||||
|
||||
从宿主机验证:
|
||||
|
||||
```bash
|
||||
@@ -254,10 +264,12 @@ API_USER_RATE=600/minute
|
||||
SECURE_HSTS_SECONDS=31536000
|
||||
|
||||
DEPLOY_HEALTH_HOST=math.example.com
|
||||
MYSQLDUMP_BIN=/usr/bin/mysqldump
|
||||
MYSQL_CONTAINER=mysql_o0fbdmmf8q
|
||||
```
|
||||
|
||||
如果 `command -v mysqldump` 返回其他路径,修改 `MYSQLDUMP_BIN`。
|
||||
`MYSQL_CONTAINER` 必须填写 `docker ps` 显示的 MySQL 8 容器名。你的服务器
|
||||
当前应填写 `mysql_o0fbdmmf8q`。部署脚本会把临时凭据复制进容器,调用容器
|
||||
内部的 MySQL 8 `mysqldump`,完成后立即删除。
|
||||
|
||||
锁定权限:
|
||||
|
||||
@@ -478,14 +490,13 @@ hulumath_YYYYMMDD_HHMMSS.sql.gz
|
||||
|
||||
保留 14 天。
|
||||
|
||||
人工备份:
|
||||
人工备份建议同样使用容器内的 MySQL 8 客户端。以下命令会提示输入应用数据库密码:
|
||||
|
||||
```bash
|
||||
mysqldump \
|
||||
-h 127.0.0.1 -P 3307 \
|
||||
docker exec -i mysql_o0fbdmmf8q mysqldump \
|
||||
-u hulumath -p \
|
||||
--single-transaction --quick \
|
||||
--routines --triggers --events \
|
||||
--triggers --no-tablespaces \
|
||||
--hex-blob --set-gtid-purged=OFF \
|
||||
hulumath | gzip > /www/backup/hulumath/manual.sql.gz
|
||||
```
|
||||
@@ -546,17 +557,16 @@ ss -ltnp | grep 3307
|
||||
mysql -h 127.0.0.1 -P 3307 -u hulumath -p hulumath
|
||||
```
|
||||
|
||||
### 部署找不到 mysqldump
|
||||
### 部署提示宿主机 mysqldump 版本过低
|
||||
|
||||
```bash
|
||||
command -v mysqldump
|
||||
find /www/server/mysql /usr -type f -name mysqldump 2>/dev/null
|
||||
docker exec mysql_o0fbdmmf8q mysqldump --version
|
||||
```
|
||||
|
||||
然后设置:
|
||||
容器内应显示 MySQL 8。然后在 `.env.production` 设置:
|
||||
|
||||
```dotenv
|
||||
MYSQLDUMP_BIN=/实际路径/mysqldump
|
||||
MYSQL_CONTAINER=mysql_o0fbdmmf8q
|
||||
```
|
||||
|
||||
### 字符集或 Emoji 写入失败
|
||||
|
||||
Reference in New Issue
Block a user