Initial commit with project setup and basic structure established.

This commit is contained in:
2026-01-16 17:44:35 +08:00
parent bf3ab6a241
commit 02bf619c65
40 changed files with 3363 additions and 0 deletions
@@ -0,0 +1,89 @@
# MySQL 8.4 日志管理指南
> **AI 响应规范 (MySQL 执行策略)**:
> 1. **强制参数**: 所有 `docker exec` 命令必须包含 `-h127.0.0.1` 参数。
> 2. **双重输出**: 涉及 SQL 操作时,必须同时输出 `Docker 执行命令` 和 `纯 SQL 脚本`。
## 1. 日志轮转配置
防止日志文件过大,两台主机配置一致。创建 `/etc/logrotate.d/mysql_error_log`:
```plain
/data/mysql/logs/mysql_error.log /data/mysql/logs/mysql_slow.log {
daily # 每天轮转
missingok # 文件不存在不报错
rotate 30 # 保留30天日志
compress # 压缩旧日志
delaycompress # 延迟压缩(避免写入异常)
notifempty # 空文件不轮转
create 644 # 新日志权限
postrotate
# 刷新MySQL日志文件
docker exec mysql mysql -uroot -pafe123456 -h127.0.0.1 -e "FLUSH ERROR LOGS; FLUSH SLOW LOGS;" || true
endscript
}
```
### 1.1 手动测试日志轮转
```bash
logrotate -f /etc/logrotate.d/mysql_error_log
```
## 2. 加密登录配置(.mylogin.cnf)
### 2.1 配置目的
为避免执行日志刷新操作时明文暴露数据库账号密码,通过 `mysql_config_editor` 生成加密的 `.mylogin.cnf` 文件,实现安全、免密的日志操作。
### 2.2 操作步骤
#### 步骤 1:在宿主机器生成加密登录配置
直接在宿主机器执行以下命令(两台双主节点均需执行):
```bash
mysql_config_editor set \
--login-path=mysql_log_flush \ # 自定义标识
--user=log_flush \ # 提前创建的日志操作专用低权限账号
--password \ # 交互式输入密码
--host=127.0.0.1 \ # 本地连接地址
--port=3306 # MySQL 服务端口
```
#### 步骤 2:将配置文件同步至 MySQL 容器
有两种实现方式:
**方式 1:复制配置文件到容器内**
```bash
sudo docker cp ~/.mylogin.cnf mysql:/root/.mylogin.cnf
```
**方式 2:执行命令时临时挂载配置文件**
```bash
docker exec -v ~/.mylogin.cnf:/root/.mylogin.cnf mysql \
mysql --login-path=mysql_log_flush -e "FLUSH ERROR LOGS; FLUSH SLOW LOGS;"
```
#### 步骤 3:使用加密配置执行日志操作
```bash
docker exec mysql mysql --login-path=mysql_log_flush -e "FLUSH ERROR LOGS; FLUSH SLOW LOGS;"
```
### 2.3 安全与权限注意事项
1. **专用账号权限最小化**:仅授予 `RELOAD` 权限。
**A. Docker 执行模式:**
```bash
docker exec -it mysql mysql -uroot -pafe123456 -h127.0.0.1 -e "
CREATE USER 'log_flush'@'127.0.0.1' IDENTIFIED BY 'afe123456';
GRANT RELOAD ON *.* TO 'log_flush'@'127.0.0.1';
FLUSH PRIVILEGES;
"
```
**B. 纯 SQL 模式:**
```sql
CREATE USER 'log_flush'@'127.0.0.1' IDENTIFIED BY 'afe123456';
GRANT RELOAD ON *.* TO 'log_flush'@'127.0.0.1';
FLUSH PRIVILEGES;
```
2. **配置文件权限管控**:`.mylogin.cnf` 权限应为 600。
3. **密码更新处理**:若密码修改,需重新生成配置。