由 MySQL 团队维护的 MySQL Docker 镜像专门为 Linux 平台构建。不支持其他平台,使用这些 MySQL Docker 镜像的用户需要自行承担风险。有关在非 Linux 操作系统上运行这些容器的已知限制,请参阅此处的讨论。
下载 MySQL 服务器 Docker 镜像
对于 MySQL 企业版用户: 使用 MySQL 企业版的 Docker 镜像需要订阅。订阅采用自带许可证模式;有关详细信息,请参阅如何购买 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 服务器”,并在 字段中输入所需版本号。
字段中输入使用下拉菜单选择其他过滤器,以选择 “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
要为 MySQL 企业服务器启动一个新的 Docker 容器,并使用从 OCR 下载的 Docker 镜像,请使用以下命令
docker run --name=mysql1 --restart on-failure -d container-registry.oracle.com/mysql/enterprise-server:latest
要为 MySQL 企业服务器启动一个新的 Docker 容器,并使用从 My Oracle Support 下载的 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 Server 容器中运行 mysql 客户端,并将其连接到 MySQL 服务器。使用 docker exec -it 命令在您启动的 Docker 容器中启动 mysql 客户端,如下所示
docker exec -it mysql1 mysql -uroot -p
出现提示时,输入生成的 root 密码(有关如何查找密码,请参阅上面 启动 MySQL Server 实例 中的最后一步)。因为 MYSQL_ONETIME_PASSWORD
选项默认情况下为 true,因此在将 mysql 客户端连接到服务器后,必须通过发出以下语句重置服务器 root 密码
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';
用您选择的密码替换 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 向 mysqld 进程发送 SIGTERM 信号,以便服务器正常关闭。
还要注意,当容器的主进程(对于 MySQL Server 容器,即 mysqld)停止时,Docker 容器将自动停止。
要再次启动 MySQL Server 容器
docker start mysql1
要使用单个命令停止并再次启动 MySQL Server 容器
docker restart mysql1
要删除 MySQL 容器,请先停止它,然后使用 docker rm 命令
docker stop mysql1
docker rm mysql1
如果您希望同时删除 服务器数据目录的 Docker 卷,请在 docker rm 命令中添加 -v
选项。
升级 MySQL Server 容器
在对 MySQL 进行任何升级之前,请仔细阅读 第 3 章,升级 MySQL 中的说明。除了那里讨论的其他说明外,在升级之前备份数据库尤其重要。
本节中的说明要求服务器的数据和配置已保留在主机上。有关详细信息,请参阅 保留数据和配置更改。
按照以下步骤将 Docker 安装的 MySQL 8.4 升级到 9.0
停止 MySQL 8.4 服务器(本示例中容器名为
mysql84
)docker stop mysql84
下载 MySQL 9.0 Server Docker 镜像。请参阅 下载 MySQL Server Docker 镜像 中的说明。确保您使用的是 MySQL 9.0 的正确标签。
使用旧服务器数据和配置(如有必要,请进行适当的修改,请参阅 第 3 章,升级 MySQL),启动一个新的 MySQL 9.0 Docker 容器(在本示例中名为
mysql90
),这些数据和配置已保留在主机上(在本示例中通过 绑定挂载)。对于 MySQL Community Server,请运行以下命令docker run --name=mysql84 \ --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 Server 实例)。
按照相同的步骤在 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 Server Docker 镜像)
docker run --name=mysql84new \
--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 Server 的更多主题
有关使用 Docker 部署 MySQL Server 的更多主题(如服务器配置、保留数据和配置、服务器错误日志以及容器环境变量),请参阅 第 2.5.6.2 节,“有关使用 Docker 部署 MySQL Server 的更多主题”。