Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Mysql ユーザー作成についてメモ。

More than 1 year has passed since last update.

経緯など

Ruby / Rails で作られたとあるアプリをローカル環境で動かそうとした際、rails s するまでに躓いた(そもそもマイグレーションなどがエラー)ので、その時の内容についてメモしておく。

結論を言うと、MySQL内で利用する「テストユーザー情報が存在していない」ことが原因だった。

恥ずかしながらMySQLにユーザーを追加するなど、生まれてこの方やったことがなかったので、先輩に相談して「そのテストユーザー作った?」から解消にこぎつけることができた。

こんな私に優しく教えてくれた先輩には感謝しかない。ざす!

db:migrate を実行するも失敗

色々省略するが、マイグレーションを実行したがエラーが出ていた。なぜdenied されるんだ!と思いながらググりまくっていた。(今思えばtestuser が、denied されている〜というのも納得。。)

$ bundle exec rake db:migrate
ruby/2.6.0 isn't supported by this pry-doc version
rake aborted!
Mysql2::Error: Access denied for user 'testuser'@'localhost' (using password: YES)
〜省略〜

ユーザーの一覧を確認

$ mysql -u root -pPW聞かれたら未入力のままEnter によりMysqlの起動が必要。

mysql> select user, host from mysql.user;

database.yml の記載内容

ちなみにdatabase.yml の設定内容は以下の通り。一部抜粋。

database.yml
  default: &default
  adapter: mysql2
  encoding: utf8
  pool: 5
  username: testuser
  password: testpassword

MySQLのバージョンを確認

これは解消法を進める際に確認した部分だが、ここに記載しておく。

$ mysqld --version
/usr/local/Cellar/mysql/8.0.18/bin/mysqld  Ver 8.0.18 for osx10.14 on x86_64 (Homebrew)

解消法

ユーザーを追加するべし

今回、DBへの接続がdenied されている原因は「ユーザーが作成されていないこと」だったので、ユーザーを追加することで解消できた。

ただし、MySQLのバージョンによって操作するコマンドが若干異なるようなのでメモる。
$ mysql -u root -pPW聞かれたら未入力のままEnter によりMysqlの起動が必要。

MySQL5.7 まで

# ユーザーの作成
mysql> create user 'testuser'@'localhost' identified by 'testpassword';

# 権限の付与(ユーザー作成も兼ねているので、create user は省略可能)
mysql> grant all on *.* to 'testuser'@'localhost' identified by 'testpassword';
  • all:権限付与以外、全ての操作を許可する。
  • *.*:全DBへのアクセスを許可する。([適用対象のデータベース].[適用対象のテーブル])
  • 'ユーザ名'@'ホスト名':左記項目の指定。ホスト名の代わりにIPアドレスやlocalhost も指定可能。
  • identified by 'パスワード':任意のパスワードを設定。

MySQL8.0 以降

# ユーザーの作成
mysql> create user 'testuser'@'localhost' identified by 'testpassword';

# 権限の付与
mysql> grant all on *.* to 'testuser'@'localhost';

権限の付与を行う際、末尾に「with grant option」をつけることでGRANT権限(何でも出来る権限)を付与し、他のユーザに対して権限を付与することが可能となる。通常これは管理者用ユーザーにしか付与しない。

改めてmigrate (create)

$ bundle exec rake db:migrate
ruby/2.6.0 isn't supported by this pry-doc version
rake aborted!
ActiveRecord::NoDatabaseError: Unknown database 'es_development'
〜省略〜

実行してみたが、「DB無いよ」という事態に。(恥ずい。)

db:create をやってからmigrate 実行。

$ bundle exec rake db:create
Created database 'es_development'
Created database 'es_test'
〜省略〜

→create 完了。

$ bundle exec rake db:migrate
ruby/2.6.0 isn't supported by this pry-doc version
== 2018XXXXXXXXX CreateConstracts: migrating =================================
〜省略〜
== 2018XXXXXXXXX CreateConstracts: migrated (0.1449s) ========================

→migrate 完了。

その他エラーの解消

この状態でrails sしてみたものの、ここまで華麗にスルーしてきた下記エラーメッセージが表示されている状況。

ruby/2.6.0 isn't supported by this pry-doc version
〜省略〜
/home/money/.anyenv/envs/rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/puma-3.11.3/lib/puma/launcher.rb:130:in `initialize': No such file or directory @ rb_sysopen - /home/money/rails_projects/es_sample/tmp/pids/es_sample.pid (Errno::ENOENT)

※これについては先輩からのアドバイスにより、下記ファイルを修正することで解消できた。

config/puma.rb
pidfile "#{_home}/rails_projects/#{_proj_name}/tmp/pids/#{_proj_name}.pid" #修正前
pidfile "#{_home}/Desktop/rails_projects/#{_proj_name}/tmp/pids/#{_proj_name}.pid" #修正後

→該当ファイルを格納しているフォルダのパスに合わせて修正。

rails s

→起動できた。

おまけ

関連コマンドのメモ。

特定ユーザーの権限を確認

mysql> show grants for 'ユーザ名'@'ホスト名';
SAYJOY
学びをアウトプット。AWS, Terraform, Ruby このあたりがメインになるかと。Twitter はこちら→@gringriffin
https://sayjoyblog.com/
Why not register and get more from Qiita?
  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