Docker 安装 MySQL
一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 - 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/
截止目前, 星球 内专栏累计输出 66w+ 字,讲解图 2896+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2300+ 小伙伴加入学习 ,欢迎点击围观
本小节中,我们将学习如何通过 Docker
, 快速在阿里云 Linux
云服务器中,将 MySQL
环境安装好。
1. 下载 MySQL 镜像
首先,远程登录云服务器,执行如下命令,拉取 MySQL 5.7
版本的镜像:
docker pull mysql:5.7
镜像下载完成后,通过 docker images
查看本机已经下载的镜像列表,检查一下 MySQL 5.7
的镜像是否下载成功:
2. 启动 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
容器是否运行成功:
3. 复制 MySQL 容器中配置文件到宿主机
接下来,执行下面的命令,创建一个 /docker/mysql
文件夹,专门用于存放 MySQL
相关文件,如配置文件、存储的数据等:
mkdir -p /docker/mysql
然后,执行 docker cp
命令,将运行中的 mysql
容器中的配置文件目录,复制到宿主机中的 /docker/mysql/config
目录中:
# 将容器中的 mysql 配置文件复制到宿主机中指定路径下
docker cp mysql:/etc/mysql /docker/mysql/config
复制成功后,通过 ll
命令确认下 /docker/mysql/config
目录中的文件,可以看到,MySQL
相关的配置文件都从容器中复制到宿主机中了,这样方便后续如果有自定义配置的需求:
4. 重新运行容器,挂载存储数据
注意了,使用上面这种方式启动的容器,因为未将容器中数据目录挂载到宿主机中,会导致容器重启后,存于容器中的数据会全部丢失,所以,我们需要将正在运行的 MySQL
容器删除掉,重新运行一个 MySQL
容器,并将数据存储目录挂载到宿主机上,另外还有配置文件也需要一并挂载出来:
-
MySQL
配置文件; -
数据存储目录;
执行如下命令,将刚刚运行的 MySQL
容器删除掉:
docker rm -f mysql
PS:
mysql
是我们运行容器时指定的名称,当然,你也可以通过容器 ID 来删除容器。
容器删除成功后,重新运行 MySQL
容器 , 命令如下:
docker run -d \
--name mysql \
-p 3306:3306 \
-v /docker/mysql/config:/etc/mysql \
-v /docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.7
和之前运行的方式不太一样的地方是,这次额外添加了两个目录挂载参数:
-v /docker/mysql/config:/etc/mysql
: 将宿主机中/docker/mysql/config
配置文件目录挂载到容器中的/etc/mysql
目录上 ;-v /docker/mysql/data:/var/lib/mysql
: 将宿主机中的/docker/mysql/data
数据存储目录挂载到/var/lib/mysql
目录上 ;
命令执行后,通过 docker ps
命令,确认一下容器是否启动成功:
5. 阿里云安全组开放
到这里,MySQL
数据库环境就安装完成了。接下来,我们将通过 Navicat
连接一下这个远程的数据库,看看能不能连接成功。当然直接连肯定是不行的,我们需要在阿里云后台中,给购买的服务器开放 3306
端口才行。为了保证安全性,我们只给自己的 IP
开放白名单,保证只有自己的机器才能链接。
这就需要拿到自己的 IP
地址,可以在百度中查询关键词 ip , 即可获取自己的 IP
地址:
如果百度查询不到,也可以访问这个网站:https://www.ip138.com/ , 也是能够查询到你的 IP
地址的:
将自己的 IP
地址复制出来,然后,访问阿里云 ECS
控制台:https://ecs.console.aliyun.com/home#/ , 点击云服务器:
然后,选择安全组,点击管理规则:
在入方向列表中,添加自己的 IP
地址,开放的端口为 3306
并保存。这样,就能保证只有自己的机器才能访问到该数据库了。
6. 客户端连接测试
端口白名单添加完成后,打开 Navicat
客户端 , 连接刚刚创建的 MySQL
数据库 , 看看能否连接成功:
填写连接名、云服务器的公网 IP
、以及登录用户名、密码,点击测试连接按钮,如下图所示,连接成功了啦:
7. 相关问题补充
7.1 时区少 8 小时的问题
在向数据库插入数据时,总是发现时间比系统时间少 8 个小时,这是因为 MySQL 的时区并不是我们想要的东八区。
解决方案:修改挂载到宿主机的 MySQL 配置文件 mysqld.cnf
,添加如下参数:
default-time-zone = '+08:00'
添加改配置后,重启 MySQL 容器, 再插入数据,这个时候,插入的数据时间就正常了:
docker restart mysql