Ubuntu 22.04 (WSL2 )使用 Docker 安装 MySQL
MySQL 是一个广泛使用的开源关系型数据库管理系统。本文将指导你在 WSL2 的 Ubuntu 22.04 环境下通过 Docker 和 Docker Compose 安装和配置 MySQL 8.4.5。
环境准备
- 操作系统: WSL2 Ubuntu 22.04
- 前提条件: 已安装 Docker 和 Docker Compose
安装步骤
1. 创建 MySQL 数据和日志目录
为 MySQL 创建持久化存储数据和日志的目录,并设置适当的权限。
# 创建数据和日志目录,`-p` 确保父目录不存在时自动创建。
mkdir -p /home/mysql/data /home/mysql/log
# 递归设置目录权限为 777,确保 MySQL 容器有读写权限。
chmod -R 777 /home/mysql/*
2. 创建 Docker Compose 配置文件
创建并编辑 docker-compose.yml
文件,用于定义 MySQL 服务的配置。
sudo touch /home/mysql/docker-compose.yml
sudo chmod 644 /home/mysql/docker-compose.yml
docker-compose.yml
内容如下,包含详细的参数注释:
services:
mysql:
image: mysql:8.4.5 # 使用 MySQL 8.4.5 官方镜像
container_name: mysql8 # 容器名称,方便管理和识别
restart: unless-stopped # 除非手动停止,否则容器自动重启
environment:
MYSQL_ROOT_PASSWORD: your_root_password # 设置 MySQL root 用户密码
MYSQL_USER: your_user_name # 创建普通用户
MYSQL_PASSWORD: your_password # 设置普通用户密码
TZ: Asia/Shanghai # 设置容器时区为上海
ports:
- "3306:3306" # 映射 MySQL 默认端口到宿主机
volumes:
- /home/mysql/data:/var/lib/mysql # 挂载数据目录,持久化数据库文件
- /home/mysql/log:/var/log/mysql # 挂载日志目录,存储错误日志等
- /home/mysql/custom.cnf:/etc/mysql/conf.d/custom.cnf # 挂载自定义配置文件
# command: ["mysqld", "--verbose", "--help"] # 可选:调试启动命令,生产环境建议注释
3. 创建 MySQL 自定义配置文件
创建 custom.cnf
文件,用于自定义 MySQL 配置。
sudo touch /home/mysql/custom.cnf
sudo chmod 644 /home/mysql/custom.cnf
custom.cnf
内容如下,包含详细的参数注释:
[mysqld]
# 服务器唯一 ID,用于主从复制
server-id = 1
# 监听所有网卡,允许远程连接
bind-address = 0.0.0.0
# 表名不区分大小写,兼容 Windows
lower_case_table_names = 1
# 指定 socket 文件路径
socket = /var/run/mysqld/mysqld.sock
# 最大连接数,视内存调整
max_connections = 200
# 单用户最大连接数
max_user_connections = 100
# 空闲连接超时时间(秒)
wait_timeout = 28800
# 交互连接超时时间(秒)
interactive_timeout = 28800
# 错误日志文件路径
log-error = /var/log/mysql/error.log
# 关闭通用查询日志,生产环境推荐
general_log = OFF
# 通用日志文件路径
general_log_file = /var/log/mysql/general.log
# 开启慢查询日志
slow_query_log = ON
# 慢查询日志文件路径
slow_query_log_file = /var/log/mysql/slow.log
# 慢查询阈值(秒)
long_query_time = 2
# 默认字符集,支持 emoji
character-set-server = utf8mb4
# 默认排序规则
collation-server = utf8mb4_unicode_ci
# 设置数据库时区为东八区
default_time_zone = '+08:00'
4. 启动 MySQL 容器
使用 Docker Compose 启动 MySQL 服务。
docker compose -f /home/mysql/docker-compose.yml up -d
docker compose
: 调用 Docker Compose 命令。-f /home/mysql/docker-compose.yml
: 指定 Compose 配置文件路径。up -d
: 后台启动并运行服务。
5. 检查容器日志
查看 MySQL 容器日志,确认启动是否成功。
# 显示名为 `mysql8` 的容器日志,检查是否有错误
docker logs -f mysql8
6. 验证 MySQL 安装
方法 1:通过容器内 MySQL 客户端验证
进入容器并登录 MySQL。
docker exec -it mysql8 mysql -u root -p
docker exec -it mysql8
: 进入名为mysql8
的容器,-it
表示交互模式。mysql -u root -p
: 使用 root 用户登录 MySQL,输入your_root_password
。
登录后,运行以下命令验证:
SHOW DATABASES;
SELECT USER, HOST FROM mysql.user;
预期输出应包含默认数据库(如 mysql
, information_schema
)和配置的用户(如 your_user_name
)。
方法 2:通过外部 MySQL 客户端验证
在宿主机或另一台机器上安装 MySQL 客户端(如 mysql
命令行工具),然后连接:
mysql -h 127.0.0.1 -u your_user_name -p
输入 your_password
后,运行以下命令:
CREATE DATABASE test_db;
SHOW DATABASES;
如果能成功创建数据库并看到 test_db
,说明 MySQL 配置正确。
方法 3:通过 GUI 工具验证
使用工具如 DBeaver 或 MySQL Workbench,配置连接参数:
- 主机:
127.0.0.1
- 端口:
3306
- 用户名:
your_user_name
- 密码:
your_password
连接成功后,可视化浏览数据库和表。
7. 管理 MySQL 容器
- 查看容器状态:
docker ps
- 停止服务:
docker compose -f /home/mysql/docker-compose.yml down
- 重新启动服务:
docker compose -f /home/mysql/docker-compose.yml up -d
- 删除容器和数据(谨慎操作):
docker compose -f /home/mysql/docker-compose.yml down -v
注意事项
- 权限问题: 确保
/home/mysql/data
和/home/mysql/log
目录权限正确,避免容器无法写入。 - 密码安全:
MYSQL_ROOT_PASSWORD
和MYSQL_PASSWORD
建议使用强密码,至少 8 位,包含字母、数字和特殊字符。 - 远程访问:
bind-address = 0.0.0.0
允许远程连接,生产环境建议配置防火墙或限制访问 IP。 - 日志管理: 慢查询日志和错误日志会占用磁盘空间,定期清理或调整配置(如关闭
general_log
)。 - 版本选择: 本文使用
mysql:8.4.5
,可根据需要替换为其他版本,查看 MySQL Docker Hub 获取最新标签。
总结
通过以上步骤,你已在 WSL2 Ubuntu 22.04 上成功部署了 MySQL 8.4.5。使用 Docker Compose 简化了配置管理,自定义 custom.cnf
文件提供了灵活的数据库优化选项。