RailsでデフォルトのDB'SQlite'から'mysql'(ver8.0.22)に変更する際に詰まったので、
mysqlインストールから実際にDB作成をするところまでの手順をメモ。
1.mysqlインストーラでmysqlをインストール。
http://dev.mysql.com/downloads/installer/
からインストーラをダウンロード。
2.ダウンロードしたインストーラを起動。
あとは流れに沿ってインストールしていく。(rootのパスワード設定等。)
そして、この流れの中で後にRailsからmysqlを起動しようとするとErrorになってしまう設定項目があった。それがこの設定。
ここで上の認証方式を選択してしまうと、認証方式が'caching_sha2_password'になるが、Railsではこの認証方式に対応していないらしい。(この認証方式はmysql8で使用可能。)
なので、下の設定を選択して認証方式を'mysql_native_password'にする必要があった。
3.gemファイルでmysqlをinstall。
# Use mysql as the database for Active Record
gem "mysql2"
bundel install
4.railsアプリケーションのDB設定
default: &default
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password:
host: localhost
timeout: 5000
development:
adapter: mysql2
encoding: utf8
reconnect: false
database: <%= ENV['DATABASE_DEV_NAME'] %>
pool: 5
username: <%= ENV['DATABASE_DEV_USER'] %>
password: <%= ENV['DATABASE_DEV_PASSWORD'] %>
host: <%= ENV['DATABASE_DEV_HOST'] %>
# 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:
adapter: mysql2
encoding: utf8
reconnect: false
database: アプリケーション名_test
pool: 5
username: root
password: <%= ENV['DATABASE_TST_PASSWORD'] %>
host: localhost
production:
adapter: mysql2
encoding: utf8
reconnect: false
database: アプリケーション名_production
pool: 5
username: アプリケーション名
password: <%= ENV['アプリケーション名_DATABASE_PASSWORD'] %>
host: localhost
のように変更。
5.パスワードを環境変数で管理する。
dotenvというgemをinstall。
gem "dotenv-rails"
bundle install
アプリケーションのルートディレクトリに.envファイルを作成し、その中に環境変数を設定する。
DATABASE_DEV_NAME = 'アプリケーション名_development'
DATABASE_DEV_PASSWORD = 'パスワードを記入'
DATABASE_DEV_USER = 'MySQLユーザー名を記入'
DATABASE_DEV_HOST = 'localhost'
DATABASE_TST_PASSWORD = 'パスワードを記入'
.gitignoreファイルに.envを追加する。
# Ignore env config
/.env
※mysqlユーザを作成しておく。
ここで
rails db:create
完了。
※mysqlユーザを作成する。
1.mysqlに接続する。
コマンドプロンプトを管理者権限で開き、以下を実行する。
net start mysql80
mysql -u root -p
mysqlインストール時に設定したパスワードを入力。
2.実際にmysqlユーザを作成する。
mysql> create user 'test-user'@'localhost' identified by 'password';
3.mysqlユーザに権限を与える。
mysql> grant all on *.* to 'test-user'@'localhost';