RailsのDBを(初めから| |後から)MySQLに変更する

  • 7
    いいね
  • 0
    コメント

はじめに

RailsのdefaultのDBはSQLiteです。✌︎

後から変更する方法

私はrailsアプリを作成して、後からDBをMySQLにしたい!ってことが多かったので
「後kじゃら変更する方法」を先に書きまうす。🐹

gem mysql2インストール

Gemfileに"gem 'mysql2'"を追記

gem 'mysql2'


database.yml
development: のところを以下のように書きます。

image

$ bundle install --without production


bundle showでinstallされたgemfileが確認できます。

新規DB作成

databaseをmysql2に新しく変更したので、新規のdatabaseを作成します。

$ bundle exec rake db:create


モデルを作成します。
(同時にマイグレーションファイルも作成されます。※まだmodel/migrationファイルを作成していなかったら行います)

$ bundle exec rails g model User name:string email:string


マイグレートします。

$ bundle exec rake db:migrate

簡単!
たぶんこれでいけるはず。私はこれでできました。

Sequel-proから見る

Sequel-proを開きます
 ↓
新規作成(+のところ)
 ↓
以下のように書きます。

image

 ↓
接続をテストします
 ↓
「保存」
 ↓
「接続」
 ↓
左上の「データベースを選択…」でdatabase.ymlに記入したdatabase名を選択します
 ↓
完了です!

初めから変更する方法

初めから変更する方法は、ほかにも紹介している記事が何個かあったので、
色々見回って一番良い感じにしてみたです。

まず、rails newでアプリを作成します。

$ rails new アプリケーション名 -d mysql

or

$ rails new アプリケーション名 --database=mysql      //これでデフォルトDBMSがMySQLへ変わる

データベース設定ファイルの「config/database.yml」ファイル

development(開発用)、test(テスト用)、production(本番用)の3つに分かれています。

adapter:   使用するデータベース種類
encoding:  文字コード
reconnect: 再接続するかどうか
database:  データベース名
pool:      コネクションプーリングで使用するコネクションの上限
username:  ユーザー名
password:  パスワード
host:      MySQLが動作しているホスト名

MySQLの場合は特にホスト名、ユーザー名、パスワードの指定が必要です。ユーザー名はデフォルトで「root」になっていますが、データベース作成の権限があるユーザーをあらかじめMySQLに作成しておき、そのユーザー名とパスワードを指定しても結構です。

MySQLのユーザー作成

まずrootユーザーでMySQLにログインします。

mysql -u root -p

これでできなかったら、これで!

mysql -u root

作業ユーザーを作成:ユーザー名とパスワードを指定
「;」を最後につける。

create user 'ユーザー名'@'localhost' identified by 'パスワード1';

複数のユーザーをまとめて追加する場合は、次の書式を使用して下さい。

CREATE USER user1 IDENTIFIED BY [PASSWORD] 'password1', 
  user2 IDENTIFIED BY [PASSWORD] 'password2',
  user3 IDENTIFIED BY [PASSWORD] 'password3', ...;

作成したユーザーの確認は以下のコマンドで確認できます。

mysql> select User,Host from mysql.user;

+-----------+-----------+
| User      | Host      |
+-----------+-----------+
| mysql.sys | localhost |
| rena      | localhost |
| root      | localhost |
+-----------+-----------+
3 rows in set (0.00 sec)

以下のコマンドで作成したユーザーに権限を付与します。
グローバルレベルでALL権限を付与してあります。

mysql> grant all on *.* to '[ユーザー名]'@'localhost';

データベース設定ファイルの「config/database.yml」ファイルの書き換え

「{RailsRoot}/config/database.yml」を開きます。

[アプリのルート]/config/database.yml

# コメント略

development:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: [アプリ名]_development
  pool: 5
  username:設定したユーザー名
  password:設定したパスワード
  host: localhost

test:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: [アプリ名]_test
  pool: 5
  username:設定したユーザー名
  password:設定したパスワード
  host: localhost

production:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: [アプリ名]_production
  pool: 5
  username:設定したユーザー名
  password:設定したパスワード
  host: localhost

development、test、productionの項目をそれぞれ書き換えます。
上で作成した作業ユーザーのユーザー名、パスワードをそれぞれ「username」と「password」の所に書いてください。

ご自身の環境に合わせて「host」を変更し、また必要であれば「database」も変更しておいて下さい。

databaseの名前はデフォルトのままでも大丈夫ですが、必要とあれば書き換えてください。

これでOKのはず

適当にテストしたい方は以下のようにscaffold使って試してみると良いでしょう。

$ rake db:create
$ rails g scaffold home name:string body:text email:string
or なにか作成する
$ rails g model user name:string body:text email:string
$ rake db:migrate

参照