Docker 安装 MySQL 详细教程
环境准备
在开始之前,请确保系统满足以下要求:
已安装 Docker(版本 18.06 或更高)
具备基本的 Linux 命令行操作能力
系统具有足够的存储空间和内存
1. 拉取 MySQL 镜像
首先,从 Docker Hub 拉取官方 MySQL 镜像:
# 拉取最新版本的 MySQL 镜像
docker pull mysql:latest
# 或者指定特定版本(推荐)
docker pull mysql:8.0
推荐使用指定版本的方式,这样可以确保环境的一致性和稳定性。
2. 运行 MySQL 容器
2.1 基础运行命令
使用以下命令启动一个 MySQL 実例:
docker run -d \
--name mysql-container \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=your_root_password \
mysql:8.0
参数说明:
-d
: 后台运行容器--name
: 指定容器名称-p
: 端口映射(主机端口:容器端口)-e
: 设置环境变量,此处设置 root 用户密码
2.2 高级配置运行
为了更好地管理 MySQL,建议使用更完整的配置:
docker run -d \
--name mysql-container \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=root123 \
-e MYSQL_DATABASE=testdb \
-e MYSQL_USER=testuser \
-e MYSQL_PASSWORD=test123 \
-v mysql-data:/var/lib/mysql \
-v mysql-conf:/etc/mysql/conf.d \
mysql:8.0
新增配置说明:
MYSQL_DATABASE
: 创建默认数据库MYSQL_USER MYSQL_PASSWORD
: 创建普通用户-v mysql-data:/var/lib/mysql
: 挂载数据卷,持久化数据-v mysql-conf:/etc/mysql/conf.d
: 挂载配置文件目录
3. 数据持久化配置
为了避免容器删除后数据丢失,需要配置数据持久化:
3.1 使用命名卷(推荐)
# 创建命名卷
docker volume create mysql-data
# 运行容器并挂载卷
docker run -d \
--name mysql-container \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=root123 \
-v mysql-data:/var/lib/mysql \
mysql:8.0
3.2 使用绑定挂载
# 创建本地目录
mkdir -p /opt/mysql/data
# 运行容器并绑定挂载
docker run -d \
--name mysql-container \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=root123 \
-v /opt/mysql/data:/var/lib/mysql \
mysql:8.0
4. 自定义配置
4.1 创建自定义配置文件
创建 my.cnf
配置文件:
[mysqld]
# 基础配置
port=3306
bind-address=0.0.0.0
# 字符集配置
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
# 性能优化
innodb_buffer_pool_size=256M
max_connections=200
# 日志配置
slow_query_log=1
slow_query_log_file=/var/log/mysql/slow.log
long_query_time=2
[mysql]
default-character-set=utf8mb4
[client]
default-character-set=utf8mb4
4.2 挂载配置文件
# 创建配置目录
mkdir -p /opt/mysql/conf
# 将配置文件放入目录
# 将上面的配置保存为 /opt/mysql/conf/my.cnf
# 运行容器并挂载配置
docker run -d \
--name mysql-container \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=root123 \
-v /opt/mysql/data:/var/lib/mysql \
-v /opt/mysql/conf:/etc/mysql/conf.d \
mysql:8.0
5. 容器管理命令
5.1 常用管理命令
# 查看运行中的容器
docker ps
# 查看容器日志
docker logs mysql-container
# 进入容器内部
docker exec -it mysql-container bash
# 停止容器
docker stop mysql-container
# 启动容器
docker start mysql-container
# 重启容器
docker restart mysql-container
# 删除容器
docker rm mysql-container
5.2 连接 MySQL
# 在容器内部连接
docker exec -it mysql-container mysql -uroot -p
# 在主机上使用 MySQL 客户端连接(需先安装)
mysql -h127.0.0.1 -uroot -p
6. 使用 Docker Compose(推荐)
创建 [docker-compose.yml] 文件:
version: '3.8'
services:
mysql:
image: mysql:8.0
container_name: mysql-container
restart: always
environment:
MYSQL_ROOT_PASSWORD: root123
MYSQL_DATABASE: testdb
MYSQL_USER: testuser
MYSQL_PASSWORD: test123
ports:
- "3306:3306"
volumes:
- mysql-data:/var/lib/mysql
- ./mysql/conf:/etc/mysql/conf.d
- ./mysql/logs:/var/log/mysql
networks:
- mysql-network
volumes:
mysql-data:
networks:
mysql-network:
driver: bridge
运行命令:
# 启动服务
docker-compose up -d
# 停止服务
docker-compose down
# 查看服务状态
docker-compose ps
7. 安全配置建议
7.1 修改默认配置
不要使用默认端口(3306)
设置强密码策略
限制 root 用户远程访问
定期备份数据
7.2 网络安全
# 创建专用网络
docker network create mysql-network
# 在专用网络中运行容器
docker run -d \
--name mysql-container \
--network mysql-network \
-e MYSQL_ROOT_PASSWORD=root123 \
-v mysql-data:/var/lib/mysql \
mysql:8.0
8. 备份与恢复
8.1 数据备份
# 备份整个数据库
docker exec mysql-container mysqldump -uroot -p --all-databases > backup.sql
# 备份特定数据库
docker exec mysql-container mysqldump -uroot -p database_name > database_backup.sql
8.2 数据恢复
# 恢复数据库
docker exec -i mysql-container mysql -uroot -p < backup.sql
9. 常见问题解决
9.1 连接被拒绝
检查端口是否正确映射,防火墙是否开放相应端口。
9.2 权限问题
确保使用正确的用户名和密码,检查用户权限配置。
9.3 存储空间不足
清理不需要的容器和镜像,或者扩展存储空间。
10. 简单命令
docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -v mysql-data:/var/lib/mysql mysql:8.0.43
评论