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

警告

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

# 下载 MySQL 服务器 Docker 映像

重要的

MySQL企业版用户:需要订阅才能使用 MySQL 企业版的 Docker 镜像。订阅采用自带许可模式;看如何购买 MySQL 产品和服务 (opens new window)详情。

在单独的步骤中下载服务器映像并不是绝对必要的;但是,在创建 Docker 容器之前执行此步骤可确保您的本地映像是最新的。要下载 MySQL Community Edition 映像,请运行以下命令:

docker pull mysql/mysql-server:tag

这*标签是您要提取的图像版本的标签(例如,5.6,5.7,8.0, 要么最新的)。如果*:*标签***被省略,则最新的使用标签,并下载 MySQL Community Server 最新 GA 版本的镜像。有关可用版本,请参阅标签列表Docker Hub 中的 mysql/mysql-server 页面 (opens new window).

要从 Oracle Container Registry (OCR) 下载 MySQL Community Edition 映像,请运行以下命令:

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

要从 OCR 下载 MySQL 企业版镜像,您需要首先接受 OCR 上的许可协议并使用您的 Docker 客户端登录到容器存储库:

  • 访问 OCRhttps://container-registry.oracle.com/ (opens new window)并选择 MySQL。

  • 在 MySQL 存储库列表下,选择企业服务器.

  • 如果您尚未登录 OCR,请单击页面右侧的登录按钮,然后在提示时输入您的 Oracle 帐户凭据。

  • 按照页面右侧的说明接受许可协议。

  • 使用 Docker 客户端(码头工人命令)使用码头工人登录命令:

    # 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

有不同的选择***标签***,对应OCR提供的不同版本的MySQL Docker镜像:

  • 8.0, 8.0.*x* (*x*是 8.0 系列中的最新版本号),最新的: MySQL 8.0,最新GA

  • 5.7, 5.7.*是的* (*是的*是5.7系列的最新版本号):MySQL 5.7

    从以下位置下载 MySQL 企业版映像我的 Oracle 支持 (opens new window)网站,进入网站,登录到您的 Oracle 帐户,然后在您进入登录页面后执行以下步骤:

  • 选择补丁和更新选项卡。

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

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

  • 使用其他过滤器的下拉菜单选择描述—包含,然后在文本字段中输入“Docker”。

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

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

  • 在出现的文件下载对话框中,单击并下载。压缩Docker 映像的文件。

    解压下载的。压缩存档以获取里面的压缩包(mysql-企业服务器-*版本*。柏油),然后通过运行以下命令加载图像:

docker load -i mysql-enterprise-server-version.tar

您可以使用以下命令列出下载的 Docker 映像:

$> docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
mysql/mysql-server   latest              3157d7f55f8d        4 weeks ago         241MB
# 启动 MySQL 服务器实例

要为 MySQL 服务器启动新的 Docker 容器,请使用以下命令:

docker run --name=container_name  --restart on-failure -d image_name:tag

图像名称可以使用码头工人图像命令,如中所述下载 MySQL 服务器 Docker 映像.

- 姓名选项,用于为您的服务器容器提供自定义名称,是可选的;如果没有提供容器名称,则会生成一个随机名称。

- 重新开始选项用于配置重启政策 (opens new window)用于您的容器;它应该设置为值失败时, 以支持在客户端会话中重新启动服务器(例如,当重新开始语句由客户端执行或在InnoDB 集群实例的配置 (opens new window))。启用对重新启动的支持后,在客户端会话中发出重新启动会导致服务器和容器停止然后重新启动。MySQL 8.0.21 及更高版本支持服务器重启。

例如,要为 MySQL 社区服务器启动一个新的 Docker 容器,请使用以下命令:

docker run --name=mysql1 --restart on-failure -d mysql/mysql-server:8.0

要使用从 OCR 下载的 Docker 映像为 MySQL Enterprise Server 启动新的 Docker 容器,请使用以下命令:

docker run --name=mysql1 --restart on-failure -d container-registry.oracle.com/mysql/enterprise-server:8.0

要使用从 My Oracle Support 下载的 Docker 映像为 MySQL Enterprise Server 启动新的 Docker 容器,请使用以下命令:

docker run --name=mysql1 --restart on-failure -d mysql/enterprise-server:8.0

如果指定名称和标签的 Docker 镜像没有被之前的码头工人拉要么码头运行命令,图像现在已下载。容器的初始化开始,当您运行容器时,容器会出现在正在运行的容器列表中码头工人ps命令。例如:

