数据库设置

本文档介绍如何配置 Mindra 开源版本所需的 MySQL 数据库。

数据库概述

Mindra 使用 MySQL 数据库存储以下数据:

  • 用户账户信息 (users 表)
  • 激活码信息 (activation 表)

数据库架构

users 表

存储用户基本信息:

字段 类型 说明
user_id INT (主键) 用户 ID,自增
username VARCHAR(255) 用户名
password VARCHAR(255) 密码哈希值
created_at TIMESTAMP 账户创建时间
credit_balance DECIMAL(12,4) 用户积分余额

activation 表

存储用户激活码:

字段 类型 说明
activation_code VARCHAR(255) (主键) 激活码
user_id INT (外键) 关联的用户 ID

创建数据库

方法一:使用提供的 SQL 文件

  1. 打开终端,连接到 MySQL:
mysql -u root -p
  1. 执行以下命令创建数据库:
-- 创建数据库
CREATE DATABASE mindra CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 使用数据库
USE mindra;

-- 执行提供的 SQL 文件
SOURCE /path/to/mindra.sql;

方法二:手动执行 SQL

  1. 登录 MySQL:
mysql -u root -p
  1. 创建数据库和表:
-- 创建数据库
CREATE DATABASE mindra CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 使用数据库
USE mindra;

-- 创建 users 表
CREATE TABLE `users` (
  `user_id` int NOT NULL AUTO_INCREMENT,
  `username` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL,
  `password` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL,
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `credit_balance` decimal(12,4) DEFAULT NULL,
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

-- 创建 activation 表
CREATE TABLE `activation` (
  `activation_code` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL,
  `user_id` int NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`activation_code`),
  UNIQUE KEY `user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

创建数据库用户(可选)

为了安全起见,建议创建专用的数据库用户:

-- 创建用户
CREATE USER 'mindra_user'@'localhost' IDENTIFIED BY 'your_password';

-- 授权
GRANT ALL PRIVILEGES ON mindra.* TO 'mindra_user'@'localhost';

-- 刷新权限
FLUSH PRIVILEGES;

插入测试数据(可选)

添加测试用户

-- 插入测试用户(密码为 123456 的 SHA256 哈希值)
INSERT INTO users (username, password, credit_balance) 
VALUES ('test', '8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92', 100.0000);

添加激活码

-- 插入激活码(关联用户 ID 1)
INSERT INTO activation (activation_code, user_id) 
VALUES ('TEST001', 1);

配置数据库连接

数据库创建完成后,需要在 config.yaml 中配置连接信息:

database:
  host: "localhost"          # 数据库主机地址
  database: "mindra"         # 数据库名称
  user: "root"               # 数据库用户名
  password: "your_password"  # 数据库密码

验证数据库连接

创建测试脚本 test_db.py

import pymysql
import yaml
from pathlib import Path

# 读取配置
with open(Path("config.yaml"), 'r', encoding='utf-8') as f:
    config = yaml.safe_load(f)
    db_config = config['database']

# 连接数据库
try:
    connection = pymysql.connect(
        host=db_config['host'],
        database=db_config['database'],
        user=db_config['user'],
        password=db_config['password'],
        cursorclass=pymysql.cursors.DictCursor
    )
    print("数据库连接成功!")

    # 测试查询
    with connection.cursor() as cursor:
        cursor.execute("SELECT 1")
        result = cursor.fetchone()
        print(f"测试查询成功: {result}")

    connection.close()
except Exception as e:
    print(f"数据库连接失败: {e}")

运行测试:

python test_db.py

数据库管理工具推荐

图形化工具

  • MySQL Workbench (官方工具)
  • Navicat for MySQL
  • DBeaver (免费开源)
  • phpMyAdmin (Web 界面)

命令行工具

# 连接到 MySQL
mysql -u username -p

# 查看所有数据库
SHOW DATABASES;

# 使用 mindra 数据库
USE mindra;

# 查看所有表
SHOW TABLES;

# 查看表结构
DESCRIBE users;

常见问题

无法连接到 MySQL

错误信息: Can't connect to MySQL server on 'localhost'

解决方案:

  1. 检查 MySQL 服务是否启动: ```bash # Windows net start mysql

# macOS/Linux sudo service mysql start ```

  1. 检查端口是否正确(默认 3306)

访问被拒绝

错误信息: Access denied for user 'root'@'localhost'

解决方案:

  1. 确认用户名和密码正确
  2. 重置 root 密码(如忘记)

字符集问题

问题: 中文数据乱码

解决方案:

确保数据库使用 utf8mb4 字符集:

ALTER DATABASE mindra CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;