仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 882|回复: 7
打印 上一主题 下一主题

[CentOS(社区)] 给大家带来毗连MySQL数据库经常见妨碍成绩的剖析与办理

[复制链接]
海妖 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-14 20:27:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的好朋友们!初学的mysql网友爱象常常会碰着mysql没法毗连的毛病。特开贴搜集如许成绩的征象和缘故原由。

先本人扔块砖头出来。

归结以下:

妨碍征象:没法毗连mysql
=============================================================================

毛病信息1:ERROR1045(28000):Accessdeniedforuserusera@localhost(usingpassword:YES)
毛病信息2:ERROR1045(28000):Accessdeniedforuserusera@localhost(usingpassword:NO)

上面,起首剖析申明这两种毛病信息分离在甚么情形下会呈现:

形貌:利用mysql毗连下令或毗连工具,对近程数据库举行毗连时,大概会呈现以上两种毛病信息,上面以下令的毗连体例举行申明。

当利用mysql里毗连下令时,若带-p参数且指明暗码,或带-p参数不指明暗码,但鄙人一步输出暗码时有字符串输出,则前往的是
“毛病信息1”,若不带-p参数,或带-p参数但鄙人一步输出暗码时,不输出任何字符,则前往的是“毛病信息2”,以下所示:

C:DocumentsandSettingsAdministrator>mysql-uroot-h192.168.8.88-proot//带-p参数,并指明暗码
ERROR1045(28000):Accessdeniedforuserroot@192.168.8.123(usingpassword:YES)

C:DocumentsandSettingsAdministrator>mysql-uroot-h192.168.8.88-p//带-p参数,鄙人一步举行暗码输出
Enterpassword://有字符串输出
ERROR1045(28000):Accessdeniedforuserroot@192.168.8.123(usingpassword:YES)

C:DocumentsandSettingsAdministrator>mysql-uroot-h192.168.8.88//不带-p参数
ERROR1045(28000):Accessdeniedforuserroot@192.168.8.123(usingpassword:NO)

C:DocumentsandSettingsAdministrator>mysql-uroot-h192.168.8.88-p//带-p参数,鄙人一步举行暗码输出
Enterpassword://无字符串输出
ERROR1045(28000):Accessdeniedforuserroot@192.168.8.123(usingpassword:NO)

下面的对照可总结出一点,利用mysql下令举行登录时,如有暗码输出举动并输出了字符,则考证堕落后,则前往的毛病提醒中,关于(usingpassword:?)中?的关头字,则前往的是YES,若没有暗码输出举动,或无暗码字符输出,则前往的是NO。

除下面的实行对照,还举行了以下的登录对照操纵,并纪录了他们所前往毛病提醒范例,对下面的总结举行考证:

1.利用存在的用户,不输出暗码
ERROR1045(28000):Accessdeniedforuserroot@192.168.8.123(usingpassword:NO)
2.利用不存在的用户,不输出暗码
ERROR1045(28000):Accessdeniedforuserroot@192.168.8.123(usingpassword:NO)
3.利用存在的用户,且输出暗码准确
ERROR1045(28000):Accessdeniedforuserroot@192.168.8.123(usingpassword:YES)
4.利用存在的用户,但输出暗码不准确
ERROR1045(28000):Accessdeniedforuserroot@192.168.8.123(usingpassword:YES)
5.利用不存在的用户,但输出数据库中存在的某一个暗码
ERROR1045(28000):Accessdeniedforuserroot@192.168.8.123(usingpassword:YES)
6.利用不存在的用户,且输出数据库中不存在的一个暗码
ERROR1045(28000):Accessdeniedforuserroot@192.168.8.123(usingpassword:YES)

总结:关于ERROR1045(28000):Accessdeniedforuserroot@192.168.8.123此类毛病前往时,(usingpassword:?)中?的
关头字是YES仍是NO,关头不在于用户是不是存在,暗码是不是准确,它的了局取决于登录时,用户关于暗码有无字符串的输出,假如没有,MySQL数据库考证后,若堕落前往此类信息,则应是(usingpassword:NO),若用户对暗码有字符串的输出,前往的则是
(usingpassword:YES)。

上面剖析这类ERROR1045(28000):Accessdeniedforuserusera@localhost毛病呈现的缘故原由:

缘故原由1:客户端近程会见的用户账号并未创立

反省:
以***ROOT登录后,showgrantsforuser@’IP‘;大概selectuserfrommysql.user;确认用户账号是不是存在。

mysql>showgrantsforjtsec@192.168.8.123;
ERROR1141(42000):Thereisnosuchgrantdefinedforuserjtseconhost192.168.8.123
mysql>

