TKngDisuke
@TKngDisuke (大輔 徳永)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

MySQLが起動できない(Can't connect to local MySQL server through socket '/Applications/MAMP/tmp/mysql/mysql.sock' (38))

解決したいこと

MySQLのサーバーが起動していないようでしたのでターミナルで起動させたところ、エラーが出ました。

Can't connect to local MySQL server through socket'/Applications/MAMP/tmp/mysql/mysql.sock' (38)

何をしているか?

PHPのフレームワークLaravelでフォームのようなWebアプリをつくっています。開発環境はMAMPを利用し、MAMPで教本の300Pまでうまく行っていました。
その中で今までMacをスリープモードにして作業を続けていたのですが、昨日再起動してしまうとなぜか今まで動いていたMySQLが動かなくなりました。

どのようなエラーか?

おかしいなということでMAMPのブラウザからSQLを見たところ、
phpMyAdminがnot runnningとなっており、
スクリーンショット 2021-08-12 4.02.58.png
このようなエラーが出ていたので、まずはターミナルからMySQLを起動させてみようと思い、スクリーンショット 2021-08-12 4.04.00.png

このようにしたところ、エラーが出てしまったのでググるとどうやらSocketが作成されていないらしいとのことで作成するコマンドを打つとエラーが今度は2から38に変わりました。ここまでは今までのQiitaの記事通りでいけると思っていました。
スクリーンショット 2021-08-12 4.06.25.png

ここでほとんどの記事は38番のエラーはSocketの権限がないとのことでコマンドプロンプトで

sudo chown tokut /Applications/MAMP/tmp/mysql/mysql.sock

と打てば権限がユーザーのtokutになるので38番のエラーが消えるとのことでしたが、
MySQLを起動できません。
解決方法を教えて下さい。

追記:

自分でmysql.sockを作るのはエラーの元とのことでしたので削除したところ、ターミナルでMysqlを起動したところ、

Can't connect to local MySQL server through socket '/Applications/MAMP/tmp/mysql/mysql.sock' (2)

が出ました。
どうやらsocketでエラーが出ているようなのでtcp接続にしたい↓

またphpMyadmin/config.inc.phpのファイルでどうやら接続方法を変えるらしく
$cfg['Servers'][$i]['host'] = '127.0.0.1'; // MySQL hostname or IP address
$cfg['Servers'][$i]['port'] = '3306'; // MySQL port - leave blank for default port
$cfg['Servers'][$i]['socket'] = ''; // Path to the socket - leave blank for default socket
$cfg['Servers'][$i]['connect_type'] = 'tcp'; // How to connect to MySQL server ('tcp' or 'socket')
$cfg['Servers'][$i]['extension'] = 'mysql';

hostがlocalhostだとsocket通信で127.0.0.1だとtcp通信のようで
localhostだと

mysqli::real_connect(): (HY000/2002): No such file or directory

127.0.0.1だと

mysqli::real_connect(): (HY000/1045): Access denied for user 'root'@'localhost' (using password: YES)

のエラーがMAMPブラウザのMysqlに出ます。

0

2Answer

mysql.sock は MySQL サーバが起動したとき通信経路として作るファイルです。 touch でファイルだけ作ってもサーバが起動していなければ通信はできません。

MAMP で MySQL サーバを起動するには設定画面右上の Start (Stop) を押してください。 https://documentation.mamp.info/en/MAMP-Mac/First-Steps/

0Like

Comments

  1. @TKngDisuke

    Questioner

    回答ありがとうございます。
    MAMPのアプリで右上のStartボタンはもう押してあります。サーバーは起動しているのですが、起動した時にブラウザのMAMP(http://localhost/MAMP/?language=English)
    から PHP Myadminを見てみるとMySQL server not runningとなってしまいます。
    mysql.sockのファイルが空なのですが、これは通信経路なだけなので何か入れたりしなくて良いですよね?
  2. 何も入れなくていいです。自分で作ったものが残っているのもまずいです。次の手順を試してみてください: MAMP アプリでサーバを停止→自分で作った mysql.sock が残っていれば削除→念のため Mac を再起動→アプリでサーバを起動

    なお MAMP アプリの起動ボタンは web サーバと MySQL サーバを合わせて起動します。正しく動けば MySQL に接続できるはずです。
  3. @TKngDisuke

    Questioner

    何度も本当にありがたいです。。。
    今、仰っていた動作をしましたが、最初の2番のエラーに戻りました。(ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/Applications/MAMP/tmp/mysql/mysql.sock' (2))
    またphpMyadmin/config.inc.phpのファイルでどうやら接続方法を変えるらしく
    $cfg['Servers'][$i]['host'] = '127.0.0.1'; // MySQL hostname or IP address
    $cfg['Servers'][$i]['port'] = '3306'; // MySQL port - leave blank for default port
    $cfg['Servers'][$i]['socket'] = ''; // Path to the socket - leave blank for default socket
    $cfg['Servers'][$i]['connect_type'] = 'tcp'; // How to connect to MySQL server ('tcp' or 'socket')
    $cfg['Servers'][$i]['extension'] = 'mysql';
    今、connect typeがsocketではなくtcpにしていたのでsocket処理はしないのかと思っているのですが、どうですか?
    またhostをlocalhostから127.0.0.1に変えることによってsocket通信をtcp通信に変えることができるともネットで書いてあったのでそこも変更しました。
    元にIPアドレスではなくlocalhostに戻した方がいいですかね?今のところ、戻すとphpMyadminのエラーが変わります

    localhostだとmysqli::real_connect(): (HY000/2002): No such file or directory
    127.0.0.1だと mysqli::real_connect(): (HY000/1045): Access denied for user 'root'@'localhost' (using password: YES)
  4. > 今、connect typeがsocketではなくtcpにしていたのでsocket処理はしないのかと思っているのですが、どうですか?

    phpMyAdmin 4.7.0以降では connect_type 設定は使われないようです:
    https://docs.phpmyadmin.net/ja/latest/config.html#cfg_Servers_connect_type
    tcp 接続か socket 接続かは host 設定によって決まります。

    > またhostをlocalhostから127.0.0.1に変えることによってsocket通信をtcp通信に変えることができるともネットで書いてあったのでそこも変更しました。

    はい、 localhost だと socket 接続になります。 tcp 接続を試した方がよさそうなので 127.0.0.1 にしてください:
    https://docs.phpmyadmin.net/ja/latest/config.html#cfg_Servers_host

    (余談ですが、一般的には localhost と127.0.0.1はまったく同じ意味です。 MySQL は特別に両者を区別します)

    127.0.0.1 のとき出るエラー
    mysqli::real_connect(): (HY000/1045): Access denied for user 'root'@'localhost' (using password: YES)
    は MySQL サーバから拒絶の応答があったことを示します。 サーバは起動しているようですがユーザー名かパスワードが間違っているようです。
  5. mysql コマンドで tcp 接続を試すときは mysql -h 127.0.0.1 -P 3306 -p と実行してください。
  6. @TKngDisuke

    Questioner

    細かいご指摘ありがとうございます。
    connect_typeは使わないんですね。助かりました。127.0.0.0.1でtcpにすればsocket関連のエラーは無くなると思ったのですが、ターミナルでMysqlを起動すると2番の
    Can't connect to local MySQL server through socket '/Applications/MAMP/tmp/mysql/mysql.sock' (2)
    が出てしまいます。(作成したsocketのファイルを削除したため?だけど、tcp接続にしているはず、、)

    これからは127.0.0.1でtcp接続ができるようにしていきたいですが、ユーザー名とパスワードが間違っているとのことで今ユーザー名root、パスワードはrootにしています。config.inc.phpの中で
    $cfg['Servers'][$i]['user'] = 'root'; // MySQL user
    $cfg['Servers'][$i]['password'] = 'root';
    となっており、設定はrootのはずですが、Laravelがデータベースをアクセスする際の.envファイルが間違っているのではないかと思い、laravelappのフォルダから.envファイルをReadonlyで開くと
    DB_CONNECTION=mysql
    DB_HOST=127.0.0.1
    DB_PORT=3306
    DB_DATABASE=progate
    DB_USERNAME=root
    DB_PASSWORD=root
    となっており、間違っていないと思われます。他にLaravelがデータベースを開く際にユーザー名やパスワードを保存するファイルなどはありますか?

    追記で質問です。mysqlコマンドを
    cd /Applications/MAMP/Library/bin/
    の後にmysql -h 127.0.0.1 -P 3306 -pを打つと
    comannd not found mysqlと出ます。打つ場所が間違えてますか?
  7. > ターミナルでMysqlを起動すると

    これは mysql -u root -p を実行したということでしょうか。
    この mysql コマンドは MySQL クライアントの一種で、
    すでに起動している MySQL サーバに 接続しに行きます。

    サーバのほうは tcp 接続を受け付ける設定になっていますが、それだけではだめで、
    クライアントからも tcp 接続するように指定しなければいけません。
    mysql -h 127.0.0.1 -P 3306 -u root -p
    のようにホストを指定して tcp 接続してください。
    -P 3306 でポート番号も指定していますがデフォルトで3306なので省略可です。

    > 今ユーザー名root、パスワードはrootにしています。

    config.inc.php にある設定は phpMyAdmin がクライアントとして MySQL サーバに接続するときに渡すユーザー名とパスワードなので、
    実際にデータベースにかかっているパスワードがそれとは限りません。
    Laravel の設定ファイルにある設定も同様です。
    MAMP を変にいじっていないかぎり初期設定の root/root で通るとは思いますが……

    > Laravelがデータベースを開く際にユーザー名やパスワードを保存するファイルなどはありますか?
    基本的には config/database.php にあります。通常はそこから .env の設定を読む形になっています。

    > comannd not found mysqlと出ます。
    説明は省きますが PATH 環境変数の設定をしていないとそうなります。
    現在のディレクトリにあるコマンドを実行するには、
    ./mysql (略)のように頭に ./ をつけて実行してください。
  8. @TKngDisuke

    Questioner

    >mysql -h 127.0.0.1 -u root -pのようにホストを指定して tcp 接続してください。
    ./をつけて実行するとtokut@MacBook-Pro bin % ./mysql -h 127.0.0.1 -u root -p
    Enter password:
    Welcome to the MySQL monitor. Commands end with ; or \g.
    Your MySQL connection id is 20
    Server version: 8.0.26 MySQL Community Server - GPL

    Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.

    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

    mysql>
    ホストを指定するとmysqlに接続できました。
    >MAMP を変にいじっていないかぎり初期設定の root/root で通るとは思いますが、、

    MAMPを変にいじっていないのでrootであってそうですね。

    >config/database.phpを確認したところ、
    'mysql' => [
    'driver' => 'mysql',
    'url' => env('DATABASE_URL'),
    'host' => env('DB_HOST', '127.0.0.1'),
    'port' => env('DB_PORT', '3306'),
    'database' => env('DB_DATABASE', 'progate'),
    'username' => env('DB_USERNAME', 'root'),
    'password' => env('DB_PASSWORD', 'root'),
    'unix_socket' => env('DB_SOCKET', ''),
    とmysqlの設定は間違っていないようです。
    データベースのデフォルトも
    'default' => env('DB_CONNECTION', 'mysql'),
    となっており、mysqlを利用しているのでenvファイルは間違っていないようです。


    コマンドプロンプトでMysqlに接続はできたので後はMAMPでMysqlのサーバーがnot runningになっているエラーを治したいのですが、
    mysqli::real_connect(): (HY000/1045): Access denied for user 'root'@'localhost' (using password: YES)
    このエラーは「MySQL サーバから拒絶の応答があったことを示します。 サーバは起動しているようですがユーザー名かパスワードが間違っているようです。」
    とのことで現在使われているLaravelのdatabase.phpの名前とパスワードはrootで
    PhpMyadminの名前とパスワードもrootになっているので何が間違っているのかがわからなくなってしまいました。
  9. MAMP の設定のポート画面で MySQL サーバのポート番号はどうなっていますか?
    初期設定のままなら8889だと思いますが、そうだとすると、
    ./mysql -h 127.0.0.1 -u root -p で3306番ポートに接続できるのは変です。
    もしかして MAMP 以外でも MySQL をインストールしていないでしょうか?

    もしすべて当てはまっているとしたら、とりあえず対処は置いておいて、
    ./mysql -h 127.0.0.1 -P 8889 -u root -p で8889番ポートに接続できるか、
    config.inc.php で port 設定を8889にして接続できるか、
    を確認してみてください。

  10. @TKngDisuke

    Questioner

    MAMP以外でMysqlをインストールしてます!もしかしてそれが原因だったりするのかもしれないです。
    MAMPのポート番号は3306です。変えた方がいいとネットや参考書に書いてあったので変更してます。
    8889番ポートに接続でしようとすると
    tokut@MacBook-Pro bin % cd /Applications/MAMP/Library/bin/
    tokut@MacBook-Pro bin % ./mysql -h 127.0.0.1 -P 8889 -u root -p
    Enter password:
    ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (61)
    tokut@MacBook-Pro bin %

    config.inc.phpで設定を変えても接続できなかったです。
    tokut@MacBook-Pro bin % ./mysql -h 127.0.0.1 -P 8889 -u root -p
    Enter password:
    ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (6

    別のMysqlのアプリを前はStopしていたのですが、再起動した時にMysqlのサーバーが起動していました。StopさせてMAMPを再起動するとMysqlが無事起動しました!
    4日間くらいずっとこのエラーと戦っていたので本当に直って良かったです!
    感謝しかありません。

Comments

  1. @TKngDisuke

    Questioner

    回答ありがとうございます。
    MAMPを通じて起動を停止してまた起動しましたが、そもそもMySQLが動いていないのでどうにもなりません。
    Database Serverの設定を見るとMysql5.7.32になっており、MySQLを起動するようなボタンは見当たらないですね。
  2. `which mysql` の結果を教えてください。
  3. @TKngDisuke

    Questioner

    mysql not foundでした。
  4. `/tmp/mysql.sock`は存在しますか?

Your answer might help someone💌