数据库配置指南
2025-12-04 22:05 更新
数据库配置指南
数据库选择
DoraCMS 支持两种数据库:
- MongoDB:文档型数据库,适合快速开发和内容管理
- MariaDB:关系型数据库,适合需要强事务支持的场景
MongoDB 配置
1. 安装 MongoDB
macOS 安装
## 使用 Homebrew 安装
brew tap mongodb/brew
brew install mongodb-community@7.0
## 启动 MongoDB 服务
brew services start mongodb-community@7.0
## 验证安装
mongosh --version
Ubuntu 安装
## 导入公钥
wget -qO - https://www.mongodb.org/static/pgp/server-7.0.asc | sudo apt-key add -
## 添加源
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list
## 更新并安装
sudo apt-get update
sudo apt-get install -y mongodb-org
## 启动服务
sudo systemctl start mongod
sudo systemctl enable mongod
Docker 安装
## 启动 MongoDB 容器
docker run -d \
--name mongodb \
-p 27017:27017 \
-e MONGO_INITDB_ROOT_USERNAME=admin \
-e MONGO_INITDB_ROOT_PASSWORD=admin123 \
-v mongodb_data:/data/db \
mongo:7.0
## 验证运行状态
docker ps | grep mongodb
2. 创建数据库和用户
## 连接到 MongoDB
mongosh
## 切换到 admin 数据库
use admin
## 创建管理员用户(如果需要)
db.createUser({
user: "admin",
pwd: "your_admin_password",
roles: ["userAdminAnyDatabase", "dbAdminAnyDatabase", "readWriteAnyDatabase"]
})
## 创建 DoraCMS 数据库
use doracms3
## 创建应用用户
db.createUser({
user: "doracms_user",
pwd: "your_password",
roles: ["readWrite"]
})
## 退出
exit
3. 配置连接
在 .env 文件中配置 MongoDB 连接:
## 数据库类型
DATABASE_TYPE=mongodb
## MongoDB 连接配置
MONGODB_HOST=127.0.0.1
MONGODB_PORT=27017
MONGODB_DATABASE=doracms3
MONGODB_USERNAME=doracms_user
MONGODB_PASSWORD=your_password
## 连接选项
MONGODB_OPTIONS=authSource=doracms3&retryWrites=true&w=majority
4. 验证连接
## 测试连接
mongosh "mongodb://doracms_user:your_password@127.0.0.1:27017/doracms3"
## 或使用连接字符串
mongosh "mongodb://doracms_user:your_password@127.0.0.1:27017/doracms3?authSource=doracms3"
MariaDB 配置
1. 安装 MariaDB
macOS 安装
## 使用 Homebrew 安装
brew install mariadb
## 启动服务
brew services start mariadb
## 安全配置
mysql_secure_installation
Ubuntu 安装
## 安装 MariaDB
sudo apt-get update
sudo apt-get install mariadb-server
## 启动服务
sudo systemctl start mariadb
sudo systemctl enable mariadb
## 安全配置
sudo mysql_secure_installation
Docker 安装
## 启动 MariaDB 容器
docker run -d \
--name mariadb \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=root_password \
-e MYSQL_DATABASE=doracms3 \
-e MYSQL_USER=doracms_user \
-e MYSQL_PASSWORD=user_password \
-v mariadb_data:/var/lib/mysql \
mariadb:10.11
## 验证运行状态
docker ps | grep mariadb
2. 创建数据库和用户
## 连接到 MariaDB
mysql -u root -p
## 创建数据库
CREATE DATABASE doracms3 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
## 创建用户
CREATE USER 'doracms_user'@'localhost' IDENTIFIED BY 'your_password';
CREATE USER 'doracms_user'@'%' IDENTIFIED BY 'your_password';
## 授权
GRANT ALL PRIVILEGES ON doracms3.* TO 'doracms_user'@'localhost';
GRANT ALL PRIVILEGES ON doracms3.* TO 'doracms_user'@'%';
## 刷新权限
FLUSH PRIVILEGES;
## 退出
EXIT;
3. 配置连接
在 .env 文件中配置 MariaDB 连接:
## 数据库类型
DATABASE_TYPE=mariadb
## MariaDB 连接配置
MARIADB_HOST=127.0.0.1
MARIADB_PORT=3306
MARIADB_DATABASE=doracms3
MARIADB_USERNAME=doracms_user
MARIADB_PASSWORD=your_password
## 启用 Repository 模式(推荐)
REPOSITORY_ENABLED=true
4. 验证连接
## 测试连接
mysql -h 127.0.0.1 -P 3306 -u doracms_user -p doracms3
## 查看数据库
SHOW DATABASES;
USE doracms3;
SHOW TABLES;
数据库初始化
MongoDB 初始化
DoraCMS 会在首次启动时自动创建必要的集合和索引:
// 主要集合
- users // 用户信息
- articles // 文章内容
- categories // 分类信息
- tags // 标签信息
- comments // 评论数据
- settings // 系统设置
MariaDB 初始化
启用 Repository 模式后,系统会自动创建数据表:
-- 主要数据表
CREATE TABLE users (
id VARCHAR(36) PRIMARY KEY,
username VARCHAR(50) UNIQUE NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
password VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
CREATE TABLE articles (
id VARCHAR(36) PRIMARY KEY,
title VARCHAR(255) NOT NULL,
content LONGTEXT,
author_id VARCHAR(36),
category_id VARCHAR(36),
status ENUM('draft', 'published', 'archived') DEFAULT 'draft',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (author_id) REFERENCES users(id),
FOREIGN KEY (category_id) REFERENCES categories(id)
);
数据库切换
从 MongoDB 切换到 MariaDB
- 备份 MongoDB 数据:
mongodump --db doracms3 --out ./backup
- 修改配置:
DATABASE_TYPE=mariadb REPOSITORY_ENABLED=true
- 启动应用:
## Docker 方式 docker-compose --profile mariadb up -d
本地开发
pnpm dev
### 从 MariaDB 切换到 MongoDB
1. **备份 MariaDB 数据**:
```bash
mysqldump -u doracms_user -p doracms3 > backup.sql
- 修改配置:
DATABASE_TYPE=mongodb REPOSITORY_ENABLED=false
- 启动应用:
## Docker 方式 docker-compose up -d
本地开发
pnpm dev
## 性能优化
### MongoDB 优化
#### 索引优化
```javascript
// 常用索引
db.articles.createIndex({ "title": "text", "content": "text" })
db.articles.createIndex({ "status": 1, "created_at": -1 })
db.articles.createIndex({ "author_id": 1 })
db.articles.createIndex({ "category_id": 1 })
db.users.createIndex({ "username": 1 })
db.users.createIndex({ "email": 1 })
配置优化
## mongod.conf
storage:
wiredTiger:
engineConfig:
cacheSizeGB: 2
collectionConfig:
blockCompressor: snappy
net:
maxIncomingConnections: 1000
operationProfiling:
slowOpThresholdMs: 100
MariaDB 优化
配置优化
## my.cnf
[mysqld]
innodb_buffer_pool_size = 2G
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
max_connections = 1000
query_cache_size = 256M
query_cache_type = 1
## 字符集
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
索引优化
-- 常用索引
CREATE INDEX idx_articles_status_created ON articles(status, created_at);
CREATE INDEX idx_articles_author ON articles(author_id);
CREATE INDEX idx_articles_category ON articles(category_id);
CREATE INDEX idx_users_username ON users(username);
CREATE INDEX idx_users_email ON users(email);
-- 全文索引
CREATE FULLTEXT INDEX idx_articles_fulltext ON articles(title, content);
备份策略
MongoDB 备份
## 完整备份
mongodump --db doracms3 --out ./backup/$(date +%Y%m%d)
## 增量备份(需要开启 oplog)
mongodump --db doracms3 --oplog --out ./backup/incremental
## 恢复
mongorestore --db doracms3 ./backup/20240101/doracms3
MariaDB 备份
## 完整备份
mysqldump -u doracms_user -p doracms3 > backup_$(date +%Y%m%d).sql
## 只备份结构
mysqldump -u doracms_user -p --no-data doracms3 > structure.sql
## 只备份数据
mysqldump -u doracms_user -p --no-create-info doracms3 > data.sql
## 恢复
mysql -u doracms_user -p doracms3 < backup_20240101.sql
监控和维护
MongoDB 监控
// 查看数据库状态
db.stats()
// 查看集合状态
db.articles.stats()
// 查看慢查询
db.getProfilingStatus()
db.system.profile.find().sort({ts: -1}).limit(5)
// 查看连接数
db.serverStatus().connections
MariaDB 监控
-- 查看数据库大小
SELECT
table_schema AS 'Database',
ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS 'Size (MB)'
FROM information_schema.tables
WHERE table_schema = 'doracms3';
-- 查看表状态
SHOW TABLE STATUS FROM doracms3;
-- 查看连接数
SHOW STATUS LIKE 'Connections';
SHOW STATUS LIKE 'Threads_connected';
-- 查看慢查询
SHOW VARIABLES LIKE 'slow_query_log';
SHOW STATUS LIKE 'Slow_queries';
常见问题
连接问题
MongoDB 连接超时:
## 检查服务状态
brew services list | grep mongodb
sudo systemctl status mongod
## 检查端口
lsof -i :27017
netstat -an | grep 27017
MariaDB 连接被拒绝:
## 检查服务状态
brew services list | grep mariadb
sudo systemctl status mariadb
## 检查端口
lsof -i :3306
netstat -an | grep 3306
权限问题
MongoDB 认证失败:
// 检查用户权限
use doracms3
db.getUsers()
// 重新授权
db.grantRolesToUser("doracms_user", ["readWrite"])
MariaDB 访问被拒绝:
-- 检查用户权限
SELECT User, Host FROM mysql.user WHERE User = 'doracms_user';
SHOW GRANTS FOR 'doracms_user'@'localhost';
-- 重新授权
GRANT ALL PRIVILEGES ON doracms3.* TO 'doracms_user'@'%';
FLUSH PRIVILEGES;以上内容是否对您有帮助:

免费 AI IDE


更多建议: