docs(nacos-config): 添加 nacos_config 目录分析与修改指南
新增 g3fo-nacos-config 目录下的 SKILL.md 文档,详细说明 nacos_config 目录的结构、用户交互流程及配置文件的添加与修改规则。新增 yml-placement.md 文件,提供常见顶级键的插入顺序,以保持配置文件风格一致。
This commit is contained in:
@@ -150,9 +150,28 @@ scp /data/backup/mysql/20250127120000.7z root@192.168.1.100:/data/backup/mysql/
|
||||
|
||||
**注意**: 确保还原机的 `/data/backup/mysql/` 目录存在且有写入权限。
|
||||
|
||||
#### 步骤 3: 在还原机上执行还原
|
||||
#### 步骤 3: 在还原机上还原前准备(清空数据并重启 MySQL)
|
||||
|
||||
在需要还原的 MySQL 服务器(从库)上执行还原脚本:
|
||||
在需要还原的 MySQL 服务器(还原机)上,**先清空数据目录并重启容器**,再执行还原脚本,避免旧数据与备份冲突。
|
||||
|
||||
1. **删除数据目录中的现有数据**(在还原机执行):
|
||||
```bash
|
||||
# 删除 /data/mysql/data 下数据(请确认该路径为当前 MySQL 数据目录)
|
||||
rm -rf /data/mysql/data/*
|
||||
```
|
||||
|
||||
2. **在 docker-compose 目录下重启 MySQL 容器**(在还原机执行):
|
||||
```bash
|
||||
cd /data/docker-compose
|
||||
docker-compose down mysql
|
||||
docker-compose up -d mysql
|
||||
```
|
||||
|
||||
等待 MySQL 启动就绪(可查看容器日志或稍等 10~30 秒)后,再进行步骤 4 的还原。
|
||||
|
||||
#### 步骤 4: 在还原机上执行还原脚本
|
||||
|
||||
在还原机上执行还原脚本:
|
||||
|
||||
```bash
|
||||
cd /data/backup/mysql
|
||||
@@ -171,50 +190,170 @@ cd /data/backup/mysql
|
||||
- 导入备份数据(导入时禁用 binlog,避免循环复制)
|
||||
- 设置 GTID purged(从备份时的 GTID 位置)
|
||||
- 恢复 MySQL 为读写模式
|
||||
- **自动启动复制并检查状态**
|
||||
|
||||
#### 步骤 4: 在备份机上启动同步(重要)
|
||||
#### 步骤 5: 还原后创建账号(在还原机执行)
|
||||
|
||||
还原完成后,还原脚本会自动启动复制并显示同步状态。确认看到同步成功后,**需要在备份机(主库)上执行以下操作**:
|
||||
还原完成后,在**还原机**上创建复制与业务所需账号(若备份中已含用户则可酌情跳过,建议按环境统一执行一次)。
|
||||
|
||||
**A. 创建复制账号 `repl` 与日志刷新账号 `log_flush`**
|
||||
|
||||
Docker 执行:
|
||||
```bash
|
||||
docker exec -it mysql mysql -uroot -pafe123456 -h127.0.0.1 -e "
|
||||
CREATE USER 'repl'@'%' IDENTIFIED BY 'afe123456';
|
||||
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
|
||||
FLUSH PRIVILEGES;
|
||||
"
|
||||
|
||||
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. 创建 G3SF 相关业务账号**
|
||||
|
||||
Docker 执行:
|
||||
```bash
|
||||
docker exec -it mysql mysql -uroot -pafe123456 -h127.0.0.1 -e "
|
||||
CREATE USER 'g3sf'@'%' IDENTIFIED BY 'k2-fkW@7z>zSYQo';
|
||||
GRANT ALL PRIVILEGES ON *.* TO 'g3sf'@'%';
|
||||
CREATE USER 'g3sfreader'@'%' IDENTIFIED BY '@feg3sf10port';
|
||||
GRANT SELECT ON *.* TO 'g3sfreader'@'%';
|
||||
CREATE USER 'g3sfsupport'@'%' IDENTIFIED BY '@feg3sf10port';
|
||||
GRANT ALL PRIVILEGES ON *.* TO 'g3sfsupport'@'%';
|
||||
FLUSH PRIVILEGES;
|
||||
"
|
||||
```
|
||||
|
||||
纯 SQL(在 MySQL 客户端中执行):
|
||||
```sql
|
||||
-- g3sf:应用库完全访问
|
||||
CREATE USER 'g3sf'@'%' IDENTIFIED BY 'k2-fkW@7z>zSYQo';
|
||||
GRANT ALL PRIVILEGES ON *.* TO 'g3sf'@'%';
|
||||
-- g3sfreader:只读
|
||||
CREATE USER 'g3sfreader'@'%' IDENTIFIED BY '@feg3sf10port';
|
||||
GRANT SELECT ON *.* TO 'g3sfreader'@'%';
|
||||
-- g3sfsupport:支持库完全访问
|
||||
CREATE USER 'g3sfsupport'@'%' IDENTIFIED BY '@feg3sf10port';
|
||||
GRANT ALL PRIVILEGES ON *.* TO 'g3sfsupport'@'%';
|
||||
FLUSH PRIVILEGES;
|
||||
```
|
||||
|
||||
#### 步骤 6: 在还原机上连接主 DB 并启动复制(在还原机执行)
|
||||
|
||||
在**还原机**上配置复制源为主库(将 `NODE_A_IP` 替换为实际主 DB 的 IP):
|
||||
|
||||
**A. Docker 执行模式 (包含 -h127.0.0.1):**
|
||||
```bash
|
||||
# 将 NODE_A_IP 替换为主 DB 的 IP
|
||||
docker exec -it mysql mysql -uroot -pafe123456 -h127.0.0.1 -e "
|
||||
STOP REPLICA;
|
||||
RESET REPLICA ALL;
|
||||
CHANGE REPLICATION SOURCE TO
|
||||
SOURCE_HOST = 'NODE_A_IP',
|
||||
SOURCE_PORT = 3306,
|
||||
SOURCE_USER = 'repl',
|
||||
SOURCE_PASSWORD = 'afe123456',
|
||||
SOURCE_AUTO_POSITION = 1,
|
||||
SOURCE_CONNECT_RETRY = 10,
|
||||
SOURCE_RETRY_COUNT = 9999999999,
|
||||
GET_SOURCE_PUBLIC_KEY = 1;
|
||||
START REPLICA;
|
||||
"
|
||||
```
|
||||
|
||||
**B. 纯 SQL 模式:**
|
||||
```sql
|
||||
STOP REPLICA;
|
||||
RESET REPLICA ALL;
|
||||
CHANGE REPLICATION SOURCE TO
|
||||
SOURCE_HOST = 'NODE_A_IP', -- 主 DB IP
|
||||
SOURCE_PORT = 3306,
|
||||
SOURCE_USER = 'repl',
|
||||
SOURCE_PASSWORD = 'afe123456',
|
||||
SOURCE_AUTO_POSITION = 1,
|
||||
SOURCE_CONNECT_RETRY = 10,
|
||||
SOURCE_RETRY_COUNT = 9999999999,
|
||||
GET_SOURCE_PUBLIC_KEY = 1;
|
||||
START REPLICA;
|
||||
```
|
||||
|
||||
等待 3 秒后,检查同步状态:
|
||||
等待几秒后检查复制状态,确认 IO/SQL 均为 Yes:
|
||||
|
||||
**A. Docker 执行模式 (包含 -h127.0.0.1):**
|
||||
```bash
|
||||
sleep 3
|
||||
sleep 5
|
||||
docker exec -it mysql mysql -uroot -pafe123456 -h127.0.0.1 -e "SHOW REPLICA STATUS\G"
|
||||
```
|
||||
|
||||
**B. 纯 SQL 模式:**
|
||||
```sql
|
||||
-- 等待 3 秒后执行
|
||||
SHOW REPLICA STATUS\G;
|
||||
```
|
||||
|
||||
检查关键指标:
|
||||
- `Replica_IO_Running`: 应为 `Yes`
|
||||
- `Replica_SQL_Running`: 应为 `Yes`
|
||||
- `Last_IO_Error`: 应为空
|
||||
- `Last_SQL_Error`: 应为空
|
||||
- `Seconds_Behind_Source`: 延迟秒数(应逐渐减小)
|
||||
- `Last_IO_Error` / `Last_SQL_Error`: 应为空
|
||||
|
||||
状态正常后,再进行步骤 7,在主库上配置指向本机(还原机/备份库)。
|
||||
|
||||
#### 步骤 7: 在主库上配置指向备份库(还原机)并检查状态(在主库执行)
|
||||
|
||||
在**主备份数据库(主库)**上配置复制源为当前还原机(备份库),将 `NODE_B_IP` 替换为还原机/备份 DB 的 IP:
|
||||
|
||||
**A. Docker 执行模式 (包含 -h127.0.0.1):**
|
||||
```bash
|
||||
# 将 NODE_B_IP 替换为备份 DB(还原机)的 IP
|
||||
docker exec -it mysql mysql -uroot -pafe123456 -h127.0.0.1 -e "
|
||||
STOP REPLICA;
|
||||
RESET REPLICA ALL;
|
||||
CHANGE REPLICATION SOURCE TO
|
||||
SOURCE_HOST = 'NODE_B_IP',
|
||||
SOURCE_PORT = 3306,
|
||||
SOURCE_USER = 'repl',
|
||||
SOURCE_PASSWORD = 'afe123456',
|
||||
SOURCE_AUTO_POSITION = 1,
|
||||
SOURCE_CONNECT_RETRY = 10,
|
||||
SOURCE_RETRY_COUNT = 9999999999,
|
||||
GET_SOURCE_PUBLIC_KEY = 1;
|
||||
START REPLICA;
|
||||
"
|
||||
```
|
||||
|
||||
**B. 纯 SQL 模式:**
|
||||
```sql
|
||||
STOP REPLICA;
|
||||
RESET REPLICA ALL;
|
||||
CHANGE REPLICATION SOURCE TO
|
||||
SOURCE_HOST = 'NODE_B_IP', -- 备份 DB(还原机)IP
|
||||
SOURCE_PORT = 3306,
|
||||
SOURCE_USER = 'repl',
|
||||
SOURCE_PASSWORD = 'afe123456',
|
||||
SOURCE_AUTO_POSITION = 1,
|
||||
SOURCE_CONNECT_RETRY = 10,
|
||||
SOURCE_RETRY_COUNT = 9999999999,
|
||||
GET_SOURCE_PUBLIC_KEY = 1;
|
||||
START REPLICA;
|
||||
```
|
||||
|
||||
等待几秒后再次检查主库复制状态:
|
||||
|
||||
```bash
|
||||
sleep 5
|
||||
docker exec -it mysql mysql -uroot -pafe123456 -h127.0.0.1 -e "SHOW REPLICA STATUS\G"
|
||||
```
|
||||
|
||||
确认:
|
||||
- `Replica_IO_Running`: 应为 `Yes`
|
||||
- `Replica_SQL_Running`: 应为 `Yes`
|
||||
- `Last_IO_Error` / `Last_SQL_Error`: 应为空
|
||||
- `Seconds_Behind_Source`: 延迟应逐渐减小
|
||||
|
||||
至此,全量备份还原与主从(含主库侧)复制配置完成。
|
||||
|
||||
### 2.3 注意事项
|
||||
|
||||
1. **备份时机**: 建议在业务低峰期执行备份,减少对业务的影响
|
||||
2. **网络传输**: 确保备份机和还原机之间网络畅通,备份文件较大时传输可能需要较长时间
|
||||
3. **磁盘空间**: 确保还原机有足够的磁盘空间存放备份文件和临时解压文件
|
||||
4. **权限要求**: 脚本需要 MySQL root 权限,以及 `/data/backup/mysql/` 目录的读写权限
|
||||
3. **磁盘空间**: 确保还原机有足够的磁盘空间存放备份文件和临时解压文件;还原前清空 `/data/mysql/data` 前请确认该路径为当前 MySQL 数据目录
|
||||
4. **权限要求**: 脚本需要 MySQL root 权限,以及 `/data/backup/mysql/`、`/data/mysql/data` 等目录的相应权限
|
||||
5. **GTID 一致性**: 还原脚本会自动处理 GTID,确保复制能够正常继续
|
||||
6. **备份机同步**: 还原完成后务必在备份机(主库)上执行 `START REPLICA` 并检查状态,确保双向复制正常
|
||||
6. **还原前准备**: 还原前必须在还原机上删除 `/data/mysql/data` 数据并重启 MySQL 容器(步骤 3),再执行还原脚本,避免旧数据与备份冲突
|
||||
7. **账号与复制顺序**: 还原后先创建账号(步骤 5),再在还原机配置指向主库的复制并检查状态(步骤 6),最后在主库上配置指向还原机的复制并检查状态(步骤 7),确保双向复制正常
|
||||
|
||||
Reference in New Issue
Block a user