Docker 安装 MySQL

更新时间 2022-07-05 22:11:17

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡 / 赠书活动

目前, 星球 内第一个项目:全栈前后端分离博客项目,演示地址:http://116.62.199.48/, 1.0 版本已经更新完毕,正在更新 2.0 版本。采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 224 小节,累计 35w+ 字,讲解图:1544 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 1000+ 小伙伴加入,欢迎点击围观

本小节中,我们将学习如何通过 Docker 快速安装 Mysql 环境。

一、下载 Mysql 镜像

这里以安装 Mysql 5.7 版本为例:

docker pull mysql:5.7

下载完成后,通过 docker images 检查一下镜像是否下载成功:

验证本地是否下载好Mysql 5.7镜像验证本地是否下载好Mysql 5.7镜像

二、启动 Mysql 容器

先以简单的方式启动:

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

参数说明:

  • -d:以后台的方式运行;
  • --name mysql:指定容器的名称为 mysql;
  • -p 3306:3306 将容器的 3306 端口挂载到宿主机的 3306 端口上;
  • -e MYSQL_ROOT_PASSWORD=123456:指定 root 的密码为 123456

命令执行完成后,可以通过 docker ps命令来确认下容器是否启动成功。

docker 运行 Mysql 容器docker 运行 Mysql 容器

注意,此方式启动的容器,容器重启后会丢失存储的数据,所以还需要在启动容器时,将相关目录挂载到宿主机,防止数据丢失。

针对 Mysql 容器,我们想要防丢失的目录分别包括:

  • mysql 配置文件;
  • 数据存储目录;

执行 docker cp 命令,将想挂载的目录复制到宿主机中的固定目录下:

# 将容器中的 mysql 配置文件复制到宿主机中指定路径下,路径你可以根据需要,自行修改
docker cp mysql:/etc/mysql/mysql.conf.d/mysqld.cnf /usr/local/docker/mysql/config
# 将容器中的 mysql 存储目录复制到宿主机中
docker cp mysql:/var/lib/mysql/ /usr/local/docker/mysql/data

完成这一切后,让我们将刚刚运行的容器删除掉。

docker rm -f mysql

PS: mysql 是我们运行容器时指定的名称,当然,你也可以通过容器 ID 来删除容器。

三、正式运行 Mysql 容器

接下来,正式运行 Mysql 容器:

docker run -d \
--name mysql \
-p 3306:3306 \
-v /usr/local/docker/mysql/config/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf \
-v /usr/local/docker/mysql/data/mysql:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.7

其他不变,额外添加了两个挂载目录参数:

  • -v /usr/local/docker/mysql/config/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf: 将容器中 /etc/mysql/mysql.conf.d/mysqld.cnf 配置文件挂载到宿主机的 /usr/local/docker/mysql/config/mysqld.cnf 文件上;
  • -v /usr/local/docker/mysql/data:/var/lib/mysql: 将容器中 /var/lib/mysql 数据目录挂载到宿主机的 /usr/local/docker/mysql/data 目录下;

执行 docker ps 命令,查看下容器是否启动:

查看mysql容器是否启动成功查看mysql容器是否启动成功

四、通过 Mysql 客户端连接一下试试

通过 MySQL 客户端连接刚刚创建的 mysql, 看看能否连接成功:

通过mysql客户端连接试试看通过mysql客户端连接试试看

连接成功了!

五、相关问题补充

5.1 时区不对问题

在向数据库插入数据时,总是发现时间比系统时间少 8 个小时,这是因为 Mysql 的时区并不是我们想要的东八区。

解决方案:修改挂载到宿主机的 Mysql 配置文件 mysqld.cnf ,添加如下参数:

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

添加改配置后,重启 MySQL 容器, 再插入数据,就发现插入的数据时间正常了:

docker restart mysql