前些天接到一个客户发来的信息:自建MySQL实例之后,使用mysql -uroot@'192.168.3.6' 无法登录,密码没有问题;后面将所有其他不相干的mysql.user表数据删除后,可以正常登录。
因为客户并没有保存详细的登录及报错信息,导致完全复原客户场景。
借这个机会好好说说MySQL数据库登录验证的步骤,在登录遇到问题时提供参考。
当尝试连接到MySQL server时,服务器会根据用户名、密码来验证您的身份。如果没有,服务器将完全拒绝对您的访问。否则,服务器接受连接,然后进入等待请求阶段。
连接验证阶段
连接请求到达服务器之后,MySQL会将用户名、密码、Host参数信息与mysql.users.(user、password、host)进行验证。当完全匹配时,才允许登录。
以用户baiyang 为例,下表显示了各种组合User和Host值,涵盖了MySQL登录验证的所有情况。
User 值
Host 值
允许连接
'baiyang'
'h1.example.net'
baiyang,连接 h1.example.net
''
'h1.example.net'
任何用户,连接 h1.example.net
'baiyang'
'%'
baiyang,从任何主机连接
''
'%'
任何用户,从任何主机连接