- 投稿日:2020-11-13T21:51:05+09:00
Mysql2::Error::ConnectionError: Access denied for user 'root'@'localhost' (using password: YES)への対処
記事の目的
rails db:migrateやrails sをするも以下のようなエラーが出て、解決に時間がかかってしまいました?
必要な経過だけ記事で共有させて頂き、誰かのお役に立てれば幸いです。Mysql2::Error::ConnectionError: Access denied for user 'root'@'localhost' (using password: YES)Mysql2::Error::ConnectionError: Access denied for user 'root'@'localhost' (using password: YES)はどういう時にエラーが出る?(結論:rootユーザのパスワードが正しくない)[現状把握①]
このエラーが何なのかしっかり言及している記事が見当たらなかったのですが、公式のリファレンスや英文の記事で把握できました。(using password: NOの場合の記事は多くあった気がする。。)
公式リファレンス(以下URL参照)には、「誤ったroot パスワードを使用していることを示しています。」と書かれている。
また、英文の記事(以下URL参照)には、「rootユーザがデータベースにアクセスするのに十分な権限を持っていない」「rootユーザのパスワードが正しくない」「rootユーザのパスワードが設定されていない」「rootユーザが十分な権限を持っていない」のいずれかと書かれています。私の場合のエラーの原因の結論としては、
両方で言及されている「rootユーザのパスワードが正しくない」のが正解でした。MySQLリファレンスマニュアル:https://dev.mysql.com/doc/refman/5.6/ja/access-denied.html
英文のページ:https://www.yawintutor.com/access-denied-for-user-root-localhost/
(調べたら、インドのプログラミングスクールの記事みたいです。会社の要求スキルと求職者のギャップを埋める為に運営してるそう。笑)rootユーザのパスワードが正しくないのかを確認する[現状把握②]
MySQLのrootユーザーのパスワードの確認の為に、どのパスワードでログインできるかを確認します。
自身は、bash.profileに記載したパスワードをMySQLにおいても設定していると思いこんでいた為、確認しておらず時間がかかってしまいました。(ここで、パスワードが正しくないことに気づく。。)$ mysql -u root -p Enter password: ←(bash.profile記載のパスワードを入力するも入れない、、) ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)空欄を入れてみると、ログインできたのでrootユーザーのパスワードは「空欄」であることの確認がとれました。
$ mysql -u root -p Enter password: ←(パスワードを空欄にすると入れた!) Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 16 Server version: 5.7.32 Homebrew解決策(結論:MySQLのパスワードとbash.profile記載のパスワードを一致させる)
database.ymlは、データベースと接続する為の設定ファイルです。
ここに書かれているユーザ名とパスワードを利用してRailsからMySQLにアクセスしますので、ここをMySQLのパスワードと合わせます。
私の場合は、bash.profileに環境変数を定義して、database.ymlにて環境変数の呼出をすることでdatabase.ymlへのユーザ名とパスワードの直書きを避けていました。bash.profileに間違って定義しているパスワードを削除し、MySQLに設定されているパスワードを記載します。(今回は空欄)。viコマンドでファイルを開き、インサートモード(i入力)にして編集して保存(:wq)します。
$ vi ~/.bash_profile (viコマンドで表示される画面↓) export PATH="~/.rbenv/bin:$PATH" eval "$(rbenv init -)" alias =ls export DB_USERNAME="root" export DB_PASSWORD="" (←空欄に変更) ~ "~/.bash_profile" [readonly] 5L, 170Cdatabase.ymldefault: &default adapter: mysql2 encoding: utf8mb4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: <%= ENV["DB_USERNAME"] %>(←ここでbash.profileで定義してる環境変数を呼出している) password: <%= ENV["DB_PASSWORD"] %>(←ここでbash.profileで定義してる環境変数を呼出している) host: localhostdatabase.ymlに直にユーザ名とパスワードを書かれている方は、セキュリティ上よくないので
以下の記事でbash_profileに記述する方法、.envファイルに記述する方法が書かれているので、そちらに記載するといいかもしれません。環境ごとで異なる環境変数を持ちたいときは.envへの記述をするようですね。https://qiita.com/yuichir43705457/items/7cfcae6546876086b849
これで、MySQLのユーザ名とパスワードとdatabase.ymlに記載しているユーザ名とパスワードが一致している状態となりました。
rails db:migrate及びrails sを再度実行してみます。(エラーは出ないはず、、、)rails db:migarate及びrails sを再度実行
実行する前に!!こちら忘れないで下さい。
以下のコマンドをせず、再度エラーが出てしまい「パスワードが違う以外の原因なのか??」と無駄に色々調べてしまいました。$ source ~/.bash_profilesourceコマンドは、設定ファイルの変更を反映させるコマンドとなります。
.bash_profileの変更を反映していなかったから、引き続きエラーが出たのですね。
最後、実行します。rails db:migrateを実行...できました!!
$ rails db:migrate == 20201113061351 AddConfirmableToDevise: migrating =========================== -- add_column(:users, :confirmation_token, :string) -> 0.0814s -- add_column(:users, :confirmed_at, :datetime) -> 0.0514s -- add_column(:users, :confirmation_sent_at, :datetime) -> 0.0503s -- add_column(:users, :unconfirmed_email, :string) -> 0.0457s == 20201113061351 AddConfirmableToDevise: migrated (0.2292s) ==================rails sも実行...できました!!
$ rails s => Booting Puma => Rails 6.0.3.3 application starting in development => Run `rails server --help` for more startup options Puma starting in single mode... * Version 4.3.6 (ruby 2.6.3-p62), codename: Mysterious Traveller * Min threads: 5, max threads: 5 * Environment: development * Listening on tcp://127.0.0.1:3000 * Listening on tcp://[::1]:3000 Use Ctrl-C to stopめでたしめでたし。
- 投稿日:2020-11-13T14:14:03+09:00
Dockerでherokuにデプロイ(Rails6、MySQL)
1 前提条件
1 クレジットカード登録済みのherokuアカウント
2 docker環境で作成したRailsアプリ(credentials:editを編集する場合はDockerfileにRUN apt-get install -y vimを追加) *こちらの記事を参考https://qiita.com/croquette0212/items/44378e01de18f62d01df
3 heroku cliインストール済み2 config/environments/development.rbに下記を記載
Rails.application.confiture do (略) config.hosts.clear (略) end3 コンテナ停止&server.pidを削除
$ docker-compose stop $ rm -f tmp/pids/server.pid4 heroku準備
$ cd ディレクトリ名 $ heroku login --interactive $ heroku container:login $ heroku create アプリ名5 herokuのデータベース設定をMySQLに変更
$ heroku addons:add cleardb $ heroku config:set DATABASE_URL=`heroku config:get CLEARDB_DATABASE_URL | sed -- s/mysql/mysql2/`6 herokuにデプロイ
*heroku container:release webの前にheroku run rails db:migrateをするとbash: rails: command not foundのエラーが出ることがあるようです。
$ heroku container:push web $ heroku container:release web $ heroku run rails db:migrate $ heroku open
- 投稿日:2020-11-13T12:12:02+09:00
【Vagrant】VagrantでLAMP開発環境を整える(centos+apache+MySQL+PHP)
自分用のメモとして残します。
やり方
1.VagrantのBoxダウンロード~mysql、apache、phpインストール
いろいろ探しましたが、Masaki Yamadaさんのスタッフブログに投稿されたものが一番わかりやすく且つ丁寧で、初心者でも構築しやすいと思います。
(外部サイト)VirtualBox + Vagrantで「CentOS7 + LAMP環境」を構築する
手順通りであれば http://192.168.33.10/phpmyadmin にアクセスしてPHPMyAdminが表示されれば、ひとまずLAMP環境がきちんと構築できています。
尚デフォルトドキュメントルートは/var/www/html
になっています。尚、CentOSのタイムゾーン、mysqlのmy.cnf調整等は必要なので、後述で調整の仕方を説明します。
2.調整等
ホストOS側調整
ゲストOSマシンのスペックを指定
お好みではありますが、Vagrantファイルに下記を追記してゲストOSのスペックを調整しましょう。
Vagrantファイル#※追記するのは`Vagrant.configure("2") do |config|`の内側です。 config.vm.provider "virtualbox" do |vb| vb.cpus = 2 vb.memory = 2048 vb.gui = true end
vb.gui = true
はゲストOSの画面を表示するオプションです。
私だけかもしれませんが、たまにvagrant upに失敗するため、GUIを表示させないと問題の切り分けや、ゲストOS側での調査もできないので、個人的には設定するのをおすすめします!ゲストOS側(CentOS側)調整
以降の作業をする前にとりあえず、rootに切り替える。
sudo su - #rootに切り替わり、カレントディレクトりが/rootになるMySQLのMy.cnfを調整してマルチバイト対応
下記の記事を参考に調整。
(参考記事)mysqlで日本語を扱えるようにするCentOSのタイムゾーンを日本に設定
timedatectl set-timezone Asia/TokyoCentOSにインストールされているパッケージのアップデート
カーネル等の更新も、もしかしたらあるため、めちゃくちゃ時間かかると思います。
yum update # -yオプション付けると確認をスキップ
※セキュリティアップデートだけでよい人は以下を実行
yum --security update
最後に
ここまで構築しておけば、調子がよくなければ、LAMP構築の状態のboxから開始できるようになるため、boxファイルを作成することをお勧めします。
(参考)【Vagrant】現在のOSイメージをvagrantのboxとして保存して他のエンジニアに共有する。以上。