新手问题 Access denied for user 'root'@'localhost' (using password: YES)

xxw · 2012年11月19日 · 最后由 xxw 回复于 2013年11月15日 · 57772 次阅读

我想把之前用 sqlite 的 rails 项目改为 mysql, 之前安装好 mysql 环境,access 都是正确的,密码输入正确的。修改过 rails 的 database.yml 文件(如下), database.yml 中:

development:
  adapter: mysql2
  database: peck_development
  username: root
  password: ******
  pool: 5
  host: localhost
  encoding: utf8
  timeout: 5000

通过在 ubuntu 从完全删除 mysql 后,重新安装,mysql 正常。通过几次试验发现:

$ mysql -u root -p 

输入密码,正常进入 只要运行 rake db:create 后, 出现

rake aborted!Access denied for user 'root'@'localhost' (using password: YES)。 
$ mysql -u root -p

输入密码,即出现:

Access denied for user 'root'@'localhost' (using password: YES)
  • rails: 3.2.1
  • ruby: 1.9

sudo rake db:create

或者试一试登陆 mysql,create database。 然后再使用 rake db:migrate 来更新数据库 schema

database.yml 中 mysql2 密码貌似要用"******"

我搞不清楚,用mysql -u -p你现在能不能正常进入?确定你用的密码是正确的么?用rails db能否进入?

#2 楼 @diudiutang 我也遇到过这样的问题。采用的解决方案是 用 brew 重装 mysql

首先你看下 select user, host from mysql.user 看下 root 所对应的 host 是不是正确的; 然后看下 my.cnf 文件中是否有 bind-address 设置

除了要配置development的帐号密码,还要配置test的帐号密码 因为rake db:create也要创建test环境的数据库

不知道是不是这个问题

mysql -u root -p

输入这个进入不了说明密码已经改动了,这个问题刚开始学 Rails 的时候也遇到过,不过好像就遇到过一次,重置下密码就可以了

ps -ef | grep -v grep | grep  mysql | awk '{print $2}' | xargs kill -9
mysqld_safe --skip-grant-tables &
mysql -uroot -p
update user set password=password('123456') where user = 'root';

写 database.yaml 的时候最好把三个环境的密码都添上

******这个不是密码吧,在你的 database.yml 中不应该是这个样子的吧,你的 topic 中只是为了不暴露你的密码,所以你替换了,但是你本地的文件中肯定不是这个吧,需要确定一下!

#3 楼 @xxw #9 楼 @woaigithub 密码不是******,在 yml 中是明文的。

#6 楼 @zhuf 不知道为何,我的 user 里面有那么多的 root,还有空的用户??

#11 楼 @xxw 还有就是 我又重新安了一次,安装时输入的密码是 wil_xin , 一切正常,运行 rake db:create 后,提示输入密码,之后正常了。但是我运行 rake db:migrate 显示:rake aborted! Access denied for user 'root'@'localhost' (using password: YES) Tasks: TOP => db:migrate 我再运行:mysql -u root -p 然后,输入 wil_xin,就又 Access denied for user 'root'@'localhost' (using password: YES) ,但我不输入密码,就能正确进入。难道我的密码在 rake db:migrate 之后被改变了? 运行 rake db:migrate 也是对 mysql 数据库进行操作的,需要输入 mysql 密码之类的东西吗?rake db:create 命令后有提示密码,rake db:migrate 后就直接显示 Access denied for user 'root'@'localhost' ,困惑。 【我卸载重安后,mysql 的用户信息都没有改变的,还是那 7 个 user】

#7 楼 @cxh116 我的 test 里面一个密码填错了,修改后还是没有解决。还是感谢。 能解释一下这些数据库的用处吗,peck_development 和 peck_test 是我的项目的,我晓得,test 貌似是我建的,那其它三个是干嘛的?

#4 楼 @qisine 不输入密码直接回车可以进入

#13 楼 @xxw

information_schema, mysql, test, performance_schema 这些是 mysq 自带的,非 rails 生成的

另外 mysql,是用 user name 加 host 来标识一个用户的唯一

user:root host:127.0.0.1
user:root host:localhost

从用户名你以为它是同一个用户,事实上它却是两个用户,可以设置不同的密码 所以注意看 database.yml 的 host 与 username 都对了没有

