由 MySQL 团队维护的 MySQL Docker 镜像专门为 Linux 平台构建。不支持其他平台,在这些平台上使用这些 MySQL Docker 镜像的用户需自行承担风险。有关在非 Linux 操作系统上运行这些容器的一些已知限制,请参阅此处讨论。
下载 MySQL 服务器 Docker 镜像
对于 MySQL 企业版用户:使用 MySQL 企业版 Docker 镜像需要订阅。订阅通过自带许可证 (BYOL) 模式运作;有关详细信息,请参阅如何购买 MySQL 产品和服务。
在单独的步骤中下载服务器镜像并不是严格必需的;但是,在创建 Docker 容器之前执行此步骤可以确保本地镜像是最新的。要从Oracle 容器注册表 (OCR) 下载 MySQL 社区版镜像,请运行以下命令
docker pull container-registry.oracle.com/mysql/community-server:tag
tag
是要拉取的镜像版本的标签(例如,8.4
、9.0
或 latest
)。如果省略了:
,则使用 tag
latest
标签,并下载 MySQL 社区版服务器的最新 GA 版本(即最新的创新版本)的镜像。
要从 OCR 下载 MySQL 企业版镜像,您需要先在 OCR 上接受许可协议并使用您的 Docker 客户端登录到容器仓库。请按照以下步骤操作
访问 OCR:https://container-registry.oracle.com/,然后选择MySQL。
在 MySQL 仓库列表中,选择
enterprise-server
。如果您尚未登录 OCR,请单击页面右侧的
按钮,然后在出现提示时输入您的 Oracle 帐户凭据。按照页面右侧的说明接受许可协议。
使用您的容器客户端登录 OCR,例如使用
docker login
命令# docker login container-registry.oracle.com Username: Oracle-Account-ID Password: password Login successful.
使用以下命令从 OCR 下载 MySQL 企业版 Docker 镜像
docker pull container-registry.oracle.com/mysql/enterprise-server:tag
要从My Oracle Support 网站下载 MySQL 企业版镜像,请登录到该网站并使用您的 Oracle 帐户登录,然后在登录页面上执行以下步骤
选择
选项卡。转到补丁搜索区域,然后在搜索选项卡上切换到产品或系列(高级)子选项卡。
在“MySQL Server”,并在 字段中输入所需的版本号。
字段中输入使用下拉菜单进行其他过滤,选择“Docker”。
— ,并在文本字段中输入下图显示了 MySQL 服务器 8.0 的 MySQL 企业版镜像的搜索设置
单击
按钮,然后从结果列表中选择所需的版本,并单击 按钮。在出现的文件下载对话框中,单击并下载 Docker 镜像的
.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
image_name
是要用于启动容器的镜像的名称;有关详细信息,请参阅下载 MySQL 服务器 Docker 镜像。
--name
选项用于为您的服务器容器提供自定义名称,该选项是可选的;如果没有提供容器名称,则会生成随机名称。
--restart
选项用于配置您的容器的重启策略;它应设置为 on-failure
值,以支持服务器在客户端会话内重启(例如,当客户端执行RESTART 语句或在配置 InnoDB 集群实例时发生)。启用重启支持后,在客户端会话中发出重启命令会导致服务器和容器停止,然后重启。
例如,要启动 MySQL 社区版的新 Docker 容器,请使用以下命令
docker run --name=mysql1 --restart on-failure -d container-registry.oracle.com/mysql/community-server:latest
要启动从 OCR 下载的 Docker 镜像的 MySQL 企业版服务器的新 Docker 容器,请使用以下命令
docker run --name=mysql1 --restart on-failure -d container-registry.oracle.com/mysql/enterprise-server:latest
要启动从 My Oracle Support 下载的 Docker 镜像的 MySQL 企业版服务器的新 Docker 容器,请使用以下命令
docker run --name=mysql1 --restart on-failure -d mysql/enterprise-server:latest
如果指定名称和标签的 Docker 镜像尚未被之前的 docker pull 或 docker run 命令下载,现在将下载该镜像。容器的初始化将开始,并且在运行 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
容器初始化可能需要一些时间。当服务器准备就绪可以使用时,docker ps 命令输出中容器的 STATUS
将从 (health: starting)
更改为 (healthy)
。
上述 docker run 命令中使用的 -d
选项使容器在后台运行。使用此命令监视容器的输出
docker logs mysql1
初始化完成后,命令的输出将包含为 root 用户生成的随机密码;例如,使用以下命令检查密码
$> docker logs mysql1 2>&1 | grep GENERATED
GENERATED ROOT PASSWORD: Axegh3kAJyDLaRuBemecis&EShOs
从容器内连接到 MySQL 服务器
服务器准备就绪后,您可以在刚刚启动的 MySQL 服务器容器内运行 mysql 客户端,并将其连接到 MySQL 服务器。使用 docker exec -it 命令在您已启动的 Docker 容器内启动 mysql 客户端,如下所示
docker exec -it mysql1 mysql -uroot -p
当被要求时,输入生成的 root 密码(有关如何查找密码,请参阅上面 启动 MySQL 服务器实例 中的最后一步)。由于 MYSQL_ONETIME_PASSWORD
选项默认情况下为 true,因此在将 mysql 客户端连接到服务器后,必须通过发出以下语句来重置服务器 root 密码
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';
将 password
替换为您选择的密码。密码重置后,服务器将准备就绪可以使用。
容器 Shell 访问
要访问 MySQL 服务器容器的 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 服务器容器,请使用以下命令
docker stop mysql1
docker stop 向 mysqld 进程发送 SIGTERM 信号,以便服务器正常关闭。
还要注意,当容器的主进程(在 MySQL 服务器容器的情况下为 mysqld)停止时,Docker 容器会自动停止。
要重新启动 MySQL 服务器容器
docker start mysql1
要使用单个命令停止并重新启动 MySQL 服务器容器
docker restart mysql1
要删除 MySQL 容器,请先停止它,然后使用 docker rm 命令
docker stop mysql1
docker rm mysql1
如果您希望同时删除 服务器数据目录的 Docker 卷,请将 -v
选项添加到 docker rm 命令中。
升级 MySQL 服务器容器
在对 MySQL 进行任何升级之前,请仔细阅读 第 3 章,升级 MySQL 中的说明。在其中讨论的其他说明中,在升级之前备份数据库尤其重要。
本节中的说明要求服务器的数据和配置已保存在主机上。有关详细信息,请参阅 持久化数据和配置更改。
按照以下步骤将 Docker 安装的 MySQL 8.4 升级到 9.0
停止 MySQL 8.4 服务器(本例中容器名称为
mysql84
)docker stop mysql84
下载 MySQL 9.0 服务器 Docker 镜像。请参阅 下载 MySQL 服务器 Docker 镜像 中的说明。确保您使用正确的 MySQL 9.0 标签。
使用旧服务器数据和配置(如果需要,请进行适当的修改,请参阅 第 3 章,升级 MySQL)启动新的 MySQL 9.0 Docker 容器(本例中名为
mysql90
)(通过本例中的 绑定挂载 保存在主机上)。对于 MySQL Community Server,请运行以下命令docker run --name=mysql90 \ --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:9.0
如果需要,请将
container-registry.oracle.com/mysql/community-server
调整为正确的镜像名称,例如,将其替换为container-registry.oracle.com/mysql/enterprise-server
(用于从 OCR 下载的 MySQL Enterprise Edition 镜像),或mysql/enterprise-server
(用于从 My Oracle Support 下载的 MySQL Enterprise Edition 镜像)。等待服务器完成启动。您可以使用 docker ps 命令检查服务器的状态(有关如何操作,请参阅 启动 MySQL 服务器实例)。
按照相同的步骤在 9.0 系列中进行升级(即从 9.0.x
版本升级到 9.0.y
版本):停止原始容器,并使用旧服务器数据和配置上的新镜像启动新的容器。如果您在启动原始容器时使用的是 9.0 或 latest
标签,并且现在有新的 MySQL 9.0 版本,您想将其升级到该版本,则必须首先使用以下命令拉取新版本的镜像
docker pull container-registry.oracle.com/mysql/community-server:9.0
然后,您可以通过使用旧数据和配置启动 新 容器来进行升级(如果您使用的是 MySQL Enterprise Edition,请调整镜像名称;请参阅 下载 MySQL 服务器 Docker 镜像)
docker run --name=mysql90new \
--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:9.0
有关使用 Docker 部署 MySQL 服务器的更多主题
有关使用 Docker 部署 MySQL 服务器的更多主题,如服务器配置、持久化数据和配置、服务器错误日志以及容器环境变量,请参阅 第 2.5.6.2 节,“有关使用 Docker 部署 MySQL 服务器的更多主题”。