Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

はじめに

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

参照

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away