mysql -hlocalhost -uroot -p 可以用上面命令测试你的 host 与 username 配置是不是正确的,记得-h后面的参数与你的 database.yml 配置文件一样

#11 楼 @xxw 1.空的 user 是为了操作系统命令里直接输入 mysql 就可以进入了的,那样进入的话,show databases 看不到一些类似 mysql 的数据库的,因此可以 delete 掉的; 2.那么多的 root 账户是为了检验 root 用户是以何种方式进入的,你可以改成 update mysql.user set host='%' where user='root',然后 flush privileges;这样后你再去看看 rake db:migrate 是否可以用。

其实你的问题不是 rake 的问题,是 mysql 的用户验证的问题,貌似 ubuntu 用 apt-get 安装的都是这样的。

test 是 mysql 安装之后建立的,供你测试用,建议删除。 mysql 中存放 mysql 的信息,例如用户等等。

#12 楼 @xxw 由于刚刚我在 mysql -u root -p 后没有输入密码回车成功进入数据库,所以我在 database.yml 文件中,把我的 root 的密码改为空(之前设置的是我 mysql 的安装密码),结果 rake db:migrate 正确了,不知道这些 root 帐号之接是什么关系?database.yml 的 password 应该设置为什么的密码

dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P 可以详细分析一下这个 linux 命令吗?

我也有这样的问题。

#20 楼 @Star 我的刚刚搞定了,rails3 已经链接到 mysql。搞了两天,晕

#16 楼 @zhuf 是我的 database.yml 文件的密码有问题,我改为空,就好了。之前设的是 mysql 的安装密码。

#22 楼 @xxw 晕。。。话说 lz 是妹子?

#23 楼 @zhuf 是的,hello

#24 楼 @xxw 呃,好难的啊。东南大学的?

#25 楼 @zhuf 是的,东南大学。佩服。你是哪里人...

#26 楼 @xxw 呃,在杭州上班的。

#27 楼 @zhuf 是搞编程的吧

#29 楼 @zhuf 好高级的样子,我才在读本科...

#30 楼 @xxw 呃,就是搞 mysql 的。。。其实我也刚本科毕业。

#31 楼 @zhuf 是计算机专业的?有涉及 sphinx 吗

#32 楼 @xxw 恩。sphinx 没接触过

#33 楼 @zhuf 很佩服计算机专业的人。

#34 楼 @xxw 晕,难道你不是?

#35 楼 @zhuf 我是生物医学工程的。^_^

#36 楼 @xxw 哦,怪不得看你 github 里都是生物信息学的东西。话说我原来读书的时候搞过蛋白质那些的数据挖掘

#37 楼 @zhuf 哇,这么难得,难得碰到搞过生物信息的,好巧。有空多指教啊。。

#38 楼 @xxw 呃,我只是毕设的时候写了这个方面的东西而已。。

#39 楼 @zhuf 依然好巧 ^_^

#40 楼 @xxw 呃,明早还得上班的,睡了。有空聊。

#41 楼 @zhuf 好的 晚安

@xxw @zhuf 你俩把这当成聊天室啦,呵呵

#43 楼 @Star 偶然遇见,寒暄一下

匿名 #45 2012年11月25日

$ msyql -u root #先不使用密码进入 mysql > GRANT ALL PRIVILEGES ON *.* TO 'LOCALHOST'@'ROOT' IDENTIFIED BY 'PASSWORD'; #给 mysql 重新设置 root 密码,把 PASSWORD 改为你想设定的密码即可 > exit #这样就 OK 了

#7 楼 @cxh116 rake db:create 建立 development 和 test。那 production 数据库是何时建立的?

#46 楼 @xxw 这个得问一下你自己了, 比如运行了 rake db:create:allRAILS_ENV=production rake db:create 都有可能建 production 数据库

我也遇到了,百思不解…… mysql -u root -p可以登录,mysql -u terry -p就说 Access denied for user 'terry'@'%' 我确认了又确认,确实是grant all privileges on xxx_development.* to terry@'%' identified by 'password';过了,但就是登录不上 以为是这位仁兄http://zfj-rails.iteye.com/blog/1051434同样的问题,结果也不是

@xxw 在不在啊,重装 mysql 时遇到这样的问题了,求解决啊 ~ QQ:598550390 在线了联系一下我,谢谢。

#49 楼 @li598550390 e 刚看到,解决了吧

需要 登录 后方可回复, 如果你还没有账号请 注册新账号