文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  使用 Docker 部署 MySQL 服务器的基本步骤

2.5.6.1 使用 Docker 部署 MySQL 服务器的基本步骤

警告

由 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.49.0latest)。如果省略了: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 企业版镜像的搜索设置

    Diagram showing search settings for MySQL Enterprise image
  • 单击搜索按钮,然后从结果列表中选择所需的版本,并单击下载按钮。

  • 在出现的文件下载对话框中,单击并下载 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 pulldocker 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 stopmysqld 进程发送 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 服务器的更多主题”