最近在使用 Docker 运行 MySQL 时,经常遇到“no matching cipher found”的错误提示。这种错误通常发生在连接到 MySQL 服务器时,因为客户端和服务器端之间的 SSL/TLS 协议无法匹配。
本文将介绍如何在 Docker 容器中解决这个问题,让你可以顺畅地连接到 MySQL 服务器。
问题分析
当使用 MySQL 客户端连接到 Docker 容器里的 MySQL 服务器时,会出现下面的错误:
ERROR 2026 (HY000): SSL connection error: no matching cipher found
这通常是因为 MySQL 服务器默认只支持较新的加密协议,而客户端所使用的 SSL/TLS 协议版本太旧,无法兼容 MySQL 服务器的加密协议。
因此,我们需要在 Docker 容器中修改 MySQL 的配置,使其支持旧的 SSL/TLS 协议版本。
解决方案
为了解决这个问题,我们需要通过修改 MySQL 的配置文件来设置 SSL/TLS 协议版本。
- 进入 Docker 容器中的 MySQL,可以使用以下命令进入容器:
$ docker exec -it <CONTAINER_NAME> bash
其中,<CONTAINER_NAME>
是容器的名称或 ID。
- 找到并编辑 MySQL 的配置文件
my.cnf
,一般在/etc/mysql/
目录下,根据 MySQL 版本不同,具体路径会有所变化,可以通过以下命令查找:
$ find / -name my.cnf
- 在
my.cnf
文件中找到[mysqld]
部分,并添加以下内容:
[mysqld] ... ssl-cipher = TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:TLS_AES_128_CCM_8_SHA256:TLS_AES_128_CCM_SHA256 tls-version = TLSv1.2,TLSv1.3
其中,ssl-cipher
和 tls-version
分别是设置 SSL/TLS 协议所使用的加密算法和版本的参数。这里我们设置的加密算法是 MySQL 支持的较旧的算法,而版本则是最新的 TLSv1.3 和较旧的 TLSv1.2。
- 保存并关闭
my.cnf
文件,然后重启 MySQL 服务器,可以使用以下命令重启:
$ service mysql restart
然后就可以尝试连接到 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