环境准备
1 支持的数据系统
- 主数据库: PostgreSQL 12+ (推荐) / MySQL 8.0+
- 缓存数据库: Redis 6.0+
- 向量数据库 (可选): Pinecone / Weaviate / Qdrant
2 系统要求
# 检查现有数据库 # PostgreSQL psql --version # MySQL mysql --version # Redis redis-server --version
数据库安装与配置
1 PostgreSQL安装与设置
Ubuntu/Debian:

# 安装PostgreSQL sudo apt update sudo apt install postgresql postgresql-contrib # 启动服务 sudo systemctl start postgresql sudo systemctl enable postgresql # 创建OpenClaw数据库和用户 sudo -u postgres psql
PostgreSQL SQL命令:
-- 创建数据库 CREATE DATABASE openclaw_db; -- 创建用户 CREATE USER openclaw_user WITH PASSWORD 'your_secure_password'; -- 授予权限 GRANT ALL PRIVILEGES ON DATABASE openclaw_db TO openclaw_user; -- 设置扩展(用于向量搜索) \c openclaw_db CREATE EXTENSION IF NOT EXISTS vector; CREATE EXTENSION IF NOT EXISTS pg_trgm;
2 MySQL安装与设置
Ubuntu/Debian:
# 安装MySQL sudo apt update sudo apt install mysql-server # 安全配置 sudo mysql_secure_installation # 启动服务 sudo systemctl start mysql sudo systemctl enable mysql
MySQL SQL命令:
-- 创建数据库 CREATE DATABASE openclaw_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- 创建用户 CREATE USER 'openclaw_user'@'localhost' IDENTIFIED BY 'your_secure_password'; -- 授予权限 GRANT ALL PRIVILEGES ON openclaw_db.* TO 'openclaw_user'@'localhost'; FLUSH PRIVILEGES;
3 Redis安装
# 安装Redis sudo apt update sudo apt install redis-server # 配置Redis sudo nano /etc/redis/redis.conf # 修改以下配置: # maxmemory 256mb # maxmemory-policy allkeys-lru # 重启服务 sudo systemctl restart redis sudo systemctl enable redis
OpenClaw数据库配置
1 配置文件设置
编辑 config/database.yml (或 .env 文件):
# PostgreSQL配置示例 production: adapter: postgresql encoding: unicode database: openclaw_db pool: 5 username: openclaw_user password: <%= ENV['OPENCLAW_DATABASE_PASSWORD'] %> host: localhost port: 5432 # 或MySQL配置 production: adapter: mysql2 encoding: utf8mb4 database: openclaw_db username: openclaw_user password: <%= ENV['OPENCLAW_DATABASE_PASSWORD'] %> host: localhost port: 3306
2 环境变量配置
创建 .env 文件:
# 数据库配置 DB_HOST=localhost DB_PORT=5432 DB_NAME=openclaw_db DB_USER=openclaw_user DB_PASSWORD=your_secure_password # Redis配置 REDIS_URL=redis://localhost:6379/0 REDIS_CACHE_URL=redis://localhost:6379/1 # 可选:向量数据库 PINECONE_API_KEY=your_pinecone_key PINECONE_ENVIRONMENT=us-west1-gcp
数据库迁移与初始化
1 运行数据库迁移
# 进入OpenClaw安装目录 cd /path/to/openclaw # 安装依赖 pip install -r requirements.txt # 或使用poetry poetry install # 运行迁移 python manage.py migrate # 或使用alembic(如果使用SQLAlchemy) alembic upgrade head # 创建超级用户 python manage.py createsuperuser
2 初始化数据
# 加载初始数据 python manage.py loaddata initial_data.json # 或运行初始化脚本 python scripts/init_database.py
数据库优化配置
1 PostgreSQL优化
编辑 /etc/postgresql/版本/main/postgresql.conf:
# 内存设置 shared_buffers = 256MB work_mem = 16MB maintenance_work_mem = 64MB # 并行设置 max_worker_processes = 8 max_parallel_workers_per_gather = 4 # WAL设置 wal_buffers = 16MB min_wal_size = 1GB max_wal_size = 4GB # 连接设置 max_connections = 100
2 MySQL优化
编辑 /etc/mysql/my.cnf:
[mysqld] # 内存设置 innodb_buffer_pool_size = 256M innodb_log_file_size = 64M key_buffer_size = 128M # 连接设置 max_connections = 100 thread_cache_size = 8 # 查询缓存 query_cache_type = 1 query_cache_size = 32M
备份与恢复
1 备份脚本
创建 scripts/backup.sh:
#!/bin/bash BACKUP_DIR="/var/backups/openclaw" DATE=$(date +%Y%m%d_%H%M%S) # PostgreSQL备份 pg_dump -U openclaw_user -h localhost openclaw_db > \ $BACKUP_DIR/openclaw_db_$DATE.sql # 压缩备份 gzip $BACKUP_DIR/openclaw_db_$DATE.sql # 保留最近7天备份 find $BACKUP_DIR -name "*.gz" -mtime +7 -delete
2 恢复数据库
# 解压备份文件 gunzip openclaw_db_20240101_120000.sql.gz # 恢复PostgreSQL psql -U openclaw_user -h localhost openclaw_db < openclaw_db_20240101_120000.sql # MySQL恢复 mysql -u openclaw_user -p openclaw_db < backup_file.sql
监控与维护
1 监控命令
# 检查数据库连接 python manage.py check --database default # 查看数据库状态 # PostgreSQL psql -U openclaw_user -h localhost -c "SELECT version();" psql -U openclaw_user -h localhost -c "\l" psql -U openclaw_user -h localhost -c "\dt" # MySQL mysql -u openclaw_user -p -e "SHOW DATABASES;" mysql -u openclaw_user -p -e "SHOW TABLES FROM openclaw_db;" # Redis redis-cli ping redis-cli info
2 定期维护任务
创建 scripts/maintenance.py:
#!/usr/bin/env python
import subprocess
import schedule
import time
def vacuum_database():
"""定期清理数据库"""
# PostgreSQL VACUUM
subprocess.run([
'psql', '-U', 'openclaw_user',
'-h', 'localhost',
'-d', 'openclaw_db',
'-c', 'VACUUM ANALYZE;'
])
def clear_redis_cache():
"""清理Redis缓存"""
subprocess.run([
'redis-cli', 'FLUSHDB'
])
if __name__ == "__main__":
# 每天凌晨3点执行
schedule.every().day.at("03:00").do(vacuum_database)
schedule.every().sunday.at("04:00").do(clear_redis_cache)
while True:
schedule.run_pending()
time.sleep(60)
故障排除
常见问题及解决方案
-
连接失败
# 检查服务状态 sudo systemctl status postgresql sudo systemctl status mysql sudo systemctl status redis # 检查端口 netstat -tulpn | grep -E '5432|3306|6379' # 检查防火墙 sudo ufw status
-
权限问题
-- PostgreSQL权限检查 \du openclaw_user -- 重新授权 GRANT ALL PRIVILEGES ON DATABASE openclaw_db TO openclaw_user;
-
性能问题
-- 查看慢查询 -- PostgreSQL SELECT * FROM pg_stat_activity WHERE state = 'active'; -- MySQL SHOW PROCESSLIST; SET GLOBAL slow_query_log = 'ON';
高级配置(可选)
1 配置读写分离
# config/database.yml
production:
primary:
adapter: postgresql
host: primary-db.example.com
username: openclaw_user
password: <%= ENV['DB_PASSWORD'] %>
database: openclaw_db
replica:
adapter: postgresql
host: replica-db.example.com
username: openclaw_user
password: <%= ENV['DB_PASSWORD'] %>
database: openclaw_db
replica: true
2 配置连接池
# 数据库连接池配置
DATABASE_POOL = {
'max_overflow': 10,
'pool_size': 5,
'pool_recycle': 3600,
'pool_timeout': 30
}
安全建议
- 使用强密码:至少16位,包含大小写字母、数字和特殊字符
- 定期更新密码:每90天更换一次数据库密码
- 限制访问IP:仅允许应用服务器访问数据库
- 启用SSL连接:加密数据库连接
- 定期审计:检查数据库日志和访问记录
重要提示:生产环境部署前,请务必进行完整备份并在测试环境验证所有配置,建议咨询数据库管理员进行生产环境优化。
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。