解决 Docker 容器中 MySQL 的“no matching cipher found”问题

阅读时长 4 分钟读完

最近在使用 Docker 运行 MySQL 时,经常遇到“no matching cipher found”的错误提示。这种错误通常发生在连接到 MySQL 服务器时,因为客户端和服务器端之间的 SSL/TLS 协议无法匹配。

本文将介绍如何在 Docker 容器中解决这个问题,让你可以顺畅地连接到 MySQL 服务器。

问题分析

当使用 MySQL 客户端连接到 Docker 容器里的 MySQL 服务器时,会出现下面的错误:

这通常是因为 MySQL 服务器默认只支持较新的加密协议,而客户端所使用的 SSL/TLS 协议版本太旧,无法兼容 MySQL 服务器的加密协议。

因此,我们需要在 Docker 容器中修改 MySQL 的配置,使其支持旧的 SSL/TLS 协议版本。

解决方案

为了解决这个问题,我们需要通过修改 MySQL 的配置文件来设置 SSL/TLS 协议版本。

  1. 进入 Docker 容器中的 MySQL,可以使用以下命令进入容器:

其中,<CONTAINER_NAME> 是容器的名称或 ID。

  1. 找到并编辑 MySQL 的配置文件 my.cnf,一般在 /etc/mysql/ 目录下,根据 MySQL 版本不同,具体路径会有所变化,可以通过以下命令查找:
  1. my.cnf 文件中找到 [mysqld] 部分,并添加以下内容:

其中,ssl-ciphertls-version 分别是设置 SSL/TLS 协议所使用的加密算法和版本的参数。这里我们设置的加密算法是 MySQL 支持的较旧的算法,而版本则是最新的 TLSv1.3 和较旧的 TLSv1.2。

  1. 保存并关闭 my.cnf 文件,然后重启 MySQL 服务器,可以使用以下命令重启:

然后就可以尝试连接到 MySQL 服务器,应该不会再出现“no matching cipher found”的错误了。

示例代码

以下是示例代码,展示了如何在 Docker 容器中修改 MySQL 的配置文件,以支持旧的 SSL/TLS 协议版本:

-- -------------------- ---- -------
- ------ ---- --- ------- ----

- ----- ----- -----
- ---- - ----- ------
- -- -----------------

- - -------- --------
--------
---
---------- - --------------------------------------------------------------------------------------------------------------------------
----------- - ---------------

- ----- ------ --
- ---

- -- ----- ---
- ------- ----- -------

总结

在 Docker 容器中运行 MySQL 时,遇到“no matching cipher found”的错误是比较常见的问题。这通常是由于客户端和服务器端之间的 SSL/TLS 协议无法匹配所引起的。

解决这个问题的方法是通过在 MySQL 的配置文件中设置支持旧的 SSL/TLS 协议版本来解决。具体操作步骤包括进入容器、编辑配置文件、添加参数并保存修改、重启 MySQL 服务器等。

希望本文对 Docker 容器中 MySQL 运行过程中遇到的“no matching cipher found”问题有所帮助。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64aa7e5948841e989469fbe9

纠错
反馈