Railsでsqliteからmysqlへの移行ができない
解決済
回答 1
投稿
- 評価
- クリップ 0
- VIEW 1,912
Rails 5でSQlite3で作っていたアプリを、Mysqlへ移行しようとしたのですが、bundle exec rake db:create
でMysql2::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
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+2
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';
で権限を確認できます。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.10%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
sazi
2018/07/30 20:05
順番としては、「database.yml を編集」→「gemをインストール」ですよね?
igar
2018/08/03 20:15
いえ、逆です。