- 本文环境
- 系统:Ubuntu 22.04
- 终端:腾讯云 OrcaTerm(可使用 Xshell+Xftp 代替)
前言
- 首先需要安装好 Docker,可以参考Ubuntu 安装 Docker
- 使用 Docker 需要 root 权限,推荐将用户加入 Docker 用户组(上文中有),这样使用就不需要加上
sudo
了(但是我是 root,所以文中都没加)
- 使用 Docker 需要 root 权限,推荐将用户加入 Docker 用户组(上文中有),这样使用就不需要加上
- Docker Hub 中的 MySQL 官方镜像文档 mysql - Official Image | Docker Hub
1.寻找镜像
在 Docker 仓库中查找 MySQL 镜像
1 | docker search mysql |
可以看到第一个就是我们需要的镜像
2.拉取镜像
在查找到 MySQL 的镜像后,就可以进行拉取
1 | docker pull mysql |
因为没有指定 MySQL 的版本,所以默认拉取最新的版本(即 latest)
如果想要拉取指定的版本,可以在拉取时添加版本号(mysql:tag
),以 MySQL 5.7 版本为例
1 | docker pull mysql:5.7 |
3.查看镜像
拉取完毕后,检查镜像是否安装完成
1 | # 查看所有镜像 |
可以看到已经有 MySQL 的镜像了(hello-world 是我在安装完 Docker 测试时拉取的镜像)
4.创建容器并启动
1 | # 容器名称、端口、挂载目录、root 密码均可自行指定 |
参数说明:
--name mysql
:指定容器的名称为 mysql(可以自己指定)-p 3306:3306
:将容器的 3306(右边的)端口挂载到宿主机的 3306(左边的)端口(前提是不被占用)-v
:将相关目录挂载到宿主机防止数据丢失,如果不挂载的话在删除容器后会丢失存储的数据,即挂载后即使容器删除,只要宿主机目录中的数据还存在,使用该目录新创建的容器中依旧有原先容器中挂载的数据- 注:
- 实际宿主机中用于挂载的目录根据自己需求设置,如果只是开发测试环境可以选择不挂载(
用完就删不留痕迹,正合我意),但是配置目录还是推荐挂载,方便修改配置 - 挂载目录通常选择放在用户的主目录下的一个子目录中,好处是每个用户都有自己的挂载目录,可以隔离不同用户的数据,但是因为我的云服务器只有我一个人在玩,平常都是直接用的 root 用户,所以直接在根目录下创建了一个
/data
目录用来存放 Docker 容器的挂载配置和数据,MySQL 容器的就都挂载在/data/mysql
目录下了
- 实际宿主机中用于挂载的目录根据自己需求设置,如果只是开发测试环境可以选择不挂载(
/data/mysql/conf:/etc/mysql/conf.d
:将容器中/etc/mysql/conf.d
配置目录挂载到宿主机的/data/mysql/conf
目录- 想要修改 MySQL 配置可以直接在宿主机的配置目录下添加一份自定义的
my.cnf
配置文件,该文件中的配置优先级高于 MySQL 的默认配置(容器中 MySQL 的配置文件路径位于/etc/my.cnf)
- 也可以提前编辑好
my.cnf
文件,创建的容器会按你挂载目录中的自定义配置启动
- 想要修改 MySQL 配置可以直接在宿主机的配置目录下添加一份自定义的
/data/mysql/data:/var/lib/mysql
:将容器中/var/lib/mysql
数据目录挂载到宿主机的/data/mysql/data
目录/data/mysql/log:/var/log/mysql
:将容器中/var/log/mysql
日志目录挂载到宿主机的/data/mysql/log
目录
- 注:
-e MYSQL_ROOT_PASSWORD=123456
:初始化 MySQL root 用户的密码为 123456-d
:以后台的方式运行mysql:tag
:指定创建容器的镜像(:tag
指定版本,不加默认最新版)- 建议创建容器时使用
:tag
指定版本,可以使用docker images
查看镜像的版本,以免过段时间版本更新后导致现在拉取的镜像已经不是最新版本,又重新拉取一个最新版本的镜像进行容器创建
- 建议创建容器时使用
返回的一长串是创建的容器 id
5.查看容器
检查容器是否创建成功
1 | # 查看运行中的容器 |
可以看到创建的 MySQL 容器已经在运行中了
我们可以通过 Docker 命令进入 MySQL 容器内部
1 | # 这里的 mysql 是创建容器时自行指定的容器名称 |
进入后就可以和在 linux 中一样使用 MySQL 了
查看 MySQL 版本号
1 | mysql --version |
注:写本文时的最新版本为 8.2.0
输入mysql -u root -p
后再输入密码即可进入 MySQL 命令行
后续使用和正常 MySQL 一样,想要退出 MySQL 和容器使用exit
命令即可
6.删除容器
不能直接删除运行中的容器,因此需要先停止容器再删除
1 | # 这里的 mysql 是创建容器时自行指定的容器名称 |
但是可以加上-f
参数来强制删除运行中的容器
1 | # 这里的 mysql 是创建容器时自行指定的容器名称 |
其他
时区问题
问题描述
进入 MySQL 命令行后使用下面命令查看当前时间
1 | select now(); |
会发现 MySQL 中时间比系统时间少了 8 个小时,因为 MySQL 的时区并不是我们所在的东八区(即北京时间)
解决方法
一:命令行中修改
MySQL 中的系统时区,分为全局时区和当前会话的时区,如果当前会话不指定时区,默认使用全局时区,可以使用下面的命令将全局时区修改为东八区(即北京时间)
1 | set global time_zone = '+8.00'; |
如果想要立即生效需要执行
1 | flush privileges; |
再次select now();
查看时间会发现已经是东八区的时间了
二:修改 my.cnf 配置文件
容器中修改
可以编辑容器中 MySQL 的my.cnf
(位于/etc/my.cnf
)配置文件
然后在 [mysqld] 区域加上default-time_zone = '+8:00'
1 | [mysqld] |
然后重启 MySQL
注:MySQL 容器中没有 vim,如果想要编辑需要先安装 vim(所以我没有演示)
通过挂载的配置文件修改
如果在创建容器时将容器中的配置目录挂载到了宿主机,那就可以直接编辑宿主机中的配置文件进行修改了
首先在配置目录挂载的宿主机目录下新建一个my.cnf
文件,然后使用 vim 编辑
1 | # 进入你自己挂载的宿主机配置目录 |
添加下面配置内容(不会还有人不会 vim 吧)
1 | [mysqld] |
保存退出后重启容器即可
1 | # 这里的 mysql 是创建容器时自行指定的容器名称 |
之后再次进入容器中的 MySQL,通过select now();
查看时间会发现已经是东八区的时间了
注:想要修改其他配置也可以按照相同的方法在宿主机编辑配置文件,并且只要创建容器时挂载宿主机的配置目录不变,即使删除当前容器重开一个,修改的配置也依旧在