网站制作的相关术语西安专业做网站建
news/
2025/9/27 12:25:13/
文章来源:
网站制作的相关术语,西安专业做网站建,企业网站案例欣赏,3建网站连接MySQL数据库时常见故障问题的分析与解决 初学的mysql网友好象经常会碰到mysql无法连接的错误。特开贴收集这样问题的现象和原因。 先自己扔块砖头出来。 归纳如下#xff1a; 故障现象 : 无法连接 mysql 错误信息1 #xff1a;ERROR 1045 (28000): Access deni…
连接MySQL数据库时常见故障问题的分析与解决 初学的mysql网友好象经常会碰到mysql无法连接的错误。特开贴收集这样问题的现象和原因。 先自己扔块砖头出来。 归纳如下 故障现象 : 无法连接 mysql
错误信息1 ERROR 1045 (28000): Access denied for user useralocalhost (using password:YES)错误信息2 ERROR 1045 (28000): Access denied for user useralocalhost (using password:NO) 下面首先分析说明这两种错误信息分别在什么情况下会出现描述使用mysql连接命令或连接工具对远程数据库进行连接时可能会出现以上两种错误信息下面以命令的连接方式进行说明。当使用mysql里连接命令时若带-p参数且指明密码或带-p参数不指明密码但在下一步输入密码时有字符串输入则返回的是“错误信息1”若不带-p参数或带-p参数但在下一步输入密码时不输入任何字符则返回的是“错误信息2”如下所示C:\Documents and Settings\Administratormysql -uroot -h 192.168.8.88 -proot //带-p参数并指明密码 ERROR 1045 (28000): Access denied for user root192.168.8.123 (using password: YES) C:\Documents and Settings\Administratormysql -uroot -h 192.168.8.88 -p //带-p参数在下一步进行密码输入 Enter password: //有字符串输入 ERROR 1045 (28000): Access denied for user root192.168.8.123 (using password: YES) C:\Documents and Settings\Administratormysql -uroot -h 192.168.8.88 //不带-p参数 ERROR 1045 (28000): Access denied for user root192.168.8.123 (using password: NO) C:\Documents and Settings\Administratormysql -uroot -h 192.168.8.88 -p //带-p参数在下一步进行密码输入 Enter password: //无字符串输入 ERROR 1045 (28000): Access denied for user root192.168.8.123 (using password: NO) 上面的对比可总结出一点使用mysql命令进行登录时若有密码输入行为并输入了字符则验证出错后则返回的错误提示中对于 (using password: ?)中?的关键字则返回的是YES若没有密码输入行为或无密码字符输入则返回的是NO。 除上面的实验对比还进行了如下的登录对比操作并记录了他们所返回错误提示类型对上面的总结进行验证 1.使用存在的用户不输入密码 ERROR 1045 (28000): Access denied for user root192.168.8.123 (using password: NO) 2.使用不存在的用户不输入密码 ERROR 1045 (28000): Access denied for user root192.168.8.123 (using password: NO) 3.使用存在的用户且输入密码正确 ERROR 1045 (28000): Access denied for user root192.168.8.123 (using password: YES) 4.使用存在的用户但输入密码不正确 ERROR 1045 (28000): Access denied for user root192.168.8.123 (using password: YES) 5.使用不存在的用户但输入数据库中存在的某一个密码 ERROR 1045 (28000): Access denied for user root192.168.8.123 (using password: YES) 6.使用不存在的用户且输入数据库中不存在的一个密码 ERROR 1045 (28000): Access denied for user root192.168.8.123 (using password: YES) 总结对于 ERROR 1045 (28000): Access denied for userroot192.168.8.123 此类错误返回时 (using password: ?)中?的 关键字是YES还是NO关键不在于用户是否存在密码是否正确它的结果取决于登录时用户对于密码有没有字符串的输入如果没有MySQL数据库验证后若出错返回此类信息则应是 (using password: NO)若用户对密码有字符串的输入返回的则是 (using password: YES)。 下面分析这类 ERROR 1045 (28000): Access denied for useruseralocalhost 错误出现的原因 原因1 : 客户端远程访问的用户账号并未创建 检查 以管理员ROOT登录后show grants for user’IP‘; 或者 select user from mysql.user; 确认用户账号是否存在。 mysql show grants for jtsec192.168.8.123; ERROR 1141 (42000): There is no such grant defined for user jtsec on host 192.168.8.123 mysql 返回信息ERROR 1141 (42000): There is no such grant defined for user jtsec on host 192.168.8.123 说明没有jtsec用户或者没有对jtsec用户进行在192.168.8.123远程访问的授权。 mysql select user,host from mysql.user; ---------------------- | user | host | ---------------------- | root | localhost | ---------------------- 1 rows in set (0.00 sec) mysql 关于user记录数只有一条是root并没有jtsec相关的记录说明没有数据库中没有jtsec这个帐号。 处理 创建用户账号。 mysql grant all privileges on *.* to jtsec192.168.8.123 identified by jtsec with grant option; Query OK, 0 rows affected (0.00 sec) mysql flush privileges; Query OK, 0 rows affected (0.00 sec) mysql show grants for jtsec192.168.8.123; --------------------------------------------------------------------------------------------------------------------------------------------- | Grants for jtsec192.168.8.123 | --------------------------------------------------------------------------------------------------------------------------------------------- | GRANT ALL PRIVILEGES ON *.* TO jtsec192.168.8.123 IDENTIFIED BY PASSWORD *0B4AB716B6BE11F89101577836F3016D8EEAA217 WITH GRANT OPTION | --------------------------------------------------------------------------------------------------------------------------------------------- 1 row in set (0.00 sec) mysql select user,host from mysql.user; ---------------------- | user | host | ---------------------- | jtsec | 192.168.8.157 | | root | localhost | ---------------------- 2 rows in set (0.00 sec) mysql 原因2 : 用户账号存在但未对其所在的客户端的IP进行远程访问授权允许检查 以管理员ROOT登录后 show grants for userIP;mysql show grants for root192.168.8.123; ERROR 1141 (42000): There is no such grant defined for user root on host 192.168.8.123 mysql 返回信息ERROR 1141 (42000): There is no such grant defined for user root on host 192.168.8.123说明没有root用户因为是MySQL超级用户所以排除此种可能或者没有对root用户进行在192.168.8.123远程访问的授权。我们来对比一下看root用户本地访问的权限则可查出mysql show grants for rootlocalhost; ---------------------------------------------------------------------------------------------------------------------------------------- | Grants for rootlocalhost | ---------------------------------------------------------------------------------------------------------------------------------------- | GRANT ALL PRIVILEGES ON *.* TO rootlocalhost IDENTIFIED BY PASSWORD *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B WITH GRANT OPTION | ---------------------------------------------------------------------------------------------------------------------------------------- 1 row in set (0.00 sec)或者直接查询mysql的user用户表select user,host from mysql.user;其中记录了每一个用户的权限信息mysql select user,host from mysql.user; ---------------------- | user | host | ---------------------- | root | localhost | ---------------------- 1 rows in set (0.00 sec)mysql
关于user值为root的记录数只有一条且host值为localhost说明root用户只能在本地访问数据库。 处理 进行root用户的远程访问授权可以授权到指定的客户端IP也可以授权为所有IP都可访问host值为%。
授权为所有IP都使用用户root密码root来远程访问数据库
mysql GRANT ALL PRIVILEGES ON *.* TOroot% IDENTIFIED BY root WITH GRANT OPTION; Query OK, 0 rows affected (0.00 sec)
mysql flush privileges; Query OK, 0 rows affected (0.00 sec) 再次进行授权的查询
mysql show grants for root%; -------------------------------------------------------------------------------------------------------------------------------- | Grants for root% | -------------------------------------------------------------------------------------------------------------------------------- | GRANT ALL PRIVILEGES ON *.* TO root% IDENTIFIED BY PASSWORD *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B WITH GRANT OPTION | -------------------------------------------------------------------------------------------------------------------------------- 1 row in set (0.00 sec)再次查询授权表记录mysql select user,host,password from mysql.user; ----------------------------------------------------------------- | user | host | password | ----------------------------------------------------------------- | root | localhost | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | | root | % | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | ----------------------------------------------------------------- 2 rows in set (0.00 sec)mysql 原因3 : 用户账号授权访问的密码不正确检查 以管理员ROOT登录后 select user,host,password from mysql.user;mysql select user,host,password from mysql.user; ----------------------------------------------------------------- | user | host | password | ----------------------------------------------------------------- | root | localhost | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | | root | % | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | | jtsec | 192.168.8.123 | | | jtsec | 192.168.8.123 | *0B4AB716B6BE11F89101577836F3016D8EEAA217 | ----------------------------------------------------------------- 4 rows in set (0.00 sec)mysql 根据查询结果可以看出来root账户的本地访问和远程访问密码一样。而jtse账户在192.168.8.123这个IP上远程访问数据库的密码有两个其中一个为空第三条记录。也就是说在IP为192.168.8.123的客户机上使用jtsec这个账户远程访问数据库合法的密码有两个可以选择一个是不输入密码密码为空另一个是*0B4AB716B6BE11F89101577836F3016D8EEAA217经过加密的其余的输入都是错的。处理 使用正确的访问密码进行访问即可。错误信息 ERROR 2003 (HY000): Cant connect to MySQL server on 192.168.8.88 (10065)原因 MySQL服务器上防火墙的阻断检查 在Linux下查看iptables规则看是否未对MySQL数据库默认通信端口3306进行放行处理 添加相应的放行规则自己在 /etc/sysconfig/iptables 里加了一下代码 -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT 或尝试关掉防火墙 chkconfig ip6tables off chkconfig iptables off 问题描述C:\Documents and Settings\Administratormysql -uroot -h 192.168.8.88 -proot ERROR 2003 (HY000): Cant connect to MySQL server on 192.168.8.88 (10065)C:\Documents and Settings\Administrator错误信息 ERROR 2003 (HY000): Cant connect to MySQL server on hostxxxxx (10061) 原因 : mysqld数据库服务没有启动。 检查 在windows 的任务管理器或者 unix/linux 下 ps -aux | grep mysql 看一下。确认服务已经启动。 处理 启动mysqld 服务 错误信息 ERROR 1130: Host xx.xx.xx.xx is not allowed to connect to this MySQL server 原因 : mysql服务器没有赋予此客户端远程连接的权限。 检查 在mysql服务器本地查询mysql库里user表对应的host是否包含客户端机器的IP(%为不限制IP允许远程连接)。 处理 修改mysql库下的user表:update user set host % where user XXX;flush privileges; 错误信息 ERROR 1045 (28000): Access denied for user useralocalhost (using password:NO) 原因 : 用户账号并未创建远程登录时登录指令未直接包含密码项检查 以管理员ROOT登录后show grants for useralocalhost; 或者 select user from mysql.user; 确认用户账号是否存在。 处理 创建用户账号。 错误信息 ERROR 2003 (HY000): Cant connect to MySQL server on hostxxxxx (10061) 原因 : mysqld 客户端与服务端端口不一致。 检查 在my.ini 设置下服务端口 这种情况特别是客户都与远程服务器端口不一致 很容易出现的问题 处理 启动mysqld 服务 错误信息 ERROR 2002 (HY000): Cant connect to local MySQL server server through socket /var/lib/mysql/mysql.sock(111) 原因 : mysqld的mysql.sock没在相应的位置。 处理 1.先查看/etc/rc.d/init.d/mysql status 看看是否启动 2.改权限 chown -R mysql:msyql /var/lib/mysql 3.修改/etc/my.cnf 注意先停数据库 [mysqld] datadir/usr/local/mysql/data socket/var/lib/mysql/mysql.sock [mysql.server] usermysql basedir/usr/local/mysql [client] socker/var/lib/mysql/mysql.sock 4.启动数据库 常用检查步骤。 1. PING hostname 或 PING 189.xx.xx.xx 确认服务器IP层通信没有问题。如果PING通则继续(2)PING不通则找网络方面专家协助。 2. TELNET hostname 3306 确认服务器TCP层通信没有问题。(你的端口号可能不是3306),如通则继续,如不通请检查mysqld 是否已经在运行,防火墙屏蔽了端口。 3. 检查用户权限, show grants ... 或 select user,host,password from mysql.user;故障现象 : 本地无法 mysql -u root -p 用原来的密码登录但可以用无密码远程必须用原密码登录 错误信息 ERROR 1045 (28000): Access denied for user rootlocalhost (using password: YES) 原因 : 未知不知道是否mysql的新密码控制策略 检查 mysql -u root 密码空登录无问远程用navica mysql无密码有问题有密码无问题 处理 暂时先把本地登录的密码去掉 版本环境mysql Ver 14.14 Distrib 5.1.56, for debian-linux-gnu (i486) using readline 6.2问题分析lioncodeStart --MySQL数据库的用户信息均保存在mysql.user表中其中包括用户的用户名密码授权的范围可授权登录的IP、可进行的数据库操作的类型等信息有必要查看一下该表中对于root用户的相关记录项对于上述现象对应的查询结果可能是这样的出问题前该表中的数据如果是这样的 mysql select user,host,password from mysql.user; ----------------------------------------------------------------- | user | host | password | ----------------------------------------------------------------- | root | localhost | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | | root | % | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | ----------------------------------------------------------------- 2 rows in set (0.00 sec) mysql 出问题后该表中的数据可能是这样的mysql select user,host,password from mysql.user; ----------------------------------------------------------------- | user | host | password | ----------------------------------------------------------------- | root | localhost | | | root | % | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | ----------------------------------------------------------------- 2 rows in set (0.00 sec) mysql 第一条数据解释了为什么在本地无法用原来的密码登录但却可以用无密码登录成功。 原本本地登录的密码和远程登录的密码是一样的都为*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B 加密后的 但是由于某种原因本地登录的密码被清空了所以用原来的密码就不能登录了。 第二条数据解释了为什么远程必须用原密码登录。 root用户本地登录密码的设定和root用户远程登录密码的设定分别是两条不同的数据所以本地登录的密码被改并不影响远程登录的密码。 -- End 故障现象 : 无法连接 mysql windows 错误信息 ERROR 2003 (HY000): Cant connect to MySQL server on hostxxxxx (10061) 原因 : 同时开启大量的tcp端口和而仅有一小部分短命端口时当他们处于time_wait时期mysql可能会跑错端口 检查 在windows 默认会开启5000个临时端口供调用而他们的生命仅仅是120s意思是在关闭端口的时候会有120秒的延时 处理 减少不不必要的tcp端口。 修改注册表 求助不知道大家有一样的情况没有 Lost connectiion to MySQL server during query. 按照网上说的方法仍没解决,楼主是否碰见过?Lost connection to MySQL server at reading initial communication packet, system error: 0 什么问题 Author: lioncode CMP: JTSEC-RD Date: 2012-08-28 18:14 Project: jtsec_one-way_dbsync Version: v1.0.0
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/919454.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!