MySQL / MariaDB
部署带有持久存储的 MySQL 或 MariaDB 数据库
MySQL / MariaDB
部署带有持久存储的 MySQL 或 MariaDB 数据库。
快速部署
创建服务
进入 Services → New Service
输入服务名称:mysql 并点击 Create
配置源
- 进入 Source 标签页
- 选择 Docker Image 作为源类型
- 输入镜像:
mysql:8或mariadb:11 - 点击 Save
添加环境变量
MYSQL_ROOT_PASSWORD=your-secure-password
MYSQL_DATABASE=myapp
MYSQL_USER=appuser
MYSQL_PASSWORD=app-secure-password添加存储
| 挂载路径 | 卷 |
|---|---|
/var/lib/mysql | mysql-data |
部署
点击 Create 部署。
配置选项
MySQL 8
Image: mysql:8环境变量:
| 变量 | 描述 | 必填 |
|---|---|---|
MYSQL_ROOT_PASSWORD | Root 用户密码 | 是 |
MYSQL_DATABASE | 要创建的数据库 | 否 |
MYSQL_USER | 附加用户 | 否 |
MYSQL_PASSWORD | 用户密码 | 否 |
MariaDB
Image: mariadb:11与 MySQL 相同的环境变量。
连接
从其他服务
使用 Docker 网络:
mysql://appuser:app-secure-password@mysql:3306/myapp或使用完整容器名:
mysql://appuser:password@senate-mysql-xxx:3306/myapp外部访问
公开暴露数据库是安全风险。请改用 SSH 隧道或 VPN。
如必须外部暴露:
- 添加端口映射:
3306:3306 - 配置防火墙规则
自定义配置
使用配置文件
- 创建
my.cnf:
[mysqld]
max_connections = 200
innodb_buffer_pool_size = 1G
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log- 挂载为卷:
/path/to/my.cnf:/etc/mysql/conf.d/custom.cnf:ro备份
手动备份
docker exec senate-mysql-xxx mysqldump -u root -p myapp > backup.sql恢复
docker exec -i senate-mysql-xxx mysql -u root -p myapp < backup.sql自动备份
使用 cron 任务或备份服务:
#!/bin/bash
DATE=$(date +%Y%m%d)
docker exec senate-mysql-xxx mysqldump -u root -p$MYSQL_ROOT_PASSWORD myapp | gzip > /backups/myapp-$DATE.sql.gz性能提示
- 调整缓冲池:将
innodb_buffer_pool_size设置为可用 RAM 的 70-80% - 使用 SSD:用于数据库存储卷
- 监控慢查询:启用慢查询日志
- 定期维护:定期运行
OPTIMIZE TABLE