20201113のMySQLに関する記事は3件です。

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, 170C
database.yml
default: &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: localhost

database.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_profile

sourceコマンドは、設定ファイルの変更を反映させるコマンドとなります。
.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

めでたしめでたし。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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
(略)
end 

3 コンテナ停止&server.pidを削除

$ docker-compose stop
$ rm -f tmp/pids/server.pid

4 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
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【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/Tokyo

CentOSにインストールされているパッケージのアップデート

カーネル等の更新も、もしかしたらあるため、めちゃくちゃ時間かかると思います。

yum update
# -yオプション付けると確認をスキップ

※セキュリティアップデートだけでよい人は以下を実行

yum --security update

最後に

ここまで構築しておけば、調子がよくなければ、LAMP構築の状態のboxから開始できるようになるため、boxファイルを作成することをお勧めします。
(参考)【Vagrant】現在のOSイメージをvagrantのboxとして保存して他のエンジニアに共有する。

以上。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む