MySQL:错误 2027 (HY000):格式错误的数据包
Posted
技术标签:
【中文标题】MySQL:错误 2027 (HY000):格式错误的数据包【英文标题】:MySQL: ERROR 2027 (HY000): Malformed packet 【发布时间】:2018-01-21 02:01:28 【问题描述】:我无法远程连接 mysql 服务器。 连接似乎没问题,因为使用 telnet [ip] [port] 我得到了响应:
4.1.3b-beta-nt-max▒当通过命令行或 MySQL Workbench 6.3 执行时
mysql -u [用户] -p -h [主机]我得到同样的错误:ERROR 2027 (HY000): Malformed packet
【问题讨论】:
根据文档:MySQL Workbench ... It does not support MySQL server versions 4.x.
,见Chapter 1 General Information。您使用什么版本的 MySQL Client 来尝试连接 MySQL Server 4.1.3?。
@edvaldosilva 就像 wchiquito 提到的一样。这似乎是旧版本中的 MySQL 错误。您使用哪个版本?您是否通过终端尝试过,您的 mysql 在哪个端口上工作您是否更改了标准端口号
【参考方案1】:
这是一个 mysql 客户端错误,我已经搜索过它是一个旧的身份验证切换请求。您的客户端已经过时,使用旧协议通信,现在,如果您的客户端也是 Workbench 问题,您需要先更新或降级 MySQL 客户端并尝试单独运行。
这里,同样的问题有更完整的答案: https://dba.stackexchange.com/questions/135343/server-responds-with-empty-packet-during-session-negotiation-resulting-in-client
并且,对于新的身份验证协议,在连接阶段: https://dev.mysql.com/doc/dev/mysql-server/latest/page_protocol_connection_phase.html
【讨论】:
【参考方案2】:您必须升级“old_password”哈希密码:
SET PASSWORD FOR 'existinguser'@'localhost' = PASSWORD('existingpass');
因此您可以使用最新的 Workbench 版本登录“旧” MySQL 服务器
【讨论】:
谢谢!这个解决了我在 MySQL Workbench 中遇到的“格式错误的数据包”错误 对我来说,在 MySQL 5.1 服务器上执行此操作时,PASSWORD('existingpass');
仍然会生成错误的哈希格式。所以我不得不在更新的 MySQL 服务器上生成密码哈希:SELECT PASSWORD('existingpass');
【参考方案3】:
如果您需要从更高版本的 MySQL (5.7+) 连接到 4.1 之前的 MySQL 服务器,则需要使用客户端的“--skip-secure-auth”选项。并且客户端版本不能比 v5.7.4 更新,因为此选项已在 5.7.5 中删除。您可以从 mysql 的存档网站下载 5.7.4_m14 版本。例如,
$ mysql -uuser -p -hserver --skip-secure-auth
【讨论】:
【参考方案4】:我在尝试使用 MySQL 客户端 mysql-client
连接到 MariaDB 服务器时遇到了同样的错误。我通过安装mariadb-client
解决了这个问题(它会覆盖mysql
二进制文件,所以使用相同的命令进行连接)。
【讨论】:
【参考方案5】:对于普通的选择查询,我确实遇到了这个问题。奇怪的是,当我在查询语句中使用小写“s”时,它给了我同样的错误。我发现这是在内部尝试从 mysql 缓存中检索数据时发生的。 这不是因为选择查询中的“s”大小写。
//Returned Error
select * from foo;
//This worked fine
Select * from foo;
//This also worked fine
select SQL_NO_CACHE * from foo;
据此,我可以得出结论,这是使用缓存数据的问题。
【讨论】:
+1 表示查询缓存可能是导致该特定错误的原因。然而,MySQL 方面的错误是“wontfix”:bugs.mysql.com/bug.php?id=86318【参考方案6】:我在尝试连接 5.1.xx 等较低版本的 MySQL 时,在使用最新的 MySQL 客户端 (>5.7) 时遇到了同样的问题。
为避免此问题(ERROR 2027 (HY000): Malformed packet),请使用最新密码验证创建用户。
例如: 登录 MySQL 5.1.xx 服务器并执行..
mysql> create user 'testuser'@'xx.xx.xxx.%' identified by 'testuser_Secret1';
检查您是否启用了 old_passwords,然后为该会话禁用它。
mysql> show session variables like 'old_passwords';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| old_passwords | ON |
+-----------------+-------+
mysql> set session old_passwords = 0;
mysql> GRANT select on test.* TO 'testuser'@'xx.xx.xxx.%' identified by 'testuser_Secret1';
验证应以“*SOMETHING1123SHOWNBELOW3034”开头的密码。
mysql> select user,host,password from mysql.user where user = 'testuser';
+-----------+---------------+-------------------------------------------+
| user | host | password |
+-----------+---------------+-------------------------------------------+
| testuser | xx.xx.xxx.% | *053CB27FDD2AE63F03D4A0B919E471E0E88DA262 |
+-----------+---------------+-------------------------------------------+
现在尝试从 MySQL 5.7.xx 客户端登录并尝试建立与 MySQL 5.1.xx 服务器的连接。
[testuser@localhost]# mysql -V
mysql Ver 14.14 Distrib 5.7.31, for Linux (x86_64) using EditLine wrapper
[testuser@localhost]# mysql -hxx.xx.xxx.xxx -u testuser -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1528853
Server version: 5.1.73-log Source distribution
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
【讨论】:
【参考方案7】:对于执行查询时(不是连接数据库时)出现此错误的人,问题是数据库中的缓存配置。
您可以在此处找到错误描述:
https://bugs.mysql.com/bug.php?id=86318
解决办法:
禁用缓存配置:
query_cache_limit = 0
query_cache_size = 0
query_cache_type = 0
从长远来看没有负面影响,因为最新版本的 MySQL 不再支持此功能。数据很少时缓存可以正常工作,但大量数据会产生瓶颈。
有关从 mysql 8.0 中删除的缓存的更多信息:
https://mysqlserverteam.com/mysql-8-0-retiring-support-for-the-query-cache/
【讨论】:
【参考方案8】:我解决了这个问题。我在我的 PHP 7.2 中遇到了这个问题。首先,我创建了一个新用户并在我的脚本中升级它。然后我将 PHP 7.2 升级到 7.3。它奏效了。 :)
【讨论】:
以上是关于MySQL:错误 2027 (HY000):格式错误的数据包的主要内容,如果未能解决你的问题,请参考以下文章
如何修复“ERROR 130 (HY000):文件格式不正确”
ERROR 1819 (HY000): Unknown error 1819
MySQL 跨版本主从复制时报错:ERROR 1794 (HY000): Slave is not configured or failed to initialize properly.
mysql连接报错 ERROR 2002 (HY000): Can't connect to local MySQL server through socket