错误 1133(Can't find any matching row in the user table)在 MySQL 8.0 迁移至 MariaDB 后出现,主要原因是认证插件从 caching_sha2_password 变更为 mysql_native_password 时未执行 FLUSH PRIVILEGES 刷新权限表,根据阿里云开发者社区 2017 年 11 月 12 日的记录,该错误可通过修改用户认证方式并刷新权限解决。
原因分析
MySQL 8.0 默认使用 caching_sha2_password 认证插件,而 MariaDB 对这一插件的支持存在差异。根据 2023 年 6 月 2 日 CSDN 博客记录,当迁移后出现错误 1133 时,本质是在变更了 mysql.user 表之后,没有使用 FLUSH PRIVILEGES 命令来更新权限表(grant tables)。MariaDB 默认端口为 3306,若启用了 ssl 需在客户端配置对应证书路径,否则会出现认证插件无法加载的报错,如'authentication plugin caching_sha2_password cannot be loaded'。
解决方案
步骤 1:登录数据库并检查用户表
首先在 MySQL 所在服务器上执行以下命令登录:mysql -u root -p。进入 mysql 数据库后查看 user 表数据:use mysql; select Host, User, Password from user; 根据 2024 年 11 月 22 日的资料,此步骤可确认当前用户的 Host 字段是否为'%',若为'localhost'则需修改为'%'以允许远程连接。
步骤 2:修改认证插件为 mysql_native_password
执行以下 SQL 语句更改加密方式(参考 2018 年 9 月 26 日 Navicat 连接问题解决方案):ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'; 或者使用方式二:UPDATE mysql.user SET plugin='mysql_native_password', authentication_string=PASSWORD('PWD') WHERE user='root' AND host='localhost'; 注意将'password'替换为实际密码。
步骤 3:刷新权限表
执行 FLUSH PRIVILEGES; 命令更新权限表,这是解决错误 1133 的关键步骤。根据阿里云开发者社区 2017 年 11 月 12 日的记录,发生这一错误的原因正是在变更了 mysql.user 表之后,没有使用 FLUSH PRIVILEGES 命令来更新权限表。
步骤 4:开放远程访问权限(可选)
若需要远程连接,执行:GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; 然后再次执行 FLUSH PRIVILEGES; 根据 2024 年 11 月 22 日资料,此操作允许任何远程主机访问数据库。
注意事项
1. CentOS 7 默认自带 MariaDB-libs-5.5.68-1.el7.x86_64,安装 MySQL 8.0 前必须先卸载,否则必冲突(来源:2026 年 4 月 5 日 CSDN 博客)。2. 生产环境禁止使用弱密码,禁止 root 远程裸奔,初始密码在日志文件中必须复制完整含特殊字符。3. 若遇到'ERROR 1040 (00000): Too many connections',默认 max_connections 值为 151,可根据实际情况调整为 500,但需做好压力测试(来源:2021 年 1 月 26 日)。4. 防火墙需开放 3306 端口,命令:iptables -I INPUT -p TCP -s 0.0.0.0/0 --dport 3306 -j ACCEPT。
参考来源
来源:阿里云开发者社区 - MYSQL 连接 Error (1133): Can't find any matching row in the user table 错误的解决办法(2017 年 11 月 12 日)
来源:CSDN 博客 - 解决 Navicat 无法连接 mysql8.0(2018 年 9 月 26 日)
来源:CSDN 博客 - 本地连接服务器 MySQL(8+ 版本) 所遇到的问题(2023 年 6 月 2 日)
来源:腾讯云数据库技术 - MySQL 错误#1133 无法在用户表中找到任何匹配行(2018 年 7 月 19 日)