$> docker ps
CONTAINER ID   IMAGE                COMMAND                  CREATED             STATUS                              PORTS                NAMES
a24888f0d6f4   mysql/mysql-server   "/entrypoint.sh my..."   14 seconds ago      Up 13 seconds (health: starting)    3306/tcp, 33060/tcp  mysql1

容器初始化可能需要一些时间。当服务器准备好使用时,状态容器的输出中的码头工人ps命令从(健康:开始)(健康).

-d中使用的选项码头运行上面的命令使容器在后台运行。使用此命令监视容器的输出:

docker logs mysql1

初始化完成后,命令的输出将包含为 root 用户生成的随机密码;例如,使用以下命令检查密码:

$> docker logs mysql1 2>&1 | grep GENERATED
GENERATED ROOT PASSWORD: Axegh3kAJyDLaRuBemecis&EShOs
# 从容器内连接到 MySQL 服务器

服务器准备就绪后,您可以运行mysql刚刚启动的 MySQL Server 容器中的客户端,并将其连接到 MySQL Server。使用码头工人执行-它命令启动mysql您已启动的 Docker 容器内的客户端,如下所示:

docker exec -it mysql1 mysql -uroot -p

当被询问时,输入生成的 root 密码(请参阅中的最后一步启动 MySQL 服务器实例上面关于如何找到密码)。因为MYSQL_ONETIME_PASSWORD选项默认为真,连接后mysql客户端到服务器,您必须通过发出以下语句重置服务器根密码:

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

代替*密码*使用您选择的密码。重置密码后,服务器就可以使用了。

# 容器外壳访问

要拥有对 MySQL 服务器容器的 shell 访问权限,请使用码头工人执行-它在容器内启动 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

码头工人站发送一个 SIGTERM 信号到mysqld进程,以便服务器正常关闭。

还要注意,当一个容器的主进程(mysqld在 MySQL Server 容器的情况下)停止,Docker 容器会自动停止。

再次启动 MySQL 服务器容器:

docker start mysql1

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

docker restart mysql1

要删除 MySQL 容器,请先将其停止,然后使用码头工人命令:

docker stop mysql1
docker rm mysql1

如果你想要服务器数据目录的 Docker 卷要同时删除,添加-v选项码头工人命令。

# 升级 MySQL 服务器容器

重要的

  • 在对 MySQL 进行任何升级之前,请仔细遵循中的说明第 2.11 节,“升级 MySQL”.在此处讨论的其他说明中,在升级之前备份数据库尤为重要。

  • 本节中的说明要求服务器的数据和配置已持久保存在主机上。看持久化数据和配置更改详情。

    按照以下步骤将 MySQL 5.7 的 Docker 安装升级到 8.0:

  • 停止 MySQL 5.7 服务器(容器名称为mysql57在这个例子中):

    docker stop mysql57
    
  • 下载 MySQL 8.0 服务器 Docker 映像。请参阅中的说明下载 MySQL 服务器 Docker 映像;确保为 MySQL 8.0 使用正确的标签。

  • 启动一个新的 MySQL 8.0 Docker 容器(名为mysql80在这个例子中)使用旧的服务器数据和配置(如果需要,进行适当的修改——见第 2.11 节,“升级 MySQL”)已在主机上(由绑定安装 (opens new window)在这个例子中)。对于 MySQL 社区服务器,运行以下命令:

    docker run --name=mysql80 \
       --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 mysql/mysql-server:8.0
    

    如果需要,调整mysql/mysql-服务器到正确的图像名称 - 例如,将其替换为container-registry.oracle.com/mysql/enterprise-server对于从 OCR 下载的 MySQL 企业版图像,或mysql/企业服务器用于从下载的 MySQL Enterprise Edition 映像我的 Oracle 支持 (opens new window).

  • 等待服务器完成启动。您可以使用以下命令检查服务器的状态码头工人ps命令(见启动 MySQL 服务器实例如何做到这一点)。

  • *对于 MySQL 8.0.15 及更早版本:*跑过mysql_升级MySQL 8.0 Server 容器中的实用程序(MySQL 8.0.16 及更高版本不需要):

    docker exec -it mysql80 mysql_upgrade -uroot -p
    

    出现提示时,输入旧 MySQL 5.7 服务器的 root 密码。

  • 通过重启 MySQL 8.0 Server 容器完成升级:

    docker restart mysql80
    
# 更多关于使用 Docker 部署 MySQL 服务器的主题

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