mysql启用skip-name-resolve出现Warning及用户权限错误解决办法
发布:smiling 来源: PHP粉丝网 添加日期:2014-10-13 10:59:57 浏览: 评论:0
本文章总结了mysql启用skip-name-resolve出现Warning及用户权限错误解决办法,有需要了解的同学可参考一下.
120726 11:57:22 [Warning] 'user' entry 'root@localhost.localdomain' ignored in --skip-name-resolve mode.
120726 11:57:22 [Warning] 'user' entry '@localhost.localdomain' ignored in --skip-name-resolve mode.//phpfensi.com
skip-name-resolve是禁用dns解析,避免网络DNS解析服务引发访问MYSQL的错误,一般应当启用.
启用后,在mysql的授权表中就不能使用主机名了,只能使用IP,出现此警告是由于mysql 表中已经存在有 localhost.localdomain 帐号信息.
我们把它删除就好了,代码如下:
- mysql>use mysql;
- mysql> delete from user where HOST='localhost.localdomain';
- Query OK, 2 rows affected (0.00 sec)
重启MYSQL,发现警告已经没有啦.
mysql SKIP-NAME-RESOLVE 错误的使用时机造成用户权限,登陆到mysql,查看进程的信息,代码如下:
show processlist;
发现大量的进程的状态为 login,原来默认的时候mysql启动时是不使用 skip-name-resolve选项的,这样的话,从其它主机的连接会比较慢,因为mysql会对这个ip做dns反向查询,导致大量的连接处于 login状态....
解决这个问题有两个办法
一是加入 skip-name-resolve参数重启mysql
二是在 /etc/hosts中加入一句 192.168.0.2 server2 其中 192.168.0.2是新加的服务器的内网ip,server2是新服务器的主机名.
在mysql客户端登陆mysql服务器的登录速度太慢的解决方案一篇文章中,我介绍了如何通过在my.ini文件(linux下是my.cnf文件)中添加"SKIP-NAME-RESOLVE"的参数设置,使得客户端在登录服务器的时候不通过主机解析这一关,直接登陆的方法,以此来提高登录速度。
这里要介绍一下这种方法的负面作用,以及不合理的时机使用这种方法会引发的不可发现的错误.
首先,回顾一下在my.ini文件中添加"SKIP-NAME-RESOLVE"参数来提高访问速度的原理.
在没有设置该参数的时候,客户端在登陆请求发出后,服务器要解析请求者是谁,经过解析,发现登录者是从另外的电脑登录的,也就是说不是服务器本机,那么,服务器会到mysql.user表中去查找是否有这个用户,假设服务器IP是192.168.0.1,而客户机的IP是192.168.0.2;那么查询的顺序是先找'root'@'192.168.0.2'这个user是否存在,若存在,则匹配这个用户登陆,并加载权限列表。若没有该用户,则查找'root'@'%'这个用户是否存在,若存在,则加载权限列表。否则,登录失败。
在设置了SKIP-NAME-RESOLVE参数后,客户端的登录请求的解析式同上面一样的,但是在服务器本机的解析过程却发生了改变:服务器会把在本机登录的用户自动解析为'root'@'127.0.0.1';而不是'root'@'localhost';这样一来就坏了,因为我们在服务器上登录是为了进行一些维护操作,但是显然,'root'@'127.0.0.1'这个用户是被默认为'root'@'%'这个用户的,这个用户还没有足够得权限去执行一些超级管理员'root'@'localhost'才能执行的大作。因为未分配权限。
所以结论是:加入你在服务器本机上登录mysql服务器的话,要么先取消SKIP-NAME-RESOLVE的参数设置,重新启动服务器再登陆,设置完成后,再设置上该参数;要么就给'root'@'127.0.0.1'分配超级管理员权限,但这么做显然是不明智的,因为任何人在任何机器上都可以用这个用户执行管理员操作,前提是知道了密码。
我有一次在mysql服务器上执行数据库创建脚本,并同时创建表、触发器、存储过程等。结果,总是失败,经过了一上午的折腾,最后发现时这个参数造成我以'root'@'127.0.0.1'这个用户登陆了服务器,这个用户没有创建触发器的权限。后来,取消了SKIP-NAME-RESOLVE参数后,执行成功,再把该参数设置回去。重启。OK。
所以,在设置这个参数的时候一定要注意时机:先用超级管理员将所有的用户创建好,再将权限分配好之后,才设置这个参数生效。
Tags: skip-name-resolve Warning
相关文章
- ·mysql启用skip-name-resolve模式一些问题小结(2014-09-27)
- ·Warning: mysql_free_result():(2013-11-28)
- ·mysql错误:Warning: #1366 Incorrect string value:解决方法(2014-09-27)
- ·mysql提示[Warning] Cant create test file xxx lower-test(2014-09-28)
- ·MySQL无法重启提示Warning: World-writable config file(2014-09-28)
- ·查看mysql的warnings警告错误语句(2014-09-29)
- ·mysql提示[Warning] Invalid table or database name(2014-10-13)
- ·mysql [Warning] max_join_size报错问题解决办法(2014-10-15)
- ·错误提示:Warning:mysql_fetch_array() expects parameter(2014-10-17)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)