Mysql安装
概述
本文档涵盖 MySQL 的 Docker 部署方法,支持 5.7 和 8.0 版本,包含密码认证、数据持久化和资源限制配置,适用于开发测试及轻量级生产场景。
核心能力:
- 密码认证保护
- 数据持久化
- 资源限制管理
- 自动创建数据库和用户
部署
1. 创建数据目录
mkdir -p ./mysql/data2. 创建 Docker Compose 编排文件
docker-compose.yaml:
services:
mysql:
image: mysql:8.0
container_name: mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: test
MYSQL_USER: test
MYSQL_PASSWORD: 123456
TZ: Asia/Shanghai
ports:
- "3306:3306"
volumes:
- ./mysql/data:/var/lib/mysql
deploy:
resources:
limits:
cpus: "0.5"
memory: "512M"3. 环境变量说明
| 变量 | 必填 | 说明 |
|---|---|---|
MYSQL_ROOT_PASSWORD |
✅ | root 用户密码 |
MYSQL_DATABASE |
❌ | 容器启动时自动创建的数据库 |
MYSQL_USER |
❌ | 自动创建的用户名(需配合 MYSQL_PASSWORD) |
MYSQL_PASSWORD |
❌ | 自动创建用户的密码 |
TZ |
❌ | 时区设置 |
4. 版本切换
如需部署 MySQL 5.7,将镜像版本改为:
image: mysql:5.7.28启动
docker compose up -d查看启动日志:
docker logs mysql -f --tail=50验证
# 进入容器连接 MySQL
docker exec -it mysql mysql -uroot -p123456
# 或使用外部客户端
mysql -h 127.0.0.1 -P 3306 -uroot -p123456常用管理命令
| 操作 | 命令 |
|---|---|
| 启动 MySQL | docker compose up -d |
| 停止 MySQL | docker compose stop |
| 重启 MySQL | docker compose restart |
| 查看状态 | docker compose ps |
| 查看日志 | docker logs mysql -f --tail=100 |
| 进入容器 | docker exec -it mysql /bin/bash |
| 连接 MySQL(容器内) | docker exec -it mysql mysql -uroot -p123456 |
导入与导出
导入 SQL 文件
# 方式一:将 SQL 文件复制到容器内执行
docker cp /path/to/backup.sql mysql:/
docker exec -it mysql mysql -uroot -p123456 test < /backup.sql
# 方式二:直接通过管道导入
docker exec -i mysql mysql -uroot -p123456 test < /path/to/backup.sql导出数据库
# 导出所有数据库
docker exec mysql mysqldump -uroot -p123456 --all-databases > backup_all.sql
# 导出指定数据库
docker exec mysql mysqldump -uroot -p123456 test > backup_test.sql
# 导出结构(不含数据)
docker exec mysql mysqldump -uroot -p123456 -d test > backup_structure.sql常见问题与注意事项
连接被拒绝
- 检查端口是否被占用:
netstat -tlnp | grep 3306- 确认防火墙已放行 3306 端口:
firewall-cmd --add-port=3306/tcp --permanent
firewall-cmd --reload修改密码
docker exec -it mysql mysql -uroot -p123456
ALTER USER 'root'@'%' IDENTIFIED BY 'newpassword';
FLUSH PRIVILEGES;数据持久化
数据存储在 ./mysql/data 目录,删除该目录会丢失所有数据,删除前请先备份。
字符集配置
如需指定字符集,可使用自定义配置文件:
# 创建配置文件
cat > ./mysql/my.cnf <<EOF
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
init-connect='SET NAMES utf8mb4'
EOF修改 docker-compose.yaml 挂载配置:
volumes:
- ./mysql/data:/var/lib/mysql
- ./mysql/my.cnf:/etc/mysql/conf.d/my.cnfMySQL 8.0 认证方式问题
MySQL 8.0 默认使用 caching_sha2_password 认证,部分老客户端无法连接,可改为 mysql_native_password:
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
FLUSH PRIVILEGES;