This commit is contained in:
zlwu committed 2025-06-26 18:30:03 +08:00
commit 1ab9f9c458
1319 files changed
+137505

No files matched your search

+220
View File
@@ -0,0 +1,220 @@
# 中间件配置文档
## 目录说明
此目录用于存放项目使用的各种中间件配置文档和最佳实践。
## 1. 数据库配置
### MySQL配置
- **mysql-config.md**:MySQL数据库配置和优化
- **mysql-cluster.md**:MySQL集群部署方案
- **mysql-backup.md**:MySQL备份和恢复策略
- **mysql-monitor.md**:MySQL监控和性能调优
### 多数据库支持
- **oracle-config.md**:Oracle数据库配置
- **postgresql-config.md**:PostgreSQL数据库配置
- **sqlserver-config.md**:SQL Server数据库配置
### 配置示例:
```yaml
# MySQL开发环境配置示例
spring:
datasource:
dynamic:
primary: master
datasource:
master:
url: jdbc:mysql://localhost:3306/ruoyi?useUnicode=true&characterEncoding=utf8
username: root
password: password
driver-class-name: com.mysql.cj.jdbc.Driver
```
## 2. Redis配置
### Redis部署
- **redis-standalone.md**:Redis单机部署配置
- **redis-cluster.md**:Redis集群部署配置
- **redis-sentinel.md**:Redis哨兵模式配置
- **redis-optimize.md**:Redis性能优化
### Redisson配置
- **redisson-config.md**:Redisson客户端配置
- **redisson-lock.md**:分布式锁配置
- **redisson-cache.md**:缓存配置
### 配置示例:
```yaml
# Redis配置示例
spring:
data:
redis:
host: localhost
port: 6379
database: 0
password: password
timeout: 10s
```
## 3. 消息中间件配置
### RabbitMQ配置
- **rabbitmq-install.md**:RabbitMQ安装和配置
- **rabbitmq-cluster.md**:RabbitMQ集群配置
- **rabbitmq-monitor.md**:RabbitMQ监控配置
### RocketMQ配置
- **rocketmq-install.md**:RocketMQ安装和配置
- **rocketmq-cluster.md**:RocketMQ集群配置
### Kafka配置
- **kafka-install.md**:Kafka安装和配置
- **kafka-cluster.md**:Kafka集群配置
## 4. 监控组件配置
### Spring Boot Admin
- **spring-boot-admin.md**:服务监控配置
- **admin-security.md**:监控安全配置
### Prometheus + Grafana
- **prometheus-config.md**:Prometheus监控配置
- **grafana-dashboard.md**:Grafana仪表板配置
### ELK Stack
- **elasticsearch-config.md**:Elasticsearch配置
- **logstash-config.md**:Logstash日志收集配置
- **kibana-config.md**:Kibana日志分析配置
## 5. 反向代理和负载均衡
### Nginx配置
- **nginx-install.md**:Nginx安装和基础配置
- **nginx-load-balance.md**:负载均衡配置
- **nginx-ssl.md**:SSL证书配置
- **nginx-cache.md**:静态资源缓存配置
### 配置示例:
```nginx
# Nginx负载均衡配置示例
upstream backend {
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8081 weight=1;
}
server {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
```
## 6. 存储服务配置
### MinIO配置
- **minio-install.md**:MinIO安装和配置
- **minio-cluster.md**:MinIO集群配置
- **minio-backup.md**:MinIO备份策略
### 其他存储
- **aliyun-oss.md**:阿里云OSS配置
- **qiniu-cloud.md**:七牛云存储配置
- **tencent-cos.md**:腾讯云COS配置
## 7. 短信和邮件服务
### 短信服务配置
- **aliyun-sms.md**:阿里云短信服务配置
- **tencent-sms.md**:腾讯云短信服务配置
- **sms4j-config.md**:短信融合包配置
### 邮件服务配置
- **email-config.md**:邮件服务配置
- **email-template.md**:邮件模板配置
## 8. 安全组件配置
### Sa-Token配置
- **satoken-config.md**:Sa-Token权限配置
- **satoken-jwt.md**:JWT配置
- **satoken-sso.md**:单点登录配置
### 第三方认证
- **oauth2-config.md**:OAuth2认证配置
- **ldap-config.md**:LDAP认证配置
## 环境配置
### 开发环境
- **dev-environment.md**:开发环境搭建指南
- **docker-compose-dev.yml**:开发环境Docker配置
### 测试环境
- **test-environment.md**:测试环境配置
- **docker-compose-test.yml**:测试环境Docker配置
### 生产环境
- **prod-environment.md**:生产环境配置
- **docker-compose-prod.yml**:生产环境Docker配置
- **k8s-deployment.md**:Kubernetes部署配置
## 配置管理规范
### 配置原则
1. **环境隔离**:不同环境使用不同配置
2. **安全优先**:敏感信息加密存储
3. **版本控制**:配置变更进行版本管理
4. **监控告警**:关键配置项设置监控
### 配置规范
- 使用配置中心统一管理
- 敏感信息不直接写在配置文件中
- 配置变更需要审核流程
- 定期备份配置文件
### 密码管理
- 数据库密码定期更换
- Redis密码必须设置
- 中间件默认密码必须修改
- 生产环境密码复杂度要求
## 性能调优
### JVM调优
- **jvm-config.md**:JVM参数配置和调优
- **gc-config.md**:垃圾回收器配置
### 数据库调优
- 连接池参数优化
- SQL语句性能优化
- 索引设计优化
### 缓存调优
- Redis内存使用优化
- 缓存过期策略优化
- 缓存穿透防护
## 故障排查
### 常见问题
- **common-issues.md**:常见问题和解决方案
- **troubleshooting.md**:故障排查手册
- **performance-issues.md**:性能问题排查
### 日志分析
- **log-analysis.md**:日志分析方法
- **error-handling.md**:错误处理规范
## 注意事项
1. 所有中间件密码必须设置且定期更换
2. 生产环境配置需要经过安全审核
3. 配置变更需要备份和回滚方案
4. 关键中间件需要设置监控和告警
+557
View File
@@ -0,0 +1,557 @@
# MySQL 数据库配置指南
## 概述
本文档详细说明了 RuoYi-Vue-Plus 项目中 MySQL 数据库的安装、配置和优化方案。
## 1. MySQL 安装
### 1.1 Docker 安装(推荐)
```bash
# 拉取MySQL 8.0镜像
docker pull mysql:8.0
# 创建MySQL容器
docker run -d \
--name mysql-ruoyi \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=your_password \
-e MYSQL_DATABASE=ruoyi \
-e MYSQL_USER=ruoyi \
-e MYSQL_PASSWORD=ruoyi_password \
-v mysql_data:/var/lib/mysql \
mysql:8.0 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci
```
### 1.2 传统安装
#### CentOS/RHEL 安装
```bash
# 下载MySQL官方Yum Repository
wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
# 安装MySQL Yum Repository
sudo rpm -Uvh mysql80-community-release-el7-3.noarch.rpm
# 安装MySQL
sudo yum install mysql-community-server
# 启动MySQL服务
sudo systemctl start mysqld
sudo systemctl enable mysqld
```
#### Ubuntu/Debian 安装
```bash
# 更新包索引
sudo apt update
# 安装MySQL服务器
sudo apt install mysql-server
# 启动MySQL服务
sudo systemctl start mysql
sudo systemctl enable mysql
```
## 2. 数据库配置
### 2.1 基础配置
#### 修改 root 密码
```sql
-- 登录MySQL
mysql -u root -p
-- 修改root密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
-- 刷新权限
FLUSH PRIVILEGES;
```
#### 创建业务数据库和用户
```sql
-- 创建数据库
CREATE DATABASE ruoyi DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 创建用户
CREATE USER 'ruoyi'@'%' IDENTIFIED BY 'ruoyi_password';
-- 授权
GRANT ALL PRIVILEGES ON ruoyi.* TO 'ruoyi'@'%';
-- 刷新权限
FLUSH PRIVILEGES;
```
### 2.2 配置文件 (my.cnf)
#### 基础配置
```ini
[mysqld]
# 基本设置
port = 3306
socket = /tmp/mysql.sock
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
pid-file = /usr/local/mysql/data/mysql.pid
user = mysql
bind-address = 0.0.0.0
# 字符集设置
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect = 'SET NAMES utf8mb4'
# SQL模式设置
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
# 时区设置
default-time-zone = '+8:00'
# 表名大小写敏感
lower_case_table_names = 1
# 日志设置
log-error = /var/log/mysql/error.log
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
log_queries_not_using_indexes = 1
# 连接设置
max_connections = 1000
max_connect_errors = 100000
max_allowed_packet = 64M
interactive_timeout = 600
wait_timeout = 600
# 缓冲区设置
innodb_buffer_pool_size = 2G
innodb_buffer_pool_instances = 8
innodb_log_file_size = 256M
innodb_log_buffer_size = 16M
innodb_flush_log_at_trx_commit = 1
innodb_flush_method = O_DIRECT
# 其他优化
innodb_file_per_table = 1
innodb_open_files = 500
innodb_io_capacity = 1000
innodb_read_io_threads = 8
innodb_write_io_threads = 8
[mysql]
default-character-set = utf8mb4
[client]
default-character-set = utf8mb4
```
## 3. 应用配置
### 3.1 开发环境配置
```yaml
# application-dev.yml
spring:
datasource:
dynamic:
primary: master
strict: true
datasource:
master:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/ruoyi?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
username: ruoyi
password: ruoyi_password
hikari:
maximum-pool-size: 20
minimum-idle: 10
connection-timeout: 30000
validation-timeout: 5000
idle-timeout: 600000
max-lifetime: 1800000
keepalive-time: 30000
```
### 3.2 生产环境配置
```yaml
# application-prod.yml
spring:
datasource:
dynamic:
primary: master
strict: true
datasource:
master:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://mysql-server:3306/ruoyi?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
username: ${DB_USERNAME:ruoyi}
password: ${DB_PASSWORD:encrypted_password}
hikari:
maximum-pool-size: 50
minimum-idle: 20
connection-timeout: 30000
validation-timeout: 5000
idle-timeout: 600000
max-lifetime: 1800000
keepalive-time: 30000
connection-test-query: SELECT 1
```
## 4. 性能优化
### 4.1 参数优化
#### 内存相关参数
```ini
# InnoDB缓冲池大小(建议设置为可用内存的70-80%)
innodb_buffer_pool_size = 4G
# 缓冲池实例数(建议设置为CPU核心数)
innodb_buffer_pool_instances = 8
# 查询缓存(MySQL 8.0已移除)
# query_cache_size = 0
# query_cache_type = 0
# 排序缓冲区
sort_buffer_size = 2M
# 连接缓冲区
read_buffer_size = 2M
read_rnd_buffer_size = 8M
# 临时表缓冲区
tmp_table_size = 128M
max_heap_table_size = 128M
```
#### I/O 相关参数
```ini
# InnoDB I/O容量
innodb_io_capacity = 2000
innodb_io_capacity_max = 4000
# InnoDB读写线程数
innodb_read_io_threads = 16
innodb_write_io_threads = 16
# InnoDB刷盘策略
innodb_flush_method = O_DIRECT
innodb_flush_log_at_trx_commit = 1
# 并发插入
concurrent_insert = 2
```
### 4.2 索引优化
#### 索引设计原则
1. **主键索引**: 使用雪花 ID,保证唯一性和有序性
2. **外键索引**: 所有外键字段必须建立索引
3. **复合索引**: 根据查询条件建立复合索引
4. **覆盖索引**: 优先使用覆盖索引减少回表
#### 常用索引示例
```sql
-- 租户索引(必须)
CREATE INDEX idx_tenant_id ON sys_user(tenant_id);
-- 复合索引
CREATE INDEX idx_user_status_dept ON sys_user(status, dept_id, create_time);
-- 唯一索引
CREATE UNIQUE INDEX uk_user_name_tenant ON sys_user(user_name, tenant_id);
```
### 4.3 查询优化
#### SQL 优化建议
1. **避免 SELECT \***: 只查询需要的字段
2. **使用 LIMIT**: 大数据量查询使用 LIMIT 分页
3. **避免子查询**: 使用 JOIN 替代子查询
4. **使用 EXPLAIN**: 分析查询执行计划
#### 分页查询优化
```sql
-- 传统分页(性能差)
SELECT * FROM sys_user ORDER BY id LIMIT 10000, 10;
-- 优化分页(使用覆盖索引)
SELECT u.* FROM sys_user u
INNER JOIN (
SELECT id FROM sys_user ORDER BY id LIMIT 10000, 10
) tmp ON u.id = tmp.id;
-- 游标分页(推荐)
SELECT * FROM sys_user WHERE id > 10000 ORDER BY id LIMIT 10;
```
## 5. 监控和维护
### 5.1 性能监控
#### 关键监控指标
```sql
-- 连接数监控
SHOW STATUS LIKE 'Threads_connected';
SHOW STATUS LIKE 'Max_used_connections';
-- 查询性能监控
SHOW STATUS LIKE 'Slow_queries';
SHOW STATUS LIKE 'Questions';
-- InnoDB监控
SHOW STATUS LIKE 'Innodb_buffer_pool_read_requests';
SHOW STATUS LIKE 'Innodb_buffer_pool_reads';
-- 锁监控
SHOW STATUS LIKE 'Table_locks_waited';
SHOW STATUS LIKE 'Innodb_deadlocks';
```
#### 慢查询分析
```bash
# 分析慢查询日志
mysqldumpslow -s t -t 10 /var/log/mysql/slow.log
# 实时监控慢查询
mysql -e "SHOW FULL PROCESSLIST" | grep -v "Sleep"
```
### 5.2 备份策略
#### 物理备份(推荐)
```bash
# 使用xtrabackup进行热备份
xtrabackup --backup --target-dir=/backup/mysql/$(date +%Y%m%d_%H%M%S)
# 备份脚本示例
#!/bin/bash
BACKUP_DIR="/backup/mysql"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_PATH="$BACKUP_DIR/$DATE"
# 创建备份目录
mkdir -p $BACKUP_PATH
# 执行备份
xtrabackup --backup --target-dir=$BACKUP_PATH
# 压缩备份
tar -czf $BACKUP_PATH.tar.gz -C $BACKUP_DIR $DATE
# 删除原备份目录
rm -rf $BACKUP_PATH
# 删除7天前的备份
find $BACKUP_DIR -name "*.tar.gz" -mtime +7 -delete
```
#### 逻辑备份
```bash
# 使用mysqldump备份
mysqldump -u root -p --single-transaction --routines --triggers \
--events --databases ruoyi > ruoyi_$(date +%Y%m%d_%H%M%S).sql
# 恢复数据
mysql -u root -p ruoyi < ruoyi_20250101_120000.sql
```
## 6. 安全配置
### 6.1 用户权限管理
#### 最小权限原则
```sql
-- 应用用户只授予必要权限
CREATE USER 'app_user'@'%' IDENTIFIED BY 'strong_password';
GRANT SELECT, INSERT, UPDATE, DELETE ON ruoyi.* TO 'app_user'@'%';
-- 只读用户
CREATE USER 'readonly_user'@'%' IDENTIFIED BY 'readonly_password';
GRANT SELECT ON ruoyi.* TO 'readonly_user'@'%';
-- 备份用户
CREATE USER 'backup_user'@'localhost' IDENTIFIED BY 'backup_password';
GRANT SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER ON *.* TO 'backup_user'@'localhost';
```
### 6.2 网络安全
#### 防火墙配置
```bash
# 只允许特定IP访问MySQL
iptables -A INPUT -p tcp --dport 3306 -s 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 3306 -j DROP
```
#### SSL 配置
```ini
# my.cnf SSL配置
[mysqld]
ssl-ca=/etc/mysql/ssl/ca-cert.pem
ssl-cert=/etc/mysql/ssl/server-cert.pem
ssl-key=/etc/mysql/ssl/server-key.pem
require_secure_transport=ON
```
## 7. 故障排查
### 7.1 常见问题
#### 连接问题
```bash
# 检查MySQL服务状态
systemctl status mysql
# 检查端口监听
netstat -tlnp | grep 3306
# 检查连接数
mysql -e "SHOW STATUS LIKE 'Threads_connected'"
```
#### 性能问题
```sql
-- 查看当前运行的查询
SHOW FULL PROCESSLIST;
-- 查看锁等待
SHOW ENGINE INNODB STATUS;
-- 查看表锁
SHOW OPEN TABLES WHERE In_use > 0;
```
### 7.2 日志分析
#### 错误日志分析
```bash
# 查看错误日志
tail -f /var/log/mysql/error.log
# 检查常见错误
grep -i "error\|warning" /var/log/mysql/error.log
```
#### 慢查询日志分析
```bash
# 启用慢查询日志
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 1;
# 分析慢查询
pt-query-digest /var/log/mysql/slow.log
```
## 8. 高可用配置
### 8.1 主从复制
#### 主库配置
```ini
# my.cnf 主库配置
[mysqld]
server-id = 1
log-bin = mysql-bin
binlog-format = ROW
expire_logs_days = 7
```
#### 从库配置
```ini
# my.cnf 从库配置
[mysqld]
server-id = 2
relay-log = mysql-relay-bin
read-only = 1
```
### 8.2 集群方案
#### MySQL Group Replication
```sql
-- 安装Group Replication插件
INSTALL PLUGIN group_replication SONAME 'group_replication.so';
-- 配置Group Replication
SET GLOBAL group_replication_group_name="550fa9ee-a1f8-4b6d-9bfe-c03c12cd1c72";
SET GLOBAL group_replication_start_on_boot=off;
SET GLOBAL group_replication_local_address="node1:33061";
SET GLOBAL group_replication_group_seeds="node1:33061,node2:33061,node3:33061";
```
## 9. 版本升级
### 9.1 升级准备
1. **备份数据**: 升级前完整备份
2. **测试环境验证**: 在测试环境先进行升级测试
3. **应用兼容性**: 检查应用与新版本的兼容性
4. **回滚计划**: 准备回滚方案
### 9.2 升级步骤
```bash
# 1. 停止应用服务
systemctl stop app-service
# 2. 备份数据
mysqldump --all-databases > backup_before_upgrade.sql
# 3. 升级MySQL
yum update mysql-community-server
# 4. 启动MySQL
systemctl start mysqld
# 5. 运行升级脚本
mysql_upgrade -u root -p
# 6. 启动应用服务
systemctl start app-service
```
## 注意事项
1. **密码安全**: 生产环境使用强密码,定期更换
2. **权限控制**: 遵循最小权限原则,不要使用 root 用户连接应用
3. **定期备份**: 建立完善的备份策略,定期测试恢复
4. **监控告警**: 设置关键指标监控和告警
5. **性能调优**: 根据实际业务负载调整参数
6. **安全更新**: 及时安装安全补丁和更新