[转帖]ERROR 2013 (HY000): Lost connection to MySQL server的解决方法 _MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2559 | 回复: 0   主题: [转帖]ERROR 2013 (HY000): Lost connection to MySQL server的解决方法         下一篇 
nini
注册用户
等级:新兵
经验:56
发帖:63
精华:0
注册:2011-12-16
状态:离线
发送短消息息给nini 加好友    发送短消息息给nini 发消息
发表于: IP:您无权察看 2014-12-22 15:57:30 | [全部帖] [楼主帖] 楼主

1、进入mysql,创建一个新用户root,密码为root:

   格式:grant 权限 on 数据库名.表名 to 用户@登录主机 identified by "用户密码";            grant select,update,insert,delete on *.* to root@192.168.1.12 identified by "root";

   原先数据表结构

mysql> use mysql; Database changed mysql> select host,user,password from user; +-----------+------+-------------------------------------------+ | host      | user | password                                  | +-----------+------+-------------------------------------------+ | localhost | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | +-----------+------+-------------------------------------------+


   执行上述语句后结果

mysql> use mysql; Database changed mysql> select host,user,password from user; +--------------+------+-------------------------------------------+ | host         | user | password                                  | +--------------+------+-------------------------------------------+ | localhost    | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | | 192.168.1.12 | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | +--------------+------+-------------------------------------------+ 2 rows in set (0.00 sec)


   可以看到在user表中已有刚才创建的root用户。host字段表示登录的主机,其值可以用IP,也可用主机名,

   (1)有时想用本地IP登录,那么可以将以上的Host值改为自己的Ip即可。

2、实现远程连接(授权法)

   将host字段的值改为%就表示在任何客户端机器上能以root用户登录到mysql服务器,建议在开发时设为%。       update user set host = ’%’ where user = ’root’;

   将权限改为ALL PRIVILEGES

mysql> use mysql; Database changed mysql> grant all privileges  on *.* to root@'%' identified by "root"; Query OK, 0 rows affected (0.00 sec)
mysql> select host,user,password from user; +--------------+------+-------------------------------------------+ | host         | user | password                                  | +--------------+------+-------------------------------------------+ | localhost    | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | | 192.168.1.12 | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | | %            | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | +--------------+------+-------------------------------------------+ 3 rows in set (0.00 sec)


这样机器就可以以用户名root密码root远程访问该机器上的MySql.

3、实现远程连接(改表法)

use mysql;
update user set host = '%' where user = 'root';


这样在远端就可以通过root用户访问Mysql.

通过上面的方法,在mysql的user表中建立了一个用户后,刷新权限,就可以通过远程连接mysql了(通过用户的客户端的机器连接到服务器上面的mysql服务器),不过依然出现了下面的错误:

当通过 TCP/IP 连接 MySQL 远程主机时,出现 ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 104 。如果是在linux shell命令行中直接打 mysql 命令,能够顺利连上 MySQL,执行查询语句也比较正常,但如果执行 STOP SLAVE; 命令时就随机出现 ERROR 2013 (HY000): Lost connection to MySQL server during query 问题。而如果把操作命令写到脚本文件再去执行该脚本文件的话,则必然出现 Lost connection to MySQL server at 'reading initial communication packet', system error: 111

要是无论通过什么途径远程访问都出现错误可以认为是系统有防火墙之类的限制,但现在这种奇怪的抽筋现象让人百思不得其解。最后找到的解决方法是在 my.cnf 里面的 [mysqld] 段增加一个启动参数

skip-name-resolve


问题消失,原因如下:

http://www.ixpub.net/thread-1326843-1-1.html


所谓反向解析是这样的:
mysql接收到连接请求后,获得的是客户端的ip,为了更好的匹配mysql.user里的权限记录(某些是用hostname定义的)。
如果mysql服务器设置了dns服务器,并且客户端ip在dns上并没有相应的hostname,那么这个过程很慢,导致连接等待。

添加skip-name-resolve以后就跳过着一个过程了。
北京联动北方科技有限公司

添加上述的参数后,就直接跳过了。希望对同行有帮助。

--转自 北京联动北方科技有限公司




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论