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

# はじめに
RailsのdefaultのDBはSQLiteです。✌︎

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


## gem mysql2インストール

Gemfileに"gem 'mysql2'"を追記

```
gem 'mysql2'
```

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

![image](https://qiita-image-store.s3.amazonaws.com/0/135475/8542c077-792c-fb58-2130-59498424929f.png)
↓

```
$ 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](https://qiita-image-store.s3.amazonaws.com/0/135475/c00dfc4b-c989-ae70-47a5-1350e108287e.png)

　↓
接続をテストします
　↓
「保存」
　↓
「接続」
　↓
左上の「データベースを選択…」で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 'パスワード１';
```

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

```
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
```


## 参照
- http://qiita.com/itkrt2y/items/4ea5bfe90ca65e4a9ebd
- http://www.rubylife.jp/rails/model/index2.html
- http://qiita.com/pchatsu/items/a7f53da2e57ae4aca065