Docker部署MySQL5.7:从安装到持久化配置全流程

2026-09-02 19:12:31 6 次阅读

Docker部署MySQL5.7:从安装到持久化配置全流程

MySQL作为应用系统中最常用的关系型数据库之一,在开发、测试以及生产环境中都有广泛应用。传统方式安装MySQL需要处理软件包安装、环境配置、服务管理、版本兼容等问题,而通过Docker部署MySQL5.7,可以快速完成数据库环境搭建,同时利用容器化技术实现环境隔离和便捷迁移。

本文将详细介绍Docker部署MySQL5.7的完整流程,包括Docker环境准备、MySQL5.7镜像获取、容器创建、数据持久化配置、远程连接设置以及常见问题排查,帮助开发者快速搭建稳定可靠的MySQL运行环境。

一、为什么选择Docker部署MySQL5.7

使用Docker运行MySQL,相比传统安装方式具有明显优势:

1. 环境隔离

Docker容器拥有独立运行环境,不会影响宿主机上的其他软件,也避免了不同项目之间MySQL版本冲突的问题。

例如,一个项目需要MySQL5.7,另一个项目需要MySQL8.0,可以通过不同容器同时运行:

  • MySQL5.7容器负责旧项目运行;

  • MySQL8.0容器提供新项目测试环境。

两者互不干扰。

2. 快速部署

传统安装MySQL需要下载软件包、配置服务、初始化数据库等多个步骤,而Docker只需要拉取镜像并启动容器即可。

3. 方便迁移

Docker环境可以通过镜像快速复制,在开发、测试、生产环境之间保持一致,降低部署成本。

4. 易于管理

通过Docker命令即可完成启动、停止、删除、升级等操作,不需要手动管理系统服务。


二、安装Docker环境

在部署MySQL5.7之前,需要确保服务器已经安装Docker。

可以通过以下命令检查Docker版本:

docker -v

如果返回类似:

Docker version 24.x.x

说明Docker已经安装成功。

如果系统没有安装Docker,可以根据操作系统进行安装。

Linux系统安装Docker示例

更新软件源:

yum update -y

安装Docker:

yum install docker -y

启动Docker服务:

systemctl start docker

设置Docker开机启动:

systemctl enable docker

检查运行状态:

systemctl status docker

三、拉取MySQL5.7 Docker镜像

Docker Hub提供了官方MySQL镜像,可以直接拉取指定版本。

执行:

docker pull mysql:5.7

查看已经下载的镜像:

docker images

正常情况下可以看到:

REPOSITORY   TAG
mysql        5.7

指定版本号部署可以避免因为latest标签变化导致环境不稳定。


四、创建MySQL5.7容器

最简单的方式可以直接启动MySQL容器:

docker run -d 
--name mysql57 
-p 3306:3306 
-e MYSQL_ROOT_PASSWORD=123456 
mysql:5.7

参数说明:

参数作用
-d后台运行容器
--name指定容器名称
-p映射端口
MYSQL_ROOT_PASSWORD设置root密码
mysql:5.7使用MySQL5.7镜像

启动完成后,可以查看运行状态:

docker ps

如果看到:

mysql57   mysql:5.7   Up

说明MySQL容器已经正常运行。


五、配置MySQL数据持久化

直接运行MySQL容器存在一个问题:

如果删除容器,数据库中的数据也会丢失。

因此生产环境必须配置数据持久化。

MySQL官方镜像默认数据目录:

/var/lib/mysql

可以通过Docker Volume或者宿主机目录进行映射。


六、使用目录挂载实现数据持久化

首先创建MySQL数据目录:

mkdir -p /data/mysql57/data

然后重新创建容器:

docker run -d 
--name mysql57 
-p 3306:3306 
-v /data/mysql57/data:/var/lib/mysql 
-e MYSQL_ROOT_PASSWORD=123456 
mysql:5.7

参数:

-v 宿主机目录:容器目录

表示:

宿主机:

/data/mysql57/data

映射到:

/var/lib/mysql

