248
250

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2016-12-26

はじめに

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

後から変更する方法

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

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

参照

248
250
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
248
250

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?