RailsのDBをsqliteからmysqlに変更する

OS

vagrant@vagrant:~$ cat /etc/os-release
NAME="Ubuntu"
VERSION="16.04.6 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.6 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
VERSION_CODENAME=xenial
UBUNTU_CODENAME=xenial

作業

Gemfile 修正

gem 'sqlite3', '~> 1.3.6' # 削除
gem 'mysql2', '>= 0.4.4', '< 0.6.0' # 追加

config/database.yml の修正(修正行数多いからdiffだけ

~/p/v/g/d/gurumyu ❯❯❯ git diff config/database.yml
diff --git a/config/database.yml b/config/database.yml
index 1c1a37c..7e3ad2d 100644
--- a/config/database.yml
+++ b/config/database.yml
@@ -1,25 +1,35 @@
-# SQLite version 3.x
-#   gem install sqlite3
+# MySQL. Versions 5.1.10 and up are supported.
#
-#   Ensure the SQLite 3 gem is defined in your Gemfile
-#   gem 'sqlite3'
+# Install the MySQL driver
+#   gem install mysql2
+#
+# Ensure the MySQL gem is defined in your Gemfile
+#   gem 'mysql2'
+#
+# And be sure to use new-style password hashing:
+#   https://dev.mysql.com/doc/refman/5.7/en/password-hashing.html
#
default: &default
-  adapter: sqlite3
-  pool: 5
-  timeout: 5000
+  adapter: mysql2
+  encoding: utf8
+  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
+  username: root
+  password:
+  socket: /var/run/mysqld/mysqld.sock

development:
  <<: *default
-  database: db/development.sqlite3
+  database: [データベース名]_development

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  <<: *default
-  database: db/test.sqlite3
+  database: [データベース名]_test

production:
  <<: *default
-  database: db/production.sqlite3
+  database: [データベース名]
+  username: [ユーザー名]
+  password: <%= ENV['GAMBARASE_DATABASE_PASSWORD'] %>

mysql server / client のインストール

$ sudo apt-get install mysql-server mysql-client libmysqlclient-dev

sudo 無しでログインできない場合、mysql client内でこれ

$ sudo mysql -u root
mysql> USE mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

mysql>

railsコマンドでデータベース/テーブル作成

$ rake db:create
$ rails db:migrate

経緯

チュートリアルな感じで作ってたrails アプリを公開を目指して作り変えたいなってことでsqliteからmysqlに変更したくなったというお話。サービス公開を目指すってだけで色々変わってきて面倒だなあと

最後に

この手順内容で詰まった。。。って方がいたらコメントなどで教えて下さい。加筆等検討します。