Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  Basic Steps for MySQL Server Deployment with Docker

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

Warning

MySQL 团队维护的 Docker 镜像专门为 Linux 平台构建。其他平台不受支持,使用这些 MySQL Docker 镜像的用户将自行承担风险。请参阅 这里的讨论,了解在非 Linux 操作系统上运行这些容器的一些已知限制。

下载 MySQL 服务器 Docker 镜像
Important

对于 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.08.3latest)。如果省略 :tag,则使用 latest 标签,并下载最新的 GA 版本(最新的创新版本)MySQL Community Server 的镜像。

要从 OCR 下载 MySQL Enterprise Edition 镜像,需要首先在 OCR 上接受许可协议,然后使用 Docker 客户端登录容器注册表。按照以下步骤操作:

  • 访问 OCR 的 https://container-registry.oracle.com/ 并选择 MySQL

  • 在 MySQL 存储库列表中,选择 enterprise-server

  • 如果您还没有登录 OCR,请单击页面右侧的 Sign in 按钮,然后输入 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 帐户,然后按照以下步骤操作:

  • 选择 Patches and Updates 选项卡。

  • 转到 Patch Search 区域,并在 Search 选项卡中,切换到 Product or Family (Advanced) 子选项卡。

  • Product 字段中输入 MySQL Server,并在 Release 字段中输入所需的版本号。

  • 使用下拉菜单选择 Descriptioncontains,并在文本字段中输入 Docker

    以下图表显示了 MySQL Enterprise Edition 镜像的搜索设置,用于 MySQL Server 8.0:

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

  • 在出现的 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

容器初始化可能需要一些时间。当服务器准备好使用时,STATUSdocker 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 容器
Important
  • 在升级 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 服务器的更多主题”