XAMPP本地环境phpMyAdmin登录报错求助:mysqli连接相关错误
看起来你遇到的是XAMPP环境中MySQL服务与phpMyAdmin之间的连接异常问题,这些错误提示大多和MySQL服务状态、连接配置不匹配有关,我来帮你一步步排查解决:
你遇到的错误信息:
mysqli::real_connect(): Premature end of data (mysqlnd_wireprotocol.c:387)
mysqli::real_connect(): GREET packet %Id bytes shorter than expected
mysqli::real_connect(): Error while reading greeting packet. PID=10920
mysqli::real_connect(): [2002] (trying to connect via (null))
mysqli::real_connect(): (HY000/2002):
Connection for controluser as defined in your configuration failed.
你的环境配置:
phpMyAdmin 配置文件(config.inc.php):
$cfg['blowfish_secret'] = 'xampp'; /* YOU SHOULD CHANGE THIS FOR A MORE SECURE COOKIE AUTH! */ $i = 0; $i++; $cfg['Servers'][$i]['auth_type'] = 'cookie'; $cfg['Servers'][$i]['user'] = 'root'; $cfg['Servers'][$i]['password'] = ''; $cfg['Servers'][$i]['extension'] = 'mysqli'; $cfg['Servers'][$i]['AllowNoPassword'] = true; $cfg['Servers'][$i]['host'] = 'localhost';
排查解决步骤:
确认MySQL服务是否正常运行
打开XAMPP控制面板,检查MySQL模块的状态是否为Running。如果没启动,点击Start尝试启动;如果启动失败,大概率是默认3306端口被其他程序占用了。此时可以修改MySQL端口:点击MySQL模块的Config->my.ini,找到port=3306改成3307(或其他未被占用的端口),保存后重启MySQL服务,同时记得在phpMyAdmin的config.inc.php里把$cfg['Servers'][$i]['host']改成localhost:3307。切换连接方式为TCP/IP
你的配置里host设为localhost,Windows下默认会尝试用命名管道连接,换成127.0.0.1强制用TCP/IP连接往往能解决握手包异常问题:把$cfg['Servers'][$i]['host'] = 'localhost';修改为$cfg['Servers'][$i]['host'] = '127.0.0.1';,保存后刷新phpMyAdmin页面重试。检查controluser配置
错误里提到的Connection for controluser as defined in your configuration failed,可能是配置文件里存在默认的controluser设置但MySQL中没有对应账号。检查config.inc.php是否有类似以下的配置:$cfg['Servers'][$i]['controluser'] = 'pma'; $cfg['Servers'][$i]['controlpass'] = '';如果有,要么在MySQL中创建并授权
pma用户,要么直接注释掉这两行配置,重启Apache服务后重试。清除缓存并重启服务
有时候旧的会话缓存会干扰连接,先关闭所有浏览器窗口,清除浏览器缓存,然后在XAMPP控制面板中重启Apache和MySQL服务,再重新打开phpMyAdmin尝试登录。调整MySQL的数据包大小
打开MySQL的my.ini配置文件,找到max_allowed_packet参数,若设置过小可能导致握手包传输异常,建议修改为max_allowed_packet=64M,保存后重启MySQL服务再试。
备注:内容来源于stack exchange,提问作者kureng123

