场景
之前MySQL服务器版本是5.7,升级到8.0以后,修复漏洞,导致后台C++服务调用mysql_real_connect函数返回1251,连接数据库失败的错误码
排查过程
添加代码排查:
unsigned int STDCALL mysql_errno(MYSQL *mysql);
错误码:1251
const char * STDCALL mysql_error(MYSQL *mysql);
错误信息:Access denied for user 'root'@'WIN-TOR4ST1QUOE' (using password: YES) failed
原因
MySQL8.0默认采用mysql_native_password方式验证密码,所以才会出现这个问题
解决方案
需要将默认的连接方式及root账户的连接方式恢复为旧的mysql_native_password方式,执行如下的指令:
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root@123';
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root@123';
FLUSH PRIVILEGES;