Echo Server: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;"