Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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

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

Warning

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

Important

对于 MySQL Enterprise Edition 的用户:需要订阅以使用 Docker 映像。订阅遵循 Bring Your Own License 模型;请参见购买 MySQL 产品和服务了解详细信息。

下载服务器映像单独步骤不必要,但是在创建 Docker 容器之前执行这个步骤确保本地映像是最新的。从Oracle 容器注册表(OCR)下载 MySQL 社区版映像,运行以下命令:

docker pull container-registry.oracle.com/mysql/community-server:tag

tag 是您想要拉取的映像版本标签(例如 8.48.3latest)。如果省略了:tag,将使用 latest 标签,并下载 MySQL 社区服务器的最新 GA 发布版本(即最新创新发布)的映像。

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

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

  • 在 MySQL 仓库列表下,选择enterprise-server

  • 如果您还没有登录 OCR,请单击页面右侧的Sign in按钮,然后输入 Oracle 账户凭证时提示。

  • 按照页面右侧的指令接受许可协议。

  • 使用容器客户端,例如,使用docker login命令登录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网站上,登陆Oracle账户,然后在首页执行以下步骤:

  • 选择补丁和更新标签。

  • 转到补丁搜索区域,在搜索标签,切换到产品或家谱(高级)子标签。

  • 产品字段输入MySQL Server,在版本字段输入所需的版本号。

  • 使用下拉框选择描述包含,并在文本框中输入Docker

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

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

  • 出现的文件下载对话框,单击并下载.zip文件以获取 Docker 镜像。

将下载的 .zip归档解压缩,获取内部的tar包(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 服务器 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

使用从 My Oracle Support 下载的 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

连接 to MySQL Server from within the Container

当服务器准备就绪时,您可以在刚启动的 MySQL 服务器容器中运行mysql客户端,并连接到 MySQL 服务器。使用docker exec -it命令在您启动的 Docker 容器中启动mysql客户端,例如:

docker exec -it mysql1 mysql -uroot -p

当被询问时,输入生成的root密码(见启动MySQL服务器实例上一步中如何找到密码)。由于默认情况下MYSQL_ONETIME_PASSWORD选项为真,因此在连接到服务器后,你必须使用以下语句重置服务器root密码:

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';

password替换为你的选择密码。重置密码后,服务器就准备好了。

要访问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 Server容器,可以使用以下命令:

docker stop mysql1

docker stop将SIGTERM信号发送给mysqld进程,因此服务器可以优雅地关闭。

也注意,当容器的主要进程(在MySQL Server容器中为mysqld)停止时,Docker容器自动停止。

要重新启动MySQL Server容器:

docker start mysql1

使用单个命令停止并重新启动 MySQL 服务器容器:

docker restart mysql1

要删除 MySQL 容器,首先停止它,然后使用docker rm命令:

docker stop mysql1
docker rm mysql1

如果您想在删除容器时同时删除服务器数据目录的 Docker 卷,添加 -v 选项到docker rm命令。

Important
  • 在升级 MySQL 之前,请仔细阅读第 3 章,升级 MySQL中的说明。其中特别重要的是在升级之前备份数据库。

  • 本节中的指令要求服务器数据和配置已经在主机上 persisted。见保留数据和配置更改的详细信息。

按照以下步骤升级 MySQL 8.4 到 8.3:

  • 停止 MySQL 8.4 服务器(容器名称在本例中是 mysql84):

    docker stop mysql84
  • 下载 MySQL 8.3 服务器 Docker 镜像。见下载 MySQL 服务器 Docker 镜像中的说明,确保使用正确的 MySQL 8.3 标签。

  • 使用 Docker 启动一个名为 mysql83 的 MySQL 8.3 容器(在本例中),该容器带有宿主机上的老服务器数据和配置(如果需要进行修改—见第3章,升级 MySQLbind-mounting 在本例中)。对于 MySQL 社区服务器,运行以下命令:

    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:8.3

    如果需要,调整 container-registry.oracle.com/mysql/community-server 到正确的镜像名称—for 例如,替换为 container-registry.oracle.com/mysql/enterprise-server 对 MySQL_ENTERPRISE_Edition 镜像从 OCR 下载,或者 mysql/enterprise-server 对 MySQL_ENTERPRISE_Edition 镜像从 My Oracle 支持下载。

  • 等待服务器完成启动。您可以使用docker ps 命令检查服务器状态(见启动 MySQL 服务器实例了解如何做到这点。

对升级在 8.3 系列(即从 release 8.3.x 到 8.3.y)进行相同步骤:停止原始容器,然后启动一个新的容器,带有老服务器数据和配置。如果您使用了 8.3 或 latest 标签启动原始容器,现在想要升级到新版本,您必须首先使用以下命令拉取新版本镜像:

docker pull container-registry.oracle.com/mysql/community-server:8.3

然后,您可以通过启动一个新的容器,使用相同的标签和老数据、配置(如果使用MySQL Enterprise Edition,需要调整图像名称;见下载 MySQL 服务器 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:8.3
有关使用 Docker 部署 MySQL 服务器的更多主题

关于使用 Docker 部署 MySQL 服务器的更多主题,例如服务器配置、持久化数据和配置、服务器错误日志和容器环境变量,请见第2.5.6.2节,“使用 Docker 部署 MySQL 服务器”