我想把之前用 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)
sudo rake db:create
或者试一试登陆 mysql,create database。 然后再使用 rake db:migrate 来更新数据库 schema
首先你看下 select user, host from mysql.user 看下 root 所对应的 host 是不是正确的; 然后看下 my.cnf 文件中是否有 bind-address 设置
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 中只是为了不暴露你的密码,所以你替换了,但是你本地的文件中肯定不是这个吧,需要确定一下!
#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】
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 安装的都是这样的。
$ msyql -u root
#先不使用密码进入 mysql
> GRANT ALL PRIVILEGES ON *.* TO 'LOCALHOST'@'ROOT' IDENTIFIED BY 'PASSWORD';
#给 mysql 重新设置 root 密码,把 PASSWORD 改为你想设定的密码即可
> exit
#这样就 OK 了
我也遇到了,百思不解……
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同样的问题,结果也不是