はじめに
会社でMySQLを使用する業務を行うことになりました。
ProgateのSQLコースを修了しただけの低レベルの僕に合わせて、
上司がMySQLの基礎を固めるための簡単なトレーニングメニューを組んで下さいました。
簡単そうだからすぐに終わらせようと思っていたのに、最初の段階でちょっと躓いて、一週間以上かかってしまいました。
今後同じ道を辿る初心者を生み出さないために、注意点をまとめました。
Google先生が教えてくれる既存の資料は、Homebrewを使用する方法だとか、
MySQL5.6 や 5.7 のやり方のものがほとんどです。
この記事では、現時点での最新版 MySQL8.0 でのやり方を記録しています。
記事のターゲット
下記のようなキーワードでGoogle検索している方に、ぜひこの記事を見つけてほしいです。
「MySQL 接続できない」
「the server quit without updating pid file
」
「No such file or directory
」
「Access denided for user
」
「server command not found
」
「Authentication plugin 'caching_sha2_password' cannot be loaded
」
今回の目的
上司から頂いたトレーニングメニューは以下です。
参考資料:MySQL5.6リファレンスマニュアル(日本語版) をもとに、
- ローカル環境もしくは仮想環境を用意してMySQLをインストールする。
- 起動したMySQLへクライアントツール(なんでもよし)で接続する。
- リファレンスマニュアル実施(3.3 データベースの作成と使用 )
- リファレンスマニュアル実施(3.6 一般的なクエリーの例 )
上記ミッションのうち、 1~2 を遂行する際に少し躓いたため、これを遂行する際の注意点をここにまとめています。
※ MySQLはローカル環境にインストールします。
※ MySQLは最新版の8.0をインストールします。
※ MySQL8.0の資料は英語表記のため、唯一日本語資料が用意されているMySQL5.6のマニュアルを参考に進めております。
結論
申し訳有りません。
Sequel PROで接続できた段階で、舞い上がってこんな記事を作成してしまいましたが、
Sequel PRO上で操作しようとすると必ずエラーがでて進まなくなってしまいました。
そこで再度調べた所、認証方式がどうこうではなく、そもそもSequel PROはMySQL8.0に非対応とのことで、どうあがこうと無理という結論に達しました。
僕がこの結論にたどり着くまでの苦労の軌跡を残すため、この記事は削除せずに置いておくことにします。
どうか、おなじく無駄な時間を過ごす初心者が1人でも減ってくれますように…。
おわり。
【要点】 クライアントツールの選定
さて、今回の重要ポイントを先に説明させていただきます。
今回、クライアントツールはなんでもよいというミッションだったので、評判の良いSequel PROを選択しているのですが、ここが最大のワナなのでした。
なんとSequelPROは、MySQLが採用している最新のログイン認証方式(caching_sha2_password)に非対応だったのです。
以下の記録は、そのことを頭に入れてから読み進めてください。
ローカル環境にMySQLをインストールする。
注意点:
接続に躓いてGoogle検索してみると、Homebrewを使用するインストール方法が沢山ヒットしますが、それは大抵の場合 MySQL5.6 や 5.7 向けの方法かと思われます。
この記事では、公式サイトからダウンロードできる MySQL8.0 用のディスクイメージ(.dmgファイル)を使用してインストールします。
-
MySQL公式ページの DOWNLOADSメニュー > Communityタブ > MySQL Community Server(GPL) から、DMG Archive をダウンロードして、実行する。 -
インストーラでUse Strong Password Encryption
かUse Legacy Password Encryption
を選ぶ画面になったら**Use Legacy Password Encryption
を選択する。**
-
あとは通常通りインストールを完了させる。
(Google検索してみると、このあとTerminalでmysql.server start
をさせるような記事が多い。
しかし、今回の方法でインストールしている場合、システム環境設定からサーバーの起動が可能。
さらに、基本は自動でサーバーを起動してくれているため、上記の操作は不要である。) -
Terminalでmysql -v
と入力してみた際、コマンドがmysql: command not found
となる時は、ターミナルで下記を実行。
echo 'export PATH=/usr/local/mysql/bin:$PATH' >> ~/.bash_profile
試しにTerminalでmysql -u root -p
と入力して、パスワードを入力すると、問題なくMySQLが実行できると思われる。
(MySQL8.0以前はrootユーザのパスワードを設定するかどうかは任意だったようだけど、今回の方法でインストールしている場合、パスワード設定は必須なので、-p
というオプションを使用しないでログインすることは不可能です。)
以上。
既に失敗してしまった方へ。
上記のような手順を踏まず、既にドツボにハマってしまった方。
まだやり直せる状況であれば、MySQLのクリーンインストールを行う事が一番安全だと思います。
Google検索すると、MySQLのアンインストールをする際に、Terminalから関連ファイルの削除を行う情報が多くヒットします。
しかし、今回の方法でインストールしている場合、システム環境設定から完全にアンインストールを行うことが可能です。Terminalを使用してアンインストールをする必要は恐らくありません。
(間違っていたらコメントください。)
システム環境設定からアンインストールをする際に、Also uninstall this preference pane, and launchd support files.
にチェックをして下さい。
既にMySQLを運用してしまっている等で、クリーンインストールをすることが出来ない場合、ユーザごとに認証方式を変更する方法もあるようです。
参考:MySQL8.0 認証方式を変更する(Laravel5)
僕はこれを行った際、rootユーザの認証方式を変更してしまい、再度MySQLに接続できなくなる事象が発生しているので、
認証方式を変更する場合は、rootユーザではなく、新規作成されたユーザの設定を変更したほうが安全だと思います。
おわり。