RailsのDBを初めからMySQLにする

##はじめに
RailsのデフォルトのデータベースはSQLiteなので、MySQLに変更しようとしたが、ものすごく時間がかかってしまったので手順を書いておこうと思います。後で書きますが、僕の場合はユーザーに権限を与える所がうまくいっておらず時間がかかってしまいました。

環境
Windows 10
cloud9
##MySQLのダウンロード
自分のPCに[公式サイト](https://dev.mysql.com/downloads/installer/)からMySQLをダウンロードしておいてください。僕のPCはMacではなくWindowsなので、Windows版のインストーラからダウンロードしました。僕の場合、結構時間がかかったので気長に待ちましょう。コマンドプロンプトなどでMySQLに接続できたら大丈夫です。
##アプリを作成
-dオプションでデータベースをMySQLにしています。

```
$ rails new アプリ名 -d mysql
```
##MySQLのユーザー作成
MySQLを起動して、rootユーザーでMySQLにログイン。
rootユーザーはダウンロードしたときに作成したものです。

```
#MySQL起動
$ mysql.server start

#ログイン
$ mysql -u root -p #こっちでログインできなかった
or
$ mysql -u root #これで成功

```
ユーザー作成。ユーザー名とパスワードを書く

```
mysql> CREATE USER 'ユーザー名'@'localhost' IDENTIFIED BY 'パスワード';
```
作成したユーザーに権限を与える。
僕はここでつまずいてました。

```
mysql> GRANT ALL ON *.* to 'ユーザー名'@'localhost';
mysql> exit
```
##データベース設定ファイルの書き換え
アプリのルート/config/database.rbを開く。
僕は、このデータベース設定でやった。

```ruby:アプリのルート/config/database.rb
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
```
---
ただ、こっちの方が見た目きれいだしいいかも

```rb
default: &default
  adapter: mysql2
  encoding: utf8
  pool: 5
  username: 設定したユーザー
  password: 設定したパスワード
  host: localhost
  socket: /tmp/mysql.sock

development:
  <<: *default
  database: アプリ名_development

test:
  <<: *default
  database: アプリ名_test

production:
  <<: *default
  database: アプリ名_production
  # username: Sample
  # password: <%= ENV['Sample_PASSWORD'] %>
```
ちなみに

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

socket: /tmp/mysql.sock (hostが設定されてればいらない？)
port: port番号 (デフォルトは3306, デフォルト以外の番号を使いたければ設定)
charset: 文字コード?？(utf8mb4, encodingがutf8mb4なら一緒に指定しといたほうがいいかも)
collation: 文字コード？ (utf8mb4_general_ci, charsetと同様)

文字コードですが、utf8mb4にしといたほうがよさそう。
```

これで準備が整ったので、データベースを作りましょう

```
$ rails db:create
何か作成したければ
$ rails g model ~~~~~
$ rails db:migrate
```
うまくいったら完了です！！
##エラー対策とMySQLのコマンド
このエラーがめちゃくちゃでてこまりました。database.rbで、reconnect: falseにしてるからかも。
socketファイルが作成されてないのが原因みたいです。

```
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
```

MySQLを再起動するとsocketファイルが作成される。

```
$ sudo /etc/init.d/mysqld restart

#MySQLサーバーを起動してみてもいいかも？
$ mysql.server start
```
作成したユーザーをこのコマンドで確認できる。

```
mysql> SELECT User,Host FROM mysql.user;

# SELECT User,Host FROM mysql.userと;を分けてもできます。
mysql> SELECT User,Host FROM mysql.user
mysql> ;
```

```
# ここから下は自分用メモ
# ユーザー削除
mysql> DROP USER '名前'@'localhost';
# 権限ユーザー確認
mysql> SHOW GRANTS FOR 'ユーザー名'@'サーバー名(localhost)';
```
あとはgem 'mysql2'が入っているか確認。gem 'sqlite3'は必要ないので削除していい。

皆さんのお役に立てれば幸いです。
##参考
[RailsのDBを(初めから| |後から)MySQLに変更する](https://qiita.com/reeenapi/items/9fc38c4f2f8186c78288)