Echo Server:MySQL 持久化用户系统

第二阶段:把内存账号升级为 MySQL 持久化账号系统

MySQL数据库Drogon DbClient

0. 阶段目标

把已经跑通的 /ping、注册、登录接口从内存临时保存升级为 MySQL 持久化保存。完成后服务器重启,账号仍然存在。

项目说明
建议位置精选作品详情页 / 项目文档页
统一风格左侧导航、右侧正文、表格说明、折叠代码块、阶段总结。
阅读顺序建议从总览页进入,再按卡片顺序阅读。

1. 安装并启动 MySQL

先保证 MySQL 服务可用,再创建数据库、业务用户和 users 表。

sudo apt update
sudo apt install -y mysql-server libmysqlclient-dev
sudo service mysql start
sudo service mysql status

# 进入 MySQL 管理终端
sudo mysql

2. 数据库与 users 表

统一使用 echo_app 数据库和 echo_user 用户,字符集使用 utf8mb4。

CREATE DATABASE IF NOT EXISTS echo_app
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;

CREATE USER IF NOT EXISTS 'echo_user'@'localhost' IDENTIFIED BY 'Echo123456';
GRANT ALL PRIVILEGES ON echo_app.* TO 'echo_user'@'localhost';
FLUSH PRIVILEGES;

USE echo_app;

CREATE TABLE IF NOT EXISTS users (
  id BIGINT PRIMARY KEY AUTO_INCREMENT,
  username VARCHAR(50) NOT NULL UNIQUE,
  password_hash VARCHAR(255) NOT NULL,
  nickname VARCHAR(50) DEFAULT NULL,
  avatar_url VARCHAR(255) DEFAULT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  INDEX idx_users_username (username)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

3. 注册登录验证

注册接口写入 users 表,登录接口从 MySQL 查询,并返回 demo_token。

U="charlie_$(date +%s)"

curl -i -X POST http://127.0.0.1:8080/api/auth/register   -H "Content-Type: application/json"   -d "{"username":"$U","password":"123456","nickname":"Charlie"}"

curl -i -X POST http://127.0.0.1:8080/api/auth/login   -H "Content-Type: application/json"   -d "{"username":"$U","password":"123456"}"

mysql -u echo_user -p echo_app -e   "SELECT id, username, password_hash, created_at FROM users ORDER BY id DESC LIMIT 5;"