MySQL产生的数据文件都会保存到宿主机。

即使删除容器:

docker rm -f mysql57

重新创建容器后,原来的数据库仍然存在。


七、配置MySQL配置文件持久化

除了数据库文件,MySQL配置也建议进行挂载。

创建配置目录:

mkdir -p /data/mysql57/conf

创建配置文件:

vim /data/mysql57/conf/my.cnf

示例:

[mysqld]

character-set-server=utf8mb4

collation-server=utf8mb4_unicode_ci

max_connections=500

default-time-zone='+08:00'

启动容器:

docker run -d 
--name mysql57 
-p 3306:3306 
-v /data/mysql57/data:/var/lib/mysql 
-v /data/mysql57/conf/my.cnf:/etc/mysql/my.cnf 
-e MYSQL_ROOT_PASSWORD=123456 
mysql:5.7

这样MySQL配置文件也实现了持久化管理。


八、创建MySQL用户并设置远程访问

默认情况下,MySQL5.7的root用户可能只允许本地访问。

进入MySQL容器:

docker exec -it mysql57 bash

登录数据库:

mysql -uroot -p

输入密码后执行:

use mysql;

查看用户权限:

select user,host from user;

如果需要允许远程访问:

update user set host='%' where user='root';

刷新权限:

flush privileges;

退出:

exit;

之后可以通过客户端连接:

服务器IP:3306

九、解决MySQL字符集问题

Docker部署MySQL后,经常遇到中文乱码问题。

推荐统一使用UTF-8编码。

进入MySQL:

show variables like '%character%';

如果看到:

latin1

说明字符集没有正确配置。

可以修改my.cnf:

[mysqld]

character-set-server=utf8mb4

init_connect='SET NAMES utf8mb4'

[client]

default-character-set=utf8mb4

重启容器:

docker restart mysql57

再次检查:

show variables like '%character%';

确保使用utf8mb4。


十、Docker管理MySQL常用命令

查看容器状态

docker ps

停止MySQL

docker stop mysql57

启动MySQL

docker start mysql57

重启MySQL

docker restart mysql57

查看日志

docker logs mysql57

实时查看:

docker logs -f mysql57

进入MySQL容器

docker exec -it mysql57 bash

删除容器

docker rm -f mysql57

注意:

删除容器不会删除挂载的数据目录。


十一、使用Docker Compose部署MySQL5.7

对于项目开发环境,推荐使用docker-compose管理。

创建:

docker-compose.yml

内容如下:

version: '3'

services:

  mysql:

    image: mysql:5.7

    container_name: mysql57

    restart: always

    ports:

      - "3306:3306"

    environment:

      MYSQL_ROOT_PASSWORD: 123456

    volumes:

      - ./data:/var/lib/mysql

      - ./conf/my.cnf:/etc/mysql/my.cnf

启动:

docker-compose up -d

停止:

docker-compose down

通过Compose管理,可以将数据库环境配置直接提交到项目中,提高团队协作效率。


十二、Docker部署MySQL5.7常见问题

1. 容器启动后自动退出

查看日志:

docker logs mysql57

常见原因:

  • 密码配置错误;

  • 数据目录权限不足;

  • 配置文件格式错误。


2. 端口3306被占用

错误:

Bind for 0.0.0.0:3306 failed

查看端口:

netstat -tunlp | grep 3306

解决方式:

修改映射端口:

-p 3307:3306

客户端连接:

服务器IP:3307

3. 数据目录权限问题

如果挂载目录权限不足:

chmod -R 777 /data/mysql57/data

或者修改目录所属用户。


4. 忘记root密码

可以进入容器后通过跳过权限验证方式重置密码:

启动参数增加:

--skip-grant-tables

然后重新设置密码。


十三、生产环境部署建议

虽然Docker部署MySQL非常方便,但生产环境仍需要做好优化:

1. 定期备份数据库

可以使用:

mysqldump

进行备份:

mysqldump -uroot -p database_name > backup.sql

2. 限制资源使用

Docker支持限制CPU和内存:

--memory=2g