MySQL 团队维护的 Docker 镜像专门为 Linux 平台构建。其他平台不受支持,使用这些 MySQL Docker 镜像的用户将自行承担风险。请参阅 这里的讨论,了解在非 Linux 操作系统上运行这些容器的一些已知限制。
下载 MySQL 服务器 Docker 镜像
对于 MySQL Enterprise Edition 用户:需要订阅来使用 MySQL Enterprise Edition 的 Docker 镜像。订阅遵循自带许可证模型;请参阅 如何购买 MySQL 产品和服务 了解详情。
下载服务器镜像不是严格必要的步骤;但是,在创建 Docker 容器之前执行此步骤,以确保本地镜像保持最新状态。要从 Oracle 容器注册表 (OCR) 下载 MySQL Community Edition 镜像,请运行以下命令:
docker pull container-registry.oracle.com/mysql/community-server:tag
标签是要拉取的镜像版本的标签(例如,8.0
、8.3
或 latest
)。如果省略 :
,则使用 tag
latest
标签,并下载最新的 GA 版本(最新的创新版本)MySQL Community Server 的镜像。
要从 OCR 下载 MySQL Enterprise Edition 镜像,需要首先在 OCR 上接受许可协议,然后使用 Docker 客户端登录容器注册表。按照以下步骤操作:
-
访问 OCR 的 https://container-registry.oracle.com/ 并选择 MySQL。
-
在 MySQL 存储库列表中,选择
enterprise-server
。 -
如果您还没有登录 OCR,请单击页面右侧的
按钮,然后输入 Oracle 帐户凭据。 -
按照页面右侧的说明接受许可协议。
-
使用以下命令登录 OCR:
# docker login container-registry.oracle.com Username: Oracle-Account-ID Password: password Login successful.
使用以下命令从 OCR 下载 MySQL Enterprise Edition 镜像:
docker pull container-registry.oracle.com/mysql/enterprise-server:tag
要从 My Oracle Support 网站下载 MySQL Enterprise Edition 镜像,请访问网站,登录 Oracle 帐户,然后按照以下步骤操作:
-
选择
选项卡。 -
转到 Patch Search 区域,并在 Search 选项卡中,切换到 Product or Family (Advanced) 子选项卡。
-
在 “MySQL Server”,并在 字段中输入所需的版本号。
字段中输入 -
使用下拉菜单选择 “Docker”。
— ,并在文本字段中输入以下图表显示了 MySQL Enterprise Edition 镜像的搜索设置,用于 MySQL Server 8.0:
-
单击
按钮,然后从结果列表中选择要下载的版本,并单击 按钮。 -
在出现的 File Download 对话框中,单击并下载
.zip
文件。
解压缩下载的 .zip
档案,以获取内部的 tarball (mysql-enterprise-server-
),然后使用以下命令加载镜像:version
.tar
docker load -i mysql-enterprise-server-version.tar
可以使用以下命令列出下载的 Docker 镜像:
$> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
container-registry.oracle.com/mysql/community-server latest 1d9c2219ff69 2 months ago 496MB
启动 MySQL 服务器实例
要启动新的 MySQL 服务器 Docker 容器,请使用以下命令:
docker run --name=container_name --restart on-failure -d image_name:tag
图像名称
是要用于启动容器的图像的名称;请参阅 下载 MySQL Server Docker 图像 以获取更多信息。
选项 --name
用于提供自定义的服务器容器名称,是可选的;如果没有提供容器名称,将生成一个随机名称。
选项 --restart
用于配置容器的 重启策略;它应该设置为值 on-failure
,以启用客户会话中的服务器重启支持(例如,当客户执行 RESTART 语句时,或者在 配置 InnoDB 集群实例 时)。启用重启支持后,在客户会话中发出重启命令将停止服务器和容器,然后重新启动。
例如,要启动新的 Docker 容器以运行 MySQL 社区服务器,请使用以下命令:
docker run --name=mysql1 --restart on-failure -d container-registry.oracle.com/mysql/community-server:latest
要启动新的 Docker 容器以运行 MySQL 企业服务器,使用以下命令:
docker run --name=mysql1 --restart on-failure -d container-registry.oracle.com/mysql/enterprise-server:latest
要启动新的 Docker 容器以运行从 OCR 下载的 MySQL 企业服务器,使用以下命令:
docker run --name=mysql1 --restart on-failure -d mysql/enterprise-server:latest
如果指定名称和标签的 Docker 图像尚未被下载,则现在下载图像。容器初始化开始,并且容器出现在 docker ps 命令的输出中。例如:
$> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4cd4129b3211 container-registry.oracle.com/mysql/community-server:latest "/entrypoint.sh mysq…" 8 seconds ago Up 7 seconds (health: starting) 3306/tcp, 33060-33061/tcp mysql1
容器初始化可能需要一些时间。当服务器准备好使用时,STATUS
在 docker ps 命令的输出中从 (health: starting)
更改为 (healthy)
。
使用 docker run 命令中的 -d
选项使容器在后台运行。使用以下命令监控容器的输出:
docker logs mysql1
一旦初始化完成,命令的输出将包含生成的根密码;使用以下命令检查密码:
$> docker logs mysql1 2>&1 | grep GENERATED
GENERATED ROOT PASSWORD: Axegh3kAJyDLaRuBemecis&EShOs
从容器内部连接到 MySQL Server
一旦服务器准备好,您可以在 MySQL Server 容器中运行 mysql 客户端,并连接到 MySQL Server。使用 docker exec -it 命令在您启动的 Docker 容器中启动 mysql 客户端,例如:
docker exec -it mysql1 mysql -uroot -p
当提示时,输入生成的根密码(请参阅上面的步骤以获取密码)。因为 MYSQL_ONETIME_PASSWORD
选项默认为 true,因此在连接到服务器后,您必须重置服务器根密码,例如:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';
将 密码
替换为您选择的密码。一旦密码被重置,服务器就准备好了。
容器 Shell 访问
要访问 MySQL Server 容器的 shell,请使用 docker exec -it 命令在容器中启动 bash shell:
$> docker exec -it mysql1 bash
bash-4.2#
然后,您可以在容器中运行 Linux 命令。例如,要查看容器中的服务器数据目录的内容,请使用以下命令:
bash-4.2# ls /var/lib/mysql
auto.cnf ca.pem client-key.pem ib_logfile0 ibdata1 mysql mysql.sock.lock private_key.pem server-cert.pem sys
ca-key.pem client-cert.pem ib_buffer_pool ib_logfile1 ibtmp1 mysql.sock performance_schema public_key.pem server-key.pem
停止和删除 MySQL 容器
要停止我们创建的 MySQL Server 容器,请使用以下命令:
docker stop mysql1
docker stop 将 SIGTERM 信号发送到 mysqld 进程,以便服务器关闭。
请注意,当容器的主进程(在 MySQL Server 容器的情况下是 mysqld)停止时,Docker 容器将自动停止。
要重新启动 MySQL Server 容器:
docker start mysql1
要使用单个命令停止和重新启动 MySQL Server 容器:
docker restart mysql1
要删除 MySQL 容器,首先停止它,然后使用 docker rm 命令:
docker stop mysql1
docker rm mysql1
如果您想要删除服务器的数据目录的 Docker 卷,同时删除容器,请将 -v
选项添加到 docker rm 命令中。
升级 MySQL Server 容器
-
在升级 MySQL 之前,请按照第 3 章 升级 MySQL中的说明进行操作。在那里讨论的其他说明中,备份数据库升级前尤其重要。
-
本节中的说明假设服务器的数据和配置已经在主机上持久化。请参阅持久化数据和配置更改以获取详细信息。
按照以下步骤升级 Docker 中的 MySQL 8.0 到 8.3:
-
停止 MySQL 8.0 服务器(在本例中,容器名称为
mysql80
):docker stop mysql80
-
下载 MySQL 8.3 服务器 Docker 镜像。请参阅下载 MySQL 服务器 Docker 镜像。确保使用正确的标签 для MySQL 8.3。
-
使用旧服务器数据和配置(如果需要,请进行适当的修改 - 参阅第 3 章 升级 MySQL)启动新的 MySQL 8.3 Docker 容器(在本例中,名称为
mysql83
)。对于 MySQL 社区服务器,运行以下命令:docker run --name=mysql83 \ --mount type=bind,src=/path-on-host-machine/my.cnf,dst=/etc/my.cnf \ --mount type=bind,src=/path-on-host-machine/datadir,dst=/var/lib/mysql \ -d container-registry.oracle.com/mysql/community-server:8.3
如果需要,调整
container-registry.oracle.com/mysql/community-server
到正确的镜像名称 - 例如,使用container-registry.oracle.com/mysql/enterprise-server
对于从 OCR 下载的 MySQL 企业版镜像,或者使用mysql/enterprise-server
对于从 My Oracle Support 下载的 MySQL 企业版镜像。 -
等待服务器完成启动。你可以使用 docker ps 命令检查服务器状态(请参阅启动 MySQL 服务器实例以获取详细信息)。
按照相同的步骤升级到 8.3 系列中的其他版本(即,从 8.3.x
到 8.3.y
):停止原始容器,并使用旧服务器数据和配置启动新的容器。如果你使用了 8.3 或 latest
标签启动原始容器,并且现在有新的 MySQL 8.3 版本要升级到它,你必须首先使用以下命令拉取新版本的镜像:
docker pull container-registry.oracle.com/mysql/community-server:8.3
然后,你可以通过启动一个新的容器来升级,使用相同的标签和旧服务器数据和配置(如果你使用的是 MySQL 企业版,请调整镜像名称 - 参阅下载 MySQL 服务器 Docker 镜像):
docker run --name=mysql83new \
--mount type=bind,src=/path-on-host-machine/my.cnf,dst=/etc/my.cnf \
--mount type=bind,src=/path-on-host-machine/datadir,dst=/var/lib/mysql \
-d container-registry.oracle.com/mysql/community-server:8.3
使用 Docker 部署 MySQL 服务器的更多主题
有关使用 Docker 部署 MySQL 服务器的更多主题,如服务器配置、持久化数据和配置、服务器错误日志和容器环境变量,请参阅第 2.5.6.2 节,“使用 Docker 部署 MySQL 服务器的更多主题”。