質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

530閲覧

Railsでsqliteからmysqlへの移行ができない

igar

総合スコア110

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2018/07/30 10:47

Rails 5でSQlite3で作っていたアプリを、Mysqlへ移行しようとしたのですが、bundle exec rake db:createMysql2::Error::ConnectionError: Access denied for userエラーが出てしまい先に勧めません。

環境

$ rails -v Rails 5.2.0

やったこと

MysqlのUbuntuへのインストール/スタート

sudo apt-get update sudo apt-get install libmysqld-dev sudo apt-get install mysql-server sudo mysql_secure_installation systemctl status mysql.service sudo /etc/init.d/mysql start

mysqlの新しいユーザーを追加。(rootの挙動がおかしかったので)

mysql> CREATE USER 'user'@'localhost' IDENTIFIED BY 'password';

gemfileへ追記

gem 'mysql2'

gemをインストール

bundle install

\config\database.yml を編集

# SQLite version 3.x # default: &default adapter: sqlite3 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> timeout: 5000 # # development: # <<: *default # database: db/development.sqlite3 # test: <<: *default database: db/test.sqlite3 production: <<: *default database: db/production.sqlite3 development: adapter: mysql2 encoding: utf8 database: aptnote_development pool: 5 username: user password: password host: localhost # socket: /tmp/mysql.sock

これでできるはず…だができませんでした。

$ bundle exec rake db:create Mysql2::Error::ConnectionError: Access denied for user 'user'@'localhost' to database 'aptnote_development': CREATE DATABASE `aptnote_development` DEFAULT CHARACTER SET `utf8` Couldn't create database for {"adapter"=>"mysql2", "encoding"=>"utf8", "database"=>"aptnote_development", "pool"=>5, "username"=>"user", "password"=>"password", "host"=>"localhost"} rake aborted! ActiveRecord::StatementInvalid: Mysql2::Error::ConnectionError: Access denied for user 'user'@'localhost' to database 'aptnote_development': CREATE DATABASE `aptnote_development` DEFAULT CHARACTER SET `utf8` /home/yuis/.rbenv/versions/2.4.2/bin/bundle:23:in `load' /home/yuis/.rbenv/versions/2.4.2/bin/bundle:23:in `<main>' Caused by: Mysql2::Error::ConnectionError: Access denied for user 'user'@'localhost' to database 'aptnote_development' /home/yuis/.rbenv/versions/2.4.2/bin/bundle:23:in `load' /home/yuis/.rbenv/versions/2.4.2/bin/bundle:23:in `<main>' Tasks: TOP => db:create (See full trace by running task with --trace)

ConnectionErrorとあるので、mysqlがそもそも起動していないのかと一瞬思いますが、やはり最初に起動しているわけで。
データベースを作っておかないといけないのかな、とも一瞬思いましたが、たしかRailsはデータベースをdb:createで作ってくれるので、予め同名のデータベースを作成しておく必要はないし、逆に作成してしまっていると既に存在しているとしてエラーが出た気がします。

参考にした記事

railsのapp作成でmysqlを使用する時の導入とハマるところ rake db:createができるまでの流れ    - Qiita
mysql - Rails and Mysql2 Access denied for user 'root'@'localhost' (using password: NO) - Stack Overflow
Mysql2で「Access denied for user 'root'@'localhost'」 - Qiita
Ruby on Rails MYSQL error Access denied for user 'root@localhost' - Stack Overflow
railsのDBをmysqlに変更する。 - Qiita
How To Install MySQL on Ubuntu 16.04 | DigitalOcean
RailsのDBを(初めから| |後から)MySQLに変更する - Qiita

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2018/07/30 11:05

順番としては、「database.yml を編集」→「gemをインストール」ですよね?
igar

2018/08/03 11:15

いえ、逆です。
guest

回答1

0

ベストアンサー

Access denied for user 'user'@'localhost' to database 'aptnote_development'ということなので、権限の問題ですよね。
これは、CREATE USERだけではだめで、GRANT文で権限をつけると良いのではないかと思います。

ローカルの開発環境であればとりあえず全権限を振ってみてもよいでしょう。mysqlのrootから、

mysql> GRANT ALL PRIVILEGES ON *.* TO 'user'@'localhost'

mysql> GRANT ALL PRIVILEGES ON *.* TO 'user'@'localhost' WITH GRANT OPTION;

を実行してみるとどうでしょうか。

mysql> SHOW GRANTS FOR 'user'@'localhost';

で権限を確認できます。

投稿2018/07/30 12:10

takahashim

総合スコア1877

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

igar

2018/08/03 11:17

できました。ありがとうございます。 …ただ、ローカルネットワークの設定に只今躓いております。なかなかうまくいきませんね。 それはまた別の質問で質問させていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問