数据库配置指南

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

  1. 备份 MongoDB 数据
    mongodump --db doracms3 --out ./backup

  1. 修改配置
    DATABASE_TYPE=mariadb
    REPOSITORY_ENABLED=true

  1. 启动应用
    
    ## Docker 方式
    docker-compose --profile mariadb up -d

本地开发

pnpm dev



### 从 MariaDB 切换到 MongoDB


1. **备份 MariaDB 数据**:
```bash
mysqldump -u doracms_user -p doracms3 > backup.sql

  1. 修改配置
    DATABASE_TYPE=mongodb
    REPOSITORY_ENABLED=false

  1. 启动应用
    
    ## 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;
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号