文档首页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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

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

警告

由 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.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 服务器,并在 版本 字段中输入所需版本号。

  • 使用下拉菜单选择其他过滤器,以选择 描述包含,并在文本字段中输入 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

要为 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 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 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 stopmysqld 进程发送 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 的更多主题”