• mysql故障不完全小结


    最近处理了一个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

    百度它,就可以找到解决方案。

    1. 在my.ini中[mysqld]段里添加一行。

      skip-name-resolve
      ?

    2. 在主机的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/
  • 相关阅读:
    代码整洁之道 读书笔记
    AJAX分页带页码
    下拉框绑定数据
    Excel导入导出
    万能分页存储过程
    android 更新uI主线程
    eclipse配置j2ee项目
    java常见错误云集与注意事项
    亚马逊服务器搭建
    常见sql的error解决方法
  • 原文地址:https://www.cnblogs.com/xujif/p/2391717.html
Copyright © 2020-2023  润新知