前往信息:ERROR1141(42000):Thereisnosuchgrantdefinedforuserjtseconhost192.168.8.123
申明,没有jtsec用户,大概没有对jtsec用户举行在192.168.8.123近程会见的受权。

mysql>selectuser,hostfrommysql.user;
+-------+---------------+
|user|host|
+-------+---------------+
|root|localhost|
+-------+---------------+
1rowsinset(0.00sec)
mysql>

关于user纪录数只要一条,是root,并没有jtsec相干的纪录,申明没无数据库中没有jtsec这个帐号。


处置:创立用户账号。
mysql>grantallprivilegeson*.*tojtsec@192.168.8.123identifiedbyjtsecwithgrantoption;
QueryOK,0rowsaffected(0.00sec)
mysql>flushprivileges;
QueryOK,0rowsaffected(0.00sec)
mysql>showgrantsforjtsec@192.168.8.123;
+---------------------------------------------------------------------------------------------------------------------------------------------+
|Grantsforjtsec@192.168.8.123|
+---------------------------------------------------------------------------------------------------------------------------------------------+
|GRANTALLPRIVILEGESON*.*TOjtsec@192.168.8.123IDENTIFIEDBYPASSWORD*0B4AB716B6BE11F89101577836F3016D8EEAA217WITHGRANTOPTION|
+---------------------------------------------------------------------------------------------------------------------------------------------+
1rowinset(0.00sec)
mysql>selectuser,hostfrommysql.user;
+-------+---------------+
|user|host|
+-------+---------------+
|jtsec|192.168.8.157|
|root|localhost|
+-------+---------------+
2rowsinset(0.00sec)
mysql>



缘故原由2:用户账号存在,但未对其地点的客户真个IP举行近程会见受权同意


反省:
以***ROOT登录后showgrantsforuser@IP;

mysql>showgrantsforroot@192.168.8.123;
ERROR1141(42000):Thereisnosuchgrantdefinedforuserrootonhost192.168.8.123
mysql>


前往信息:ERROR1141(42000):Thereisnosuchgrantdefinedforuserrootonhost192.168.8.123

申明,没有root用户(由于是MySQL超等用户以是扫除此种大概),大概没有对root用户举行在192.168.8.123近程会见的受权。

我们来对照一下看,root用户当地会见的权限,则可查出:
mysql>showgrantsforroot@localhost;
+----------------------------------------------------------------------------------------------------------------------------------------+
|Grantsforroot@localhost|
+----------------------------------------------------------------------------------------------------------------------------------------+
|GRANTALLPRIVILEGESON*.*TOroot@localhostIDENTIFIEDBYPASSWORD*81F5E21E35407D884A6CD4A731AEBFB6AF209E1BWITHGRANTOPTION|
+----------------------------------------------------------------------------------------------------------------------------------------+
1rowinset(0.00sec)


大概间接查询mysql的user用户表selectuser,hostfrommysql.user;,个中纪录了每个用户的权限信息
mysql>selectuser,hostfrommysql.user;
+-------+---------------+
|user|host|
+-------+---------------+
|root|localhost|
+-------+---------------+
1rowsinset(0.00sec)

mysql>
关于user值为root的纪录数只要一条,且host值为localhost,申明root用户只能在当地会见数据库。

处置:举行root用户的近程会见受权,能够受权到指定的客户端IP,也能够受权为一切IP都可会见(host值为%)。

受权为一切IP都利用用户root,暗码root,来近程会见数据库
mysql>GRANTALLPRIVILEGESON*.*TOroot@%IDENTIFIEDBYrootWITHGRANTOPTION;
QueryOK,0rowsaffected(0.00sec)

mysql>flushprivileges;
QueryOK,0rowsaffected(0.00sec)


再次举行受权的查询
mysql>showgrantsforroot@%;
+--------------------------------------------------------------------------------------------------------------------------------+
|Grantsforroot@%|
+--------------------------------------------------------------------------------------------------------------------------------+
|GRANTALLPRIVILEGESON*.*TOroot@%IDENTIFIEDBYPASSWORD*81F5E21E35407D884A6CD4A731AEBFB6AF209E1BWITHGRANTOPTION|
+--------------------------------------------------------------------------------------------------------------------------------+
1rowinset(0.00sec)


再次查询受权表纪录
mysql>selectuser,host,passwordfrommysql.user;
+-------+---------------+-------------------------------------------+
|user|host|password|
+-------+---------------+-------------------------------------------+
|root|localhost|*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B|
|root|%|*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B|
+-------+---------------+-------------------------------------------+
2rowsinset(0.00sec)

mysql>



缘故原由3:用户账号受权会见的暗码不准确

反省:以***ROOT登录后,selectuser,host,passwordfrommysql.user;
mysql>selectuser,host,passwordfrommysql.user;
+-------+---------------+-------------------------------------------+
|user|host|password|
+-------+---------------+-------------------------------------------+
|root|localhost|*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B|
|root|%|*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B|

