## 事象
mysql@8.0
をインストールをしたのですが、アップデートでパスワード形式に変更があったらしく、node.js
とうまく噛み合いませんでした。
なので、旧式のパスワード形式に変更したいと思い、権限変更したり、アンストインスト繰り返し試していたところ、動かなくなりました。
# スタートできない
$ mysql.server start
Starting MySQL
.. ERROR! The server quit without updating PID file (/usr/local/var/mysql/XXXXXXXX.local.pid).
# stopできない
$ mysql.server stop
ERROR! MySQL server PID file could not be found!
# セーフ起動できない
$ mysqld_safe
2017-06-24T08:14:13.6NZ mysqld_safe Logging to '/usr/local/var/mysql/XXXXXX.local.err'.
2017-06-24T08:14:13.6NZ mysqld_safe Starting mysqld daemon with databases from /usr/local/var/mysql
2017-06-24T08:14:14.6NZ mysqld_safe mysqld from pid file /usr/local/var/mysql/XXXXXXX.local.pid ended
再インストールで治るか検証
$ brew uninstall mysql
$ brew install mysql
$ mysql.server start
Starting MySQL
.. ERROR! The server quit without updating PID file (/usr/local/var/mysql/XXXXXXXX.local.pid).
/usr/local/var/mysql/XXXXXXXX.local.pid
が一時的に作られてるらしいのですが$ mysql.server start
中に消えてしまう現象が発生しています。
理由としては、クラッシュしたファイルをアップデートすることをmysql
が許してないみたいです
参考にした記事(コピペ)
$ brew uninstall mysql
でも消えないファイルがあるらしいので下記記事をコピペをして消去の対応をしました
mysqlがどうしても起動しない
@_natsu_no_yuki_
どうしよう!困った時のMac上のMySQLのアンインストール&再インストール、動作確認手順
@akiko-pusu
/usr/local/var/mysql/XXXX.local.errの確認
かなり参考になったので、下記記事の引用貼っときます。エラーログは私の実際のログに置き換えときました。
https://gihyo.jp/dev/serial/01/mysql-road-construction-news/0096
$ cd /usr/local/var/mysql/
$ ls *.err
MacBook2.err
>今回は`MacBook2.err`と言う名前でしたが,ホストや実行環境によって名前は変わると思うので適宜変更して実行してください。
>`tail -f MacBook2.err` を行った状態で(err名は適宜置き換えて実行してください),別のターミナルから`mysql.server start`を実行して,どのようなエラーが表示されるか確認してみましょう。
>```
$ tail -f MacBook2.err ←1つ目のターミナルで実行して待ちます
$ mysql.server start ←別のターミナルで実行します
起動に失敗した場合には1つ目の
tail -f
を実行しているターミナルに以下のようなエラーログが吐き出されます。
# 私の実際のエラーです
xxxx@{pc名} mysql % tail -f {pc名}.local.err
2020-08-24T14:06:55.301175Z 0 [ERROR] [MY-011300] [Server] Plugin mysqlx reported: 'Setup of bind-address: '127.0.0.1' port: 33060 failed, `bind()` failed with error: Address already in use (48). Do you already have another mysqld server running with Mysqlx ?'
2020-08-24T14:06:55.301545Z 0 [ERROR] [MY-013597] [Server] Plugin mysqlx reported: 'Value '127.0.0.1' set to `Mysqlx_bind_address`, X Plugin can't bind to it. Skipping this value.'
2020-08-24T14:06:55.301872Z 0 [ERROR] [MY-011300] [Server] Plugin mysqlx reported: 'Setup of socket: '/tmp/mysqlx.sock' failed, another process with PID 72895 is using UNIX socket file'
2020-08-24T14:06:55.335175Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2020-08-24T14:06:55.335489Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
2020-08-24T14:06:55.337415Z 0 [ERROR] [MY-010262] [Server] Can't start server: Bind on TCP/IP port: Address already in use
2020-08-24T14:06:55.337688Z 0 [ERROR] [MY-010257] [Server] Do you already have another mysqld server running on port: 3306 ?
2020-08-24T14:06:55.338189Z 0 [ERROR] [MY-010119] [Server] Aborting
2020-08-24T14:06:56.343210Z 0 [System] [MY-010910] [Server] /usr/local/Cellar/mysql/8.0.21_1/bin/mysqld: Shutdown complete (mysqld 8.0.21) Homebrew.
2020-08-24T14:06:56.6NZ mysqld_safe mysqld from pid file /usr/local/var/mysql/{pc名}.local.pid ended
恥ずかしながら英語読めないマンなのでエラーコピーしてgoogle翻訳へ、すると2行目に気になる文があり
2020-08-24T14:06:55.301545Z 0 [エラー] [MY-013597] [サーバー]プラグインmysqlxが報告: '値' 127.0.0.1 'が `Mysqlx_bind_address`に設定されているため、Xプラグインはそれにバインドできません。この値をスキップします。」
止まっていると思っていたmysqlがじつは動いていた?説が浮上したので、それらしいファイルを強制終了させていこうと思いました。
##強制終了の流れ
- $ sudo mysqladmin kill を実行
- アクテビティモニターで通信を確認
- uninstallコピぺ祭り
- $ brew install mysqlでインストール
- $ mysql.server startで正常に動くか確認
1.$ sudo mysqladmin kill を実行
強制終了するためkill
コマンドについて調べているとmysql公式サイト曰く、
mysqladmin processlist
およびmysqladmin kill
コマンドを使用して、スレッドを検査および強制終了することもできます。
外部から直接mysqlをいじれるコマンドらしかったのでsudo
つけてから実行しました。
2.アクテビティモニターで通信を確認
次にアクテビティモニターを使用してmysql
っぽい名前が無いか確認。すると、
mysqld
というファイルが可動していたので、ダブルクリック→終了→強制終了で停止
3.uninstallコピぺ祭り
再度不要なファイルが残ってしまっている可能性があるので、再びコピペで消去してから
mysqlがどうしても起動しない
どうしよう!困った時のMac上のMySQLのアンインストール&再インストール、動作確認手順
4.$ brew install mysqlでインストール
~ $ brew install mysql
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 1 tap (homebrew/core).
==> Updated Formulae
Updated 13 formulae.
==> Downloading https://homebrew.bintray.com/bottles/mysql-8.0.21_1.catalina.bottle.tar.gz
Already downloaded: /Users/shinozakimasaya/Library/Caches/Homebrew/downloads/0d017278caa06d8c2921f06801b920ebffaeb68cef50eb80973e70db449facc5--mysql-8.0.21_1.catalina.bottle.tar.gz
==> Pouring mysql-8.0.21_1.catalina.bottle.tar.gz
==> /usr/local/Cellar/mysql/8.0.21_1/bin/mysqld --initialize-insecure --user=shinozakimasaya --basedir=/usr/local/Cellar/mysql/
==> Caveats
We've installed your MySQL database without a root password. To secure it run:
mysql_secure_installation
MySQL is configured to only allow connections from localhost by default
To connect run:
mysql -uroot
To have launchd start mysql now and restart at login:
brew services start mysql
Or, if you don't want/need a background service you can just run:
mysql.server start
==> Summary
🍺 /usr/local/Cellar/mysql/8.0.21_1: 290 files, 291.2MB
5.$ mysql.server startで正常に動くか確認
$ mysql.server start
Starting MySQL
SUCCESS!
1.2 のどちらかが良かったのか、無事稼働してくれました。自分の場合はこうでしたが、人によってエラーが違うらしいので__/usr/local/var/mysql/xxxx.local.err__を確認しましょう。{pc名}だけ変えれば行けると思います。
$ cd /usr/local/var/mysql/
$ tail -f {pc名}.local.err
$ mysql.server start
##まとめ
適当にやっていたので、順番が違う可能性がありますが、工夫しながら自分に合った解決方法を見つけてみてださい。