搜索
查看: 2492|回复: 3

[Other] 为什么总是要我修改mysql密码?

[复制链接]

634

主题

1182

帖子

4030

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4030
发表于 2017-4-11 10:56:06 | 显示全部楼层 |阅读模式
连接自己的mysql是一件非常麻烦的事情,哪怕你有用户名和密码。
因为我想在自己的电脑上面通过root用户登陆我的mysql服务器,所以找到了教程修改了,edit /etc/mysql/my.cnf 里面的bind-address,本来是127.0.0.1,改成了0.0.0.0,意味着所有ip都能用root访问。
然后去我的msyql里面,运行update user set host='%' where user='root',试图把root的访问权限提高。
我以为这样是可以解决问题的,结果悲催的是,的确我自己电脑可以访问mysql了,但是我的网站本身无法访问mysql了。
也就是说,127.0.0.1就可以登陆,如果是localhost就无法登陆。如果是我的外网IP,又可以登陆。

但是那个localhost报错是:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
这个错误很眼熟,就是密码输错了的时候会报的错误。但是,我可以百分比确认我的密码没问题,因为我只需要换一个host就可以了。
[AppleScript] 纯文本查看 复制代码
mysql -h localhost -u root -p(error)
mysql -h 127.0.0.1 -u root -p(success)
mysql -h 'myIP' -u root -p(success)
mysql -u root -p (error)

当然,我谷歌了那个错误,所有的帖子都是要我去修改密码,让我百思不得其解,因为在我看了,明明是127.0.0.1和localhost的区别呀,我的密码没有错!!!!!!!!!!

理所当然的我就沿着解决127.0.0.1和localhost的区别这条路继续搜索。开始陷入思考困局:localhost失败127.0.0.1却成功?
果然,很快,就搜索到了答案。
当主机填写为localhost时mysql会采用 unix domain socket连接
当主机填写为127.0.0.1时mysql会采用tcp方式连接
这是linux套接字网络的特性,win平台不会有这个问题
连接MySQL数据库有两种方式:TCP/IP(一般理解的端口的那种)和Unix套接字(一般叫socket或者sock)。大部分情况下,可以用localhost代表本机127.0.0.1,但是在MySQL连接时,二者不可混用,而且MySQL中权限设置中localhost与127.0.0.1也是分开设置的。当设置为127.0.0.1时,系统通过TCP/IP方式连接数据库;当设置为localhost时,系统通过socket方式连接数据库。
所以我修改了我的vi /etc/mysql/my.cnf  文件 ,如下:
[mysql]
#no-auto-rehash # faster start of mysql but no tab completition
protocol=tcp
我以为增加了这个,问题就能迎刃而解了。
重启msyql服务:/etc/init.d/mysql restart
发现我们的论坛仍然是无法访问,同样的错误,果然,我想连接mysql,还是localhost就无法登陆!!!

然后继续搜索,这下子更加走入偏门了。有博客说是php配置问题,我其实不大相信的,因为不仅仅是网站本身不能连接mysql,我自己也无法在localhost里面连接mysql。
但还是抱着侥幸心理去修改了vi   /etc/php5/apache2/php.ini
把默认的sock手动修改指定到了,/var/run/mysqld/mysqld.sock,当然,其实人家本身就是这个设置,我纯粹是多此一举。
果然,一点效果都没有。
但是,php的错误提醒了我,我去/var/www/html下面新建了一个php测试网页,如下:
[AppleScript] 纯文本查看 复制代码
<?php

// Show all information, defaults to INFO_ALL
phpinfo();

?>

然后打开,是可以访问的,因为它没有调用mysql,但是让我想起了 phpmyadmin 这个网页工具,我把当年配置好的phpmyadmin 移动到了 /var/www/html下面,这样就可以通过我的域名来访问啦。
里面有登陆选项,输入root的用户名和密码,果然报错了,但是,报错的东西不一样了,我就搜索phpmyadmin #1045 MySQL 服务器的解决方案
http://www.cnblogs.com/wwufengg/ ... ntu-1045-mysql.html
我看他还是要我改密码,我仍然不能理解,为什么我换了一个搜索关键词,最后还是回到了改密码的境地了????
只好再登陆进去mysql,查看我的用户到底是什么鬼:select user,host from mysql.user;
我这时候意识到了,我的root用户好像有点多呀,而我之前运行update user set host='%' where user='root'
这个命令本身有问题,因为where指定不唯一,导致我增加了几个root用户,它们是没有密码的。比如这个user 'root'@'localhost',所以我登陆,它一直报我密码错误。
好吧,问题是解决了,可是我很受伤。
解决方案如下:
update user set password=PASSWORD('yourpassword') where user = 'root';
注意还要输入flush privileges这个命令,否则上面的那个命令不会起作用. 经过这样的操作, 再访问PHPMYADMIN时用新的密码就可以直接访问了;

其实,如果我当初要给root提权,我应该用:grant all privileges on *.* to 'root'@'%' identified by 'root';




本帖子中包含更多资源

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

x



上一篇:mysql实在是太可怕了
下一篇:生信编程直播第11题:把文件内容按照染色体分开写出
你这个问题很复杂,需要打赏,请点击 http://www.bio-info-trainee.com/donate 进行打赏,谢谢
回复

使用道具 举报

3

主题

43

帖子

212

积分

中级会员

Rank: 3Rank: 3

积分
212
发表于 2017-4-11 11:02:12 | 显示全部楼层
顶!!!
回复

使用道具 举报

1

主题

11

帖子

132

积分

注册会员

Rank: 2

积分
132
发表于 2017-4-11 11:15:01 | 显示全部楼层
确实可怕当时我弄blast2go本地数据库时也折腾啦好久
回复 支持 反对

使用道具 举报

5

主题

22

帖子

172

积分

注册会员

Rank: 2

积分
172
发表于 2017-4-11 23:53:50 | 显示全部楼层
%代表从外部任意ip登陆的root,后面两个分别是ipv4和ipv6的本机回环地址。不管是ssh还是mysql,root可以远程登陆这个事情比较危险,可以考虑换个别的用户名给root权限,phpmyadmin暴露在公网的话也是挺危险的东西。。。密码一定要复杂!我们之前有个服务器就被黑了,就是因为root密码太简单(不是我设的,我不背锅),黑进来的人还很机智,只用普通帐号干点坏事,当第二个普通帐号中招的时候我就猜到可能是root被入侵了,赶紧禁了root远程登陆改了复杂密码。安全很重要啊。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|生信技能树 ( 粤ICP备15016384号  

GMT+8, 2019-10-21 09:20 , Processed in 0.033119 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.