|jtsec|192.168.8.123||
|jtsec|192.168.8.123|*0B4AB716B6BE11F89101577836F3016D8EEAA217|
+-------+---------------+-------------------------------------------+
4rowsinset(0.00sec)

mysql>
依据查询了局能够看出来,root账户的当地会见和近程会见暗码一样。

而jtse账户在192.168.8.123这个IP上,近程会见数据库的暗码有两个,个中一个为空(第三笔记录)。
也就是说在IP为192.168.8.123的客户机上,利用jtsec这个账户近程会见数据库,正当的暗码有两个能够选择:
一个是不输出暗码(暗码为空),另外一个是*0B4AB716B6BE11F89101577836F3016D8EEAA217(经由加密的),
其他的输出,都是错的。

处置:利用准确的会见暗码举行会见便可。


===================================================================================
毛病信息:ERROR2003(HY000):CantconnecttoMySQLserveron192.168.8.88(10065)
缘故原由:MySQL办事器上防火墙的阻断
反省:在Linux下检察iptables划定规矩,看是不是未对MySQL数据库默许通讯端口3306举行放行

处置:
增加响应的放行划定规矩
本人在/etc/sysconfig/iptables里加了一下代码:
-ARH-Firewall-1-INPUT-mstate--stateNEW-mtcp-ptcp--dport3306-jACCEPT

或实验关失落防火墙
chkconfigip6tablesoff
chkconfigiptablesoff


成绩形貌:
C:DocumentsandSettingsAdministrator>mysql-uroot-h192.168.8.88-proot
ERROR2003(HY000):CantconnecttoMySQLserveron192.168.8.88(10065)

C:DocumentsandSettingsAdministrator>

===================================================================================
毛病信息:ERROR2003(HY000):CantconnecttoMySQLserveronhost***xx(10061)
缘故原由:mysqld数据库办事没有启动。
反省:在windows的义务办理器,大概unix/linux下ps-aux|grepmysql看一下。确认办事已启动。
处置:启动mysqld办事
===================================================================================
毛病信息:ERROR1130:Hostxx.xx.xx.xxisnotallowedtoconnecttothisMySQLserver
缘故原由:mysql办事器没有付与此客户端近程毗连的权限。
反省:在mysql办事器当地查询mysql库里user表对应的host是不是包括客户端呆板的IP(%为不限定IP同意近程毗连)。
处置:修正mysql库下的user表:updateusersethost=%whereuser=XXX;flushprivileges;
===================================================================================
毛病信息:ERROR1045(28000):Accessdeniedforuserusera@localhost(usingpassword:NO)
缘故原由:用户账号并未创立,近程登录时登录指令未间接包括暗码项

反省:以***ROOT登录后,showgrantsforusera@localhost;大概selectuserfrommysql.user;确认用户账号是不是存在。
处置:创立用户账号。
===================================================================================
毛病信息:ERROR2003(HY000):CantconnecttoMySQLserveronhost***xx(10061)
缘故原由:mysqld客户端与办事端端口纷歧致。
反省:在my.ini设置下办事端口这类情形出格是客户都与近程办事器端口纷歧致很简单呈现的成绩
处置:启动mysqld办事
===================================================================================
毛病信息:ERROR2002(HY000):CantconnecttolocalMySQLserverserverthroughsocket/var/lib/mysql/mysql.sock(111)
缘故原由:mysqld的mysql.sock没在响应的地位。
处置:

1.先检察/etc/rc.d/init.d/mysqlstatus看看是不是启动
2.改权限chown-Rmysql:msyql/var/lib/mysql
3.修正/etc/my.cnf(注重:先停数据库)
[mysqld]
datadir=/usr/local/mysql/data
socket=/var/lib/mysql/mysql.sock
[mysql.server]
user=mysql
basedir=/usr/local/mysql
[client]
socker=/var/lib/mysql/mysql.sock
4.启动数据库
===================================================================================


经常使用反省步调。

1.PINGhostname或PING189.xx.xx.xx确认办事器IP层通讯没有成绩。假如PING公例持续(2),PING欠亨则找收集方面专家帮忙。
2.TELNEThostname3306确认办事器TCP层通讯没有成绩。(你的端标语大概不是3306),如公例持续,如欠亨,请反省mysqld是不是已在运转,防火墙屏障了端口。
3.反省用户权限,showgrants...或selectuser,host,passwordfrommysql.user;


