最近处理了一个mysql的故障。记录下来备忘。
原因是看我们的服务器的时候发现mysql被配置成了developer-machine,对于服务器而言,配置成这样的却是不应该的。于是顺手用MySQL Server Instance Config Wizard reconfig了一下。
问题就来了,具体表现在网站不能访问数据库(dizcuz,wordpress),因为历史遗留问题,网站配置数据库的时候都用root进行连接。而且这台服务器是专用的数据库服务器,没有iis之类不能用phpmyadmin.
先检查 mysql的user表,看看root有没有远程访问的权限。
use mysql select user,host from user;看看远程host有没有访问权限。
如果没有,可以添加相关权限。用insert插入太麻烦,字段太多(有很多字段虽然有默认值,但是插入的是N,没有多少权限的)。推荐用grant授权。
顺便记录下网上查到的一些命令集合。
把localhost改为%授权给全部,个人不推荐把localhost的授权改掉,因为会有问题,导致本地不能登录。下面会说。
mysql>use mysql; mysql>update user set host = "%" where user = "root"; mysql>select host, user from user;授权。
mysql>GRANT ALL PRIVILEGES ON *.* TO "root"@"%" IDENTIFIED BY "123456" WITH GRANT OPTION;或者
mysql>GRANT ALL PRIVILEGES ON *.* TO "root"@"192.168.1.1" IDENTIFIED BY "123456" WITH GRANT OPTION;最后
FLUSH PRIVILEGES就能生效。
因为处理过程中不小心删除了localhost ,或者忘记root密码,或者删除root帐户,导致本地不能登录。可以关掉 mysqld进程,cmd进入mysql的bin目录,用
mysqld --skip-grant-tables?跳过权限检查,然后就可以直接进入mysql建立帐户。
用下面的命令修改密码。(不过特别注意如果有多个root的授权的话,必须在where里添加一个约束条件,不然多个授权的密码都会修改。更推荐网站连接不用root帐户。
mysql>use mysql mysql>update user set password=password("new_pass") where user="root"; mysql>flush privileges;回到问题上来,修改上述配置之后,本地登录应该没问题了,但是网站还是不能正常访问。
具体表现在? 非常慢,不能打开网页,知道请求失败,连续几次之后iis报告500(php错误次数过多),更诡异的是mysql启动的瞬间还能打开1-2次网页。
在数据库服务器授权所有主机访问myaql,在我的电脑上使用mysql进行远程连接,发现非常慢,几次都忍不住手动ctrl+c,最后发现连接失败,错误报告为
#2013 - Lost connection to MySQL server at 'reading initial communication packet
百度它,就可以找到解决方案。
- 在my.ini中[mysqld]段里添加一行。
skip-name-resolve
?- 在主机的hosts里为每个user表里的授权host添加映射ip。
关于这个选项,是为了更好的管理授权,对ip进行dns反查,当然这个如果在主机的hosts里没有的话,查询就会比较慢,经常慢到网页卡死。
如果登陆到mysql,查看进程的信息
show processlist;
发现大量的进程的状态为 login
因为mysql会对这个ip做dns反向查询,导致大量的连接处于 login状态.....用网上的一张图片描述就是:
因此,如果关掉dns反查,而且在mysql的user表里不用hostname而用ip地址作为host的话,连接登录至少能快很多。
?
附:MySQL常见错误代码说明
1005:创建表失败?
1006:创建数据库失败?
1007:数据库已存在,创建数据库失败?
1008:数据库不存在,删除数据库失败?
1009:不能删除数据库文件导致删除数据库失败?
1010:不能删除数据目录导致删除数据库失败?
1011:删除数据库文件失败?
1012:不能读取系统表中的记录?
1020:记录已被其他用户修改?
1021:硬盘剩余空间不足,请加大硬盘可用空间?
1022:关键字重复,更改记录失败?
1023:关闭时发生错误?
1024:读文件错误?
1025:更改名字时发生错误?
1026:写文件错误?
1032:记录不存在?
1036:数据表是只读的,不能对它进行修改?
1037:系统内存不足,请重启数据库或重启服务器?
1038:用于排序的内存不足,请增大排序缓冲区?
1040:已到达数据库的最大连接数,请加大数据库可用连接数?
1041:系统内存不足?
1042:无效的主机名?
1043:无效连接?
1044:当前用户没有访问数据库的权限?
1045:不能连接数据库,用户名或密码错误?
1048:字段不能为空?
1049:数据库不存在?
1050:数据表已存在?
1051:数据表不存在?
1054:字段不存在?
1065:无效的SQL语句,SQL语句为空?
1081:不能建立Socket连接?
1114:数据表已满,不能容纳任何记录?
1116:打开的数据表太多?
1129:数据库出现异常,请重启数据库?
1130:连接数据库失败,没有连接数据库的权限?
1133:数据库用户不存在?
1141:当前用户无权访问数据库?
1142:当前用户无权访问数据表?
1143:当前用户无权访问数据表中的字段?
1146:数据表不存在?
1147:未定义用户对数据表的访问权限?
1149:SQL语句语法错误?
1158:网络错误,出现读错误,请检查网络连接状况?
1159:网络错误,读超时,请检查网络连接状况?
1160:网络错误,出现写错误,请检查网络连接状况?
1161:网络错误,写超时,请检查网络连接状况?
1062:字段值重复,入库失败?
1169:字段值重复,更新记录失败?
1177:打开数据表失败?
1180:提交事务失败?
1181:回滚事务失败?
1203:当前用户和数据库建立的连接已到达数据库的最大连接数,请增大可用的数据库连接数或重启数据库?
1205:加锁超时?
1211:当前用户没有创建用户的权限?
1216:外键约束检查失败,更新子表记录失败?
1217:外键约束检查失败,删除或修改主表记录失败?
1226:当前用户使用的资源已超过所允许的资源,请重启数据库或重启服务器?
1227:权限不足,您无权进行此操作?
1235:MySQL版本过低,不具有本功能
文章来源:http://blog.xujif.com/archives/solution-of-mysql/