Python · 2 分钟阅读
MySQL 安装与配置
2026 年推荐:MySQL 8.0 LTS(生产环境),MariaDB 11.x(开源替代)。
版本选择
| 数据库 | 状态 | 说明 |
|---|---|---|
| MySQL 5.7 | 已停止 | 不推荐 |
| MySQL 8.0 | 长期支持 | 生产首选 |
| MySQL 8.4 | 当前创新版 | 新功能优先 |
| MariaDB 11.x | 长期支持 | 兼容 MySQL,性能更优 |
安装
macOS
brew install mysql@8.0
brew services start mysql@8.0
Ubuntu / Debian
sudo apt update
sudo apt install -y mysql-server-8.0
sudo systemctl start mysql
Docker(最推荐)
docker run --name mysql8 -d \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=your_password \
-e MYSQL_DATABASE=django_bbs \
-e MYSQL_USER=django \
-e MYSQL_PASSWORD=django_pwd \
-v mysql_data:/var/lib/mysql \
mysql:8.0 --character-set-server=utf8mb4 --collation-server=utf8mb4_0900_ai_ci
字符集配置
确保数据库与表使用 utf8mb4:
CREATE DATABASE django_bbs
CHARACTER SET utf8mb4
COLLATE utf8mb4_0900_ai_ci;
用户与权限
-- 创建专用账号(避免用 root)
CREATE USER 'django'@'%' IDENTIFIED BY 'strong_password';
-- 最小权限原则
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER,
REFERENCES ON django_bbs.* TO 'django'@'%';
FLUSH PRIVILEGES;
Django 端配置
# settings.py
DATABASES = {
"default": {
"ENGINE": "django.db.backends.mysql",
"NAME": "django_bbs",
"USER": "django",
"PASSWORD": os.getenv("DB_PASSWORD"),
"HOST": "127.0.0.1",
"PORT": "3306",
"OPTIONS": {
"charset": "utf8mb4",
"init_command": "SET sql_mode='STRICT_TRANS_TABLES'",
},
"CONN_MAX_AGE": 60,
}
}
驱动选择
| 驱动 | 类型 | 维护方 |
|---|---|---|
mysqlclient |
C 扩展,性能最佳 | Django 官方推荐 |
PyMySQL |
纯 Python,部署简单 | 社区 |
mysql-connector-python |
官方 | Oracle |
安装:
uv pip install mysqlclient
最佳实践
- ✅ 用专用账号 + 最小权限
- ✅ 启用
STRICT_TRANS_TABLESSQL 模式 - ✅ 使用连接池(
CONN_MAX_AGE或外部 Proxy) - ✅ 密码通过环境变量注入
- ❌ 不要让 root 远程可登录