===================================================================================
妨碍征象:当地没法mysql-uroot-p用本来的暗码登录,但能够用无暗码,近程必需用原暗码登录
毛病信息:ERROR1045(28000):Accessdeniedforuserroot@localhost(usingpassword:YES)
缘故原由:未知,不晓得是不是mysql的新暗码把持战略
反省:mysql-uroot暗码空登录无问,近程用navicamysql无暗码有成绩,有暗码无成绩
处置:临时先把当地登录的暗码往失落
版本情况:mysqlVer14.14Distrib5.1.56,fordebian-linux-gnu(i486)usingreadline6.2


成绩剖析(lioncode):Start-->
MySQL数据库的用户信息均保留在mysql.user表中,个中包含用户的用户名,暗码,受权的局限(可受权登录的IP、可举行的数据库操纵的范例)等信息,
有需要检察一下该表中关于root用户的相干纪录项,关于上述征象对应的查询了局多是如许的:

出成绩前该表中的数据假如是如许的:
mysql>selectuser,host,passwordfrommysql.user;
+-------+---------------+-------------------------------------------+
|user|host|password|
+-------+---------------+-------------------------------------------+
|root|localhost|*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B|
|root|%|*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B|
+-------+---------------+-------------------------------------------+
2rowsinset(0.00sec)
mysql>




出成绩后该表中的数据多是如许的:
mysql>selectuser,host,passwordfrommysql.user;
+-------+---------------+-------------------------------------------+
|user|host|password|
+-------+---------------+-------------------------------------------+
|root|localhost||
|root|%|*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B|

+-------+---------------+-------------------------------------------+
2rowsinset(0.00sec)
mysql>

第一条数据,注释了,为何在当地没法用本来的暗码登录,但却能够用无暗码登录乐成。
底本,当地登录的暗码和近程登录的暗码是一样的,都为*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B(加密后的),
可是,因为某种缘故原由,当地登录的暗码被清空了,以是用本来的暗码就不克不及登录了。

第二条数据,注释了,为何近程必需用原暗码登录。
root用户当地登录暗码的设定和root用户近程登录暗码的设定,分离是两条分歧的数据,以是当地登录的暗码被改,其实不影响近程登录的暗码。
<--End

==================================================================================

妨碍征象:没法毗连mysqlwindows
毛病信息:ERROR2003(HY000):CantconnecttoMySQLserveronhost***xx(10061)
缘故原由:同时开启大批的tcp端口和而唯一一小局部夭折端口时,当他们处于time_wait时代,mysql大概会跑错端口
反省:在windows默许会开启5000个一时端供词挪用,而他们的性命仅仅是120s,意义是在封闭端口的时分会有120秒的延时
处置:削减不不用要的tcp端口。
修正注册表

==================================================================================

乞助,不晓得人人有一样的情形没有?



LostconnectiiontoMySQLserverduringquery.
依照网上说的***仍没办理,楼主是不是遇见过?


==================================================================================

LostconnectiontoMySQLserveratreadinginitialcommunicationpacket,systemerror:0

甚么成绩??




Author:lioncode
CMP:JTSEC-RD
Date:2012-08-2818:14
Project:jtsec_one-way_dbsync
Version:v1.0.0



如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的好朋友们!
admin 该用户已被删除
沙发
发表于 2015-1-25 22:28:57 | 只看该作者
对Linux命令熟悉后,你可以开始搭建一个小的Linux网络,这是最好的实践方法。Linux是网络的代名词,Linux网络服务功能非常强大,不论是邮件服务器、Web服务器、DNS服务器等都非常完善。
再见西城 该用户已被删除
板凳
发表于 2015-2-4 15:51:54 | 只看该作者
甚至目前许多应用软件都是基于它的。可是没有哪一个系统是十分完美的。
再现理想 该用户已被删除
地板
发表于 2015-2-10 04:16:15 | 只看该作者
我学习Linux的心得体会 ,希望对大家的学习有所帮助,由于水平有限,本文难免有所欠缺,望请指正。
若天明 该用户已被删除
5#
发表于 2015-2-28 21:22:52 | 只看该作者
工具书对于学习者而言是相当重要的。一本错误观念的工具书却会让新手整个误入歧途。目前国内关于Linux的书籍有很多不过精品的不多。
透明 该用户已被删除
6#
发表于 2015-3-10 13:01:36 | 只看该作者
我感觉linux的学习,学习编程~!~!就去学习C语言编程!!
不帅 该用户已被删除
7#
发表于 2015-3-17 12:09:30 | 只看该作者
这也正是有别的OS得以存在的原因,每个系统都有其自身的优点。?
海妖 该用户已被删除
8#
 楼主| 发表于 2015-3-24 13:21:35 | 只看该作者
其实老师让写心得我也没怎么找资料应付,自己想到什么就写些什么,所以不免有些凌乱;很少提到编程,因为那些在实验报告里已经说了,这里再写就多余了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2025-1-23 11:34

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表