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がエラーが発生してしまいサーバーが起動できません。

解決したいこと

mysqlがエラーが発生してしまいサーバーが起動できません。

発生している問題・エラー

mysql.server start
Starting MySQL
. ERROR! The server quit without updating PID file (/usr/local/var/mysql/nakamuranoMBP.lan.pid).

該当するソースコード

% brew services start mysql
Service `mysql` already started, use `brew services restart mysql` to restart.

自分で試したこと

以前に記載した記事で起こったエラーを解決をしている際に、下記記事を参考にしました。
https://qiita.com/madai0517/items/4df3ac0ce002301c7059
https://qiita.com/tashiro_gaku/items/084b016effb581ad059a
そしたら、mysqlの起動コマンドを実行した際にエラーが発生しました。
また、インストールしたのは、homebrewからで、以下のコマンドを実行したらおそらく起動されている?

% brew services start mysql
Service `mysql` already started, use `brew services restart mysql` to restart.

どなたかご教授お願いいたします。

追記いたします。以下のようにエラー解決を試みてもあまりエラー解決には至らず・・・また、brewでは起動されてるのに標準出力ではエラー解決には至っていない。これはどういう状況なのか。どなたかご教授いただけますでしょうか。

brew services stop mysql@5.7

Stopping mysql@5.7... (might take a while)
==> Successfully stopped mysql@5.7 (label: homebrew.mxcl.mysql@5.7)
(base) nakamura@nakamuranoMBP mysql % rm /usr/local/var/mysql/nakamuranoMBP.lan.pid

(base) nakamura@nakamuranoMBP mysql % touch /usr/local/var/mysql/nakamuranoMBP.local.pid
(base) nakamura@nakamuranoMBP mysql % brew services start mysql@5.7

==> Successfully started mysql@5.7 (label: homebrew.mxcl.mysql@5.7)
(base) nakamura@nakamuranoMBP mysql % mysql.server starr

Usage: mysql.server {start|stop|restart|reload|force-reload|status} MySQL server options nakamura@nakamuranoMBP mysql % mysql.server start
Starting MySQL
. ERROR! The server quit without updating PID file (/usr/local/var/mysql/nakamuranoMacBook-Pro.local.pid).

0 likes

4Answer

上から順に、

  • brew services stop mysql を実行して MySQL を止める
  • Mac を再起動する
  • touch /usr/local/var/mysql/nakamuranoMBP.lan.pid して PID ファイルを作成する
  • brew services start mysql を実行して MySQL を起動する

を実行してみてください。

1Like

Comments

  1. @suiru_nakamura

    Questioner

    ご連絡有難うございます!
    試してみます!
    また、homebrewでサーバーを起動するのと、よく見る。mysql.server startコマンドではどう違うのでしょうか?
  2. mysql.server start は MySQL の標準の起動コマンドです。

    brew services start XXX は Homebrew でインストールしたサービスをどれでも起動できる便利コマンドです。また brew services start mysql すると、 Mac が起動したとき自動で MySQL も起動するように設定されます。

    brew services start mysql で MySQL を起動したら後は実行されっぱなしだと思ってください。 mysql.server start する必要はありません。
  3. @suiru_nakamura

    Questioner

    ご返信有難うございます。
    ご教授いただき有難うございます!
    では、できれば標準出力でmysqlを起動するよりもbrew services start XXXで自動で起動する設定の方がいいんですかね?
    これからはこちらを使用します。
  4. 質問の追記がどのタイミングで書かれたか分からないので入れ違いかもしれませんが……

    brew services start mysql を実行したらもう MySQL は起動しています。さらに mysql.server start を実行すると二重に起動しようとしてエラーになります。 brew services start mysql だけにしておいてください。
  5. @suiru_nakamura

    Questioner

    ご返信有難うございます!
    かしこまりました。
    では、php artisan migrateを行ってみます。
  6. @suiru_nakamura

    Questioner

    @uasiさん、再度申し訳ございません。
    先ほど、php artisan migrateコマンドを実行したところ、やはり以下のようなエラーが発生してしまいました。laravelでデータベースを作成するために、以下のエラーを解決する方法はありますでしょうか?大変お手数ですがご教授お願いいたします。
    また、以下のエラー文の場合はどこのことを指しているのでしょうか?
    ご確認お願いいたします。

    Illuminate\Database\QueryException
    SQLSTATE[HY000] [1049] Unknown database 'database_name' (SQL: select * from information_schema.tables where table_schema = database_name and table_name = migrations and table_type = 'BASE TABLE')

    at vendor/laravel/framework/src/Illuminate/Database/Connection.php:678
    674▕ // If an exception occurs when attempting to run a query, we'll format the error
    675▕ // message to include the bindings with SQL, which will make this exception a
    676▕ // lot more helpful to the developer instead of just the database's errors.
    677▕ catch (Exception $e) {
    ➜ 678▕ throw new QueryException(
    679▕ $query, $this->prepareBindings($bindings), $e
    680▕ );
    681▕ }
    682▕

    +33 vendor frames
    34 artisan:37
    Illuminate\Foundation\Console\Kernel::handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
  7. MySQL に接続できていますが database_name という名前のデータベースが存在しないようです(名前にしては変ですが Laravel アプリケーションの初期設定でしょうか)。データベースは自分で作る必要があります。

    `mysql -uroot` コマンドで MySQL のコンソールが開きます。
    数行のメッセージの後に mysql> と表示されるので続けて CREATE DATABASE database_name; と入力してエンターを押します。

    mysql> CREATE DATABASE database_name;
    Query OK, 1 row affected (0.06 sec)

    こんな感じの出力があれば成功です。 exit; と入力してコンソールから抜けてください。
  8. @suiru_nakamura

    Questioner

    ご返信有難うございます。そうなんですね。
    php artisan migrateコマンドでは、データベースは作成できないのですね。
    では、laravelのアプリ内でコマンドでデータベースを作成する方法はないのでしょうか?
    また、mysqlにログインしてデータベースを作成した場合、laravelのアプリケーションと自動で結合できるものなんですかね?
    laravelのアプリケーションと自動で結合できるコマンドを教えていただけると幸いです。
    すみません。知識不足ですが、教えていただけると嬉しいです!!
  9. ここでいう「データベース」は広い意味でのデータベースではなく特定の物事を指すことに注意してください。
    MySQL の中には複数の「データベース」を作ることができ、それぞれの「データベース」の中にいくつもテーブルを作れます。
    「データベース」とは MySQL の中でテーブルをまとめるフォルダのようなものです。それぞれ隔離されていて、別々の「データベース」に入ったテーブルが互いを参照することはできません。
    普通は Laravel アプリ1つに1個の「データベース」を作って割り当てます(テスト用に別の「データベース」を作ることはあります)。

    「データベース」は名前で参照できます。今は database_name という名前の「データベース」がないのでアプリから参照できずにエラーが出ています。
    上のコメントで書いたように作成すればアプリから参照できる状態になっています。
    その後 php artisan migrate を実行すると database_name の中にテーブルを作ってくれます。

    アプリから自動で「データベース」を作るのはコードを書けばできますが、
    環境構築のときに一度作ればそれをずっと使う(作り直すことはあまりない)ものなので、
    わざわざコードを書かずに手入力で作ることが多いです。
  10. @suiru_nakamura

    Questioner

    @usaiさん、とても詳細にご教授いただき有難うございます!
    そなるほどですね!
    laravelのアプリ内のコードで存在してあるmysqlのデーやベースを割り当てているわけですね。
    なので、まずmysqlにログインし、データベースを作成する必要がある。
    わかりやすく説明していただき有難うございます。実行してみます!
  11. @suiru_nakamura

    Questioner

    @usaiさん、何度もすみません。
    以下のようなエラーが出てしまいました。😭
    brewでの起動コマンドを実行して成功したので起動はしているはずなのですが、、

    これはソケットの指定を標準出力のmysqlの中に設定を行っていないということなのでしょうか?🥲
    調べてみたのですが、以下の記事が有効な感じですかね?
    どの記事も権限についての問題らしく、、
    https://qiita.com/makuramoto1/items/52159370d00bef708595
    https://sankame.github.io/blog/2017-11-20-fail_to_connect_mysql/

    mysql -u root
    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
    (base) nakamura@nakamuranoMBP mysql % brew mysql -u root
    Error: Unknown command: mysql
    (base) nakamura@nakamuranoMBP mysql % brew mysqld -u root
    Error: Unknown command: mysqld
    (base) nakamura@nakamuranoMBP mysql % sudo mysql -u root
    Password:
    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
    (base) nakamura@nakamuranoMBP mysql %

    何度もすみません。ご教授お願いします!!
  12. MySQL サーバに接続する方式はホスト名を指定するものやソケットファイル経由によるものなどいくつかあって、ソケットファイル方式が選ばれたもののうまくいっていないようです。ホスト名を指定すればいいかもしれません。

    mysql -uroot -h localhost でどうでしょうか。
  13. @suiru_nakamura

    Questioner

    @usaiさん、変わらないです😭
    このエラーは、もう本当にしんどいです。

    mysql -uroot -h localhost
    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
    (base) nakamura@nakamuranoMBP mysql % mysql -u root -h localhost
    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
    (base) nakamura@nakamuranoMBP mysql % mysql -u root -h localhost
  14. エラーの可能性を一つずつ検討していけばなんとかなりますよ。考えられる原因は、 MySQL が実は起動していない、 /tmp/mysql.sock の作成に失敗している、ソケットファイルの場所が違うなど。

    ps aux | grep 'mysql[d]'
    これを実行して何行か出力があれば MySQL が起動しています。

    ls /tmp/mysql.sock
    これを実行して No such file〜 エラーが出なければソケットファイルが作成できています。

    mysql_config --socket
    これを実行すればソケットファイルのパスが出力されます。
  15. @suiru_nakamura

    Questioner

    @usaiさん、ご返信有難うございます!
    socketファイルが存在しない?可能性があります。なのにファイルのパスは出力された。
    socketファイルを作成しなければいけないのでしょうか?
    また、ファイルを作成するだけでいいのでしょうか?その後何も、設定する必要はない感じですかね?
  16. mysql_config --socket はどのパスにファイルを作る設定になっているかを表示するだけなので、実際には存在しないかもしれません。
    MySQL が起動しているのに /tmp/mysql.sock が存在しないのはおかしいですね。一度 MySQL を止めてソケットファイルを手で作成すれば直るかもしれません。上から順に1行ずつ、

    brew services stop mysql
    sudo touch /tmp/mysql.sock
    brew services start mysql

    を実行してみてください。
  17. @suiru_nakamura

    Questioner

    @uasiさん、教えていただき有難うございます!

    確認です。上記のコマンドですが、mysqlのバージョンが5.7の場合は、
    brew services stop mysql@5.7
    このようなコマンドで大丈夫ですよね?
  18. @suiru_nakamura

    Questioner

    下記のように完了できました!

    brew services stop mysql@5.7
    Stopping `mysql@5.7`... (might take a while)
    ==> Successfully stopped `mysql@5.7` (label: homebrew.mxcl.mysql@5.7)
    (base) nakamura@nakamuranoMBP mysql % sudo touch /tmp/mysql.sock

    Password:
    Sorry, try again.
    Password:
    Sorry, try again.
    Password:
    (base) nakamura@nakamuranoMBP mysql % ls /tmp/mysql.sock

    /tmp/mysql.sock
    (base) nakamura@nakamuranoMBP mysql % sudo touch /tmp/mysql.sock
    (base) nakamura@nakamuranoMBP mysql % ls /tmp/mysql.sock

    /tmp/mysql.sock
    (base) nakamura@nakamuranoMBP mysql % cd /tmp/
    (base) nakamura@nakamuranoMBP /tmp % ls
    000000000086d87b 000000000087993c avastinit-1607667075-98.log com.google.Keystone
    000000000086f8b1 000000000087ce78 avastuserinit--1607667132-nakamura-2827.log fseventsd-uuid
    00000000008718bd 00000000008827a4 avastuserinit--1607849915-nakamura-26294.log msu-target-9sUsLLYx
    00000000008738ef 00000000008877c6 com.apple.launchd.fofFBP4QIA mysql.sock
    00000000008758f3 000000000088ccf6 com.apple.launchd.w5EjdtEZKt powerlog
    000000000087791a 0000000000892371 com.docker.docker.Sparkle.pid proxy-PPDYek
    (base) nakamura@nakamuranoMBP /tmp % brew services start mysql@5.7

    ==> Successfully started `mysql@5.7` (label: homebrew.mxcl.mysql@5.7)
    (base) nakamura@nakamuranoMBP /tmp %
  19. @suiru_nakamura

    Questioner

    再度、すみません。もう一度mysqlにログインしてみました!
    エラー文が変更しました、、socketのエラー(38)だそうです。。😭

    brew services start mysql@5.7

    ==> Successfully started `mysql@5.7` (label: homebrew.mxcl.mysql@5.7)
    (base) nakamura@nakamuranoMBP /tmp % mysql -uroot -h localhost
    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (38)
    (base) nakamura@nakamuranoMBP /tmp % mysql -uroot -h localhost
    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (38)
    (base) nakamura@nakamuranoMBP /tmp % mysql -u root

    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (38)
    (base) nakamura@nakamuranoMBP /tmp % mysql -u root
    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (38)
    (base) nakamura@nakamuranoMBP /tmp % cd
    (base) nakamura@nakamuranoMBP ~ % mysql -u root
    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (38)
    (base) nakamura@nakamuranoMBP ~ %
  20. 一歩前進しましたね、38はソケットファイルの所有権のエラーのようです。もう一度 MySQL を stop して(コマンドはそれで合っています)、

    sudo chown _mysql:_mysql /tmp/mysql.sock

    を実行して所有権を修正し、 MySQL を start してください。
  21. @suiru_nakamura

    Questioner

    @uasiさん!有難うございます!
    了解です!所有権の修正ですね!
  22. @suiru_nakamura

    Questioner

    エラー文は変わらなかったです、、、
    権限の、付与の仕方がおかしかったのでしょうか?
    一応、権限一覧を載せておきます!!

    (base) nakamura@nakamuranoMBP ~ % brew services stop mysql@5.7
    Stopping `mysql@5.7`... (might take a while)
    ==> Successfully stopped `mysql@5.7` (label: homebrew.mxcl.mysql@5.7)
    (base) nakamura@nakamuranoMBP ~ % sudo chown _mysql:_mysql /tmp/mysql.sock
    (base) nakamura@nakamuranoMBP ~ % brew services start mysql@5.7
    ==> Successfully started `mysql@5.7` (label: homebrew.mxcl.mysql@5.7)
    (base) nakamura@nakamuranoMBP ~ % mysql -uroot -h localhost
    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (38)
    (base) nakamura@nakamuranoMBP ~ %
  23. やり方はそれで合っていますがだめみたいですね……
    MySQL のデータを全部消しても構わないのであれば、再インストールしてみる手もあります。

    brew services stop mysql@5.7
    brew uninstall mysql@5.7
    sudo rm /tmp/mysql.sock

    sudo rm -rf /usr/local/var/mysql
    # ↑これでテーブルなどの残ったデータが全部消えます。パスを間違えないように慎重に

    で、 Mac を再起動して

    brew install mysql@5.7
    brew services start mysql@5.7

    でいけます。
  24. もし mysql@5.6 も入っているとか、 MySQL を GUI インストーラでもインストールした覚えがあるといった場合は上の手順をやる前に教えてください。複数インストールされているとややこしいので。
  25. @suiru_nakamura

    Questioner

    了解です!mysq@5.7しかインストールしていない状態です!

    brew list
    autoconf gettext imagemagick libomp ncurses pkg-config ruby-build xz
    awscli ghostscript jpeg libpng node protobuf shared-mime-info yarn
    docbook glib libde265 libtiff openexr pyenv sqlite zsh
    docbook-xsl gnu-getopt libffi libtool openjpeg python@3.9 webp
    freetype icu4c libheif little-cms2 openssl@1.1 rbenv x265
    gdbm ilmbase liblqr mysql@5.7 pcre readline xmlto
    chromedriver
    (base) nakamura@nakamuranoMBP ~ % mysql info
    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (38)
    (base) nakamura@nakamuranoMBP ~ % mysql --version
    mysql Ver 14.14 Distrib 5.7.32, for osx10.16 (x86_64) using EditLine wrapper
  26. OK です!
  27. @suiru_nakamura

    Questioner

    実行しました!再起動します!!

    brew uninstall mysql@5.7
    Uninstalling /usr/local/Cellar/mysql@5.7/5.7.32... (319 files, 234.4MB)
    (base) nakamura@nakamuranoMBP ~ % brew list
    autoconf gettext imagemagick libomp node protobuf shared-mime-info yarn
    awscli ghostscript jpeg libpng openexr pyenv sqlite zsh
    docbook glib libde265 libtiff openjpeg python@3.9 webp
    docbook-xsl gnu-getopt libffi libtool openssl@1.1 rbenv x265
    freetype icu4c libheif little-cms2 pcre readline xmlto
    gdbm ilmbase liblqr ncurses pkg-config ruby-build xz
    chromedriver
    (base) nakamura@nakamuranoMBP ~ % sudo rm /tmp/mysql.sock

    Password:
    (base) nakamura@nakamuranoMBP ~ % sudo rm -rf /usr/local/var/mysql

    (base) nakamura@nakamuranoMBP ~ % ls /usr/local/var/mysql

    ls: /usr/local/var/mysql: No such file or directory
  28. あ、 mysql -uroot と mysql -uroot -h localhost はまったく同じ意味になるんでした。接続できなそうなら mysql -uroot -h 127.0.0.1 も試してみてください。
  29. @suiru_nakamura

    Questioner

    今、再起動完了しました!
    了解です!試してみます!
  30. @suiru_nakamura

    Questioner

    @uasiさん!
    コマンド実行してみました。socketのエラーですね。
    オプションで-hを追加してみたら、エラー(67)になりました。
    またsocketが作成できていないのでsocketを作成する感じですかね?


    % brew services start mysql@5.7

    ==> Successfully started `mysql@5.7` (label: homebrew.mxcl.mysql@5.7)
    (base) nakamura@nakamuranoMacBook-Pro ~ % mysql -u root
    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
    (base) nakamura@nakamuranoMacBook-Pro ~ % mysql -uroot -h 127.0.0.1
    ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (61)
  31. そうですね、 sudo touch /tmp/mysql.sock でソケットファイルを作成して、 brew services restart mysql@5.7 で MySQL を再起動して接続を試してください。

    だめなら所有権を
    sudo chown _mysql:_mysql /tmp/mysql.sock
    で変えて MySQL を再起動してまた接続してください。

    所有権は
    sudo chown nakamura:admin /tmp/mysql.sock
    でいけるかもしれないので、これも試してみてください。
  32. あと、このエラーが出るということは

    (base) nakamura@nakamuranoMacBook-Pro ~ % mysql -uroot -h 127.0.0.1
    ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (61)

    MySQL がポート番号3306ではない別のポートで起動している可能性があるので、以下のように実行してポート番号を確認し、

    % sudo lsof -i -P | grep -i mysqld
    mysqld 43843 uasi (略) TCP localhost:1234 (LISTEN)

    この localhost: に続く番号を -P オプションの後につけて

    % mysql -uroot -h 127.0.0.1 -P 1234

    とすれば接続できるかもしれません。

    対処として思いつくのはこれくらいです……。
  33. @suiru_nakamura

    Questioner

    @uasiさんご返信有難うございます!このエラーは本当に最悪ですね。😭
    下のような記述方法になりました。
    オプションですが、 Pですかね? -Pだとパスワードになってしまう気がします。

    sudo lsof -i -P | grep -i mysqld
    Password:
    Sorry, try again.
    Password:
    mysqld 2447 nakamura 16u IPv6 0xe74fc355b680b90f 0t0 TCP *:8889 (LISTEN)
    (base) nakamura@nakamuranoMacBook-Pro ~ % mysql -uroot -h 8889
    ERROR 2003 (HY000): Can't connect to MySQL server on '8889' (65)
    (base) nakamura@nakamuranoMacBook-Pro ~ % mysql -uroot -h 127.0.0.1 -P 8889
    ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
    (base) nakamura@nakamuranoMacBook-Pro ~ % mysql -uroot -h 127.0.0.1 -P 8889
    ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
    (base) nakamura@nakamuranoMacBook-Pro ~ % mysql -uroot -h 127.0.0.1 -P 8889
  34. 接続できてますね! mysql コマンドにポートを渡すオプションは -P (大文字ピーに続けて数字)で合っています。
    あとは MySQL に接続するときのパスワードが必要そうです。 -p (小文字ピーだけ)オプションも渡すとパスワード入力プロンプトが表示されるようになります。

    % mysql -uroot -h 127.0.0.1 -P 8889 -p
    Enter password:

    たぶん root ユーザーの初期パスワードは「root」です(Mac のパスワードとは無関係の MySQL 専用パスワードです)。入力してみてください。
  35. @suiru_nakamura

    Questioner

    本当ですか!実行してみます!
    これは、アカウントがないってことですかね?
    後もう少し、でできそうです!
    
    mysql -uroot -h 127.0.0.1 -P 8889 -p root
    Enter password:
    ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
    (base) nakamura@nakamuranoMacBook-Pro ~ % mysql -uroot -h 127.0.0.1 -P 8889 -p suirusuiru1207
    Enter password:
    ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
    (base) nakamura@nakamuranoMacBook-Pro ~ % mysql -uroot -h 127.0.0.1 -P 8889 -p suirusuiru1207
    Enter password:
    ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
    (base) nakamura@nakamuranoMacBook-Pro ~ % mysql -uroot -h 127.0.0.1 -P 8889 -p root
    Enter password:
    ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
  36. root ユーザーのパスワードが合ってない可能性があります。 MySQL のセーフモードでパスワードを変更すればいけるかもしれません。

    % brew services stop mysql@5.7
    # ↑いったん止める

    % mysqld_safe --skip-grant-tables
    # ↑セーフモードでユーザー認証なしで MySQL サーバを起動する。
    # 続きは別のターミナルを開いて……

    % mysql -uroot -h 127.0.0.1 -P 8889
    mysql>
    # ↑ パスワードなしで MySQL のコンソールが開けるはず

    update mysql.user set authentication_string=password("new_pass") where user='root';
    # コンソールに↑を入力して root ユーザーのパスワードを "new_pass" (適当な値で)に変更

    exit;
    # ↑コンソールを抜ける

    ここで Mac を再起動。セーフモードの MySQL サーバが止まる。

    % brew services start mysql@5.7

    % mysql -uroot -h 127.0.0.1 -P 8889 -p root
    Enter password: (変更したパスワード)

    これでたぶんいけます。

    これがだめでも、セーフモードの MySQL でコンソールを開くところまでうまくいっていれば、いっそセーフモードのサーバを使い続けてもいいかもしれません。本番環境だとまずいですが開発環境なら差し支えないはずなので。
  37. @suiru_nakamura

    Questioner

    @uasiさん!
    ご返信遅くなってしまって申し訳ございません。
    これから、作業を開始します!
    かしこまりました!一旦作業してみます!
  38. @suiru_nakamura

    Questioner

    @uasiさん、大変申し訳ございません。
    やはりエラーが発生してしまったようです。
    どうやら、以下のコマンドでセーフモードができないみたいです。😭
    mysqld_safe --skip-grant-tables

    brew services stop mysql@5.7
    Stopping `mysql@5.7`... (might take a while)
    ==> Successfully stopped `mysql@5.7` (label: homebrew.mxcl.mysql@5.7)
    (base) nakamura@nakamuranoMacBook-Pro ~ % mysqld_safe --skip-grant-tables
    2020-12-15T12:17:52.6NZ mysqld_safe Logging to '/usr/local/var/mysql/nakamuranoMBP.err'.
    2020-12-15T12:17:53.6NZ mysqld_safe Starting mysqld daemon with databases from /usr/local/var/mysql
    2020-12-15T12:17:54.6NZ mysqld_safe mysqld from pid file /usr/local/var/mysql/nakamuranoMBP.pid ended
    (base) nakamura@nakamuranoMacBook-Pro ~ % mysql -uroot -h 127.0.0.1 -P 8889
    ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
    (base) nakamura@nakamuranoMacBook-Pro ~ % mysqld_safe --skip-grant-tables
    2020-12-15T12:18:33.6NZ mysqld_safe Logging to '/usr/local/var/mysql/nakamuranoMBP.err'.
    2020-12-15T12:18:34.6NZ mysqld_safe Starting mysqld daemon with databases from /usr/local/var/mysql
    2020-12-15T12:18:35.6NZ mysqld_safe mysqld from pid file /usr/local/var/mysql/nakamuranoMBP.pid ended
    (base) nakamura@nakamuranoMacBook-Pro ~ % mysqld_safe --skip-grant-tables
    2020-12-15T12:19:14.6NZ mysqld_safe Logging to '/usr/local/var/mysql/nakamuranoMBP.err'.
    2020-12-15T12:19:14.6NZ mysqld_safe Starting mysqld daemon with databases from /usr/local/var/mysql
    2020-12-15T12:19:16.6NZ mysqld_safe mysqld from pid file /usr/local/var/mysql/nakamuranoMBP.pid ended

    Last login: Tue Dec 15 13:37:29 on ttys001
    (base) nakamura@nakamuranoMBP ~ % mysql -uroot -h 127.0.0.1 -P 8889
    ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
    (base) nakamura@nakamuranoMBP ~ % mysql -uroot -h 127.0.0.1 -P 8889
    ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
    (base) nakamura@nakamuranoMBP ~ % mysql -uroot -h 127.0.0.1 -P 8889
    ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
    (base) nakamura@nakamuranoMBP ~ % mysql -u root -h 127.0.0.1 -P 8889
    ERROR 1045 (28000): Access denied for user ' root'@'localhost' (using password: NO)
    (base) nakamura@nakamuranoMBP ~ % mysql -u root -h 127.0.0.1 -P 8889
    ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
    (base) nakamura@nakamuranoMBP ~ %
  39. @suiru_nakamura

    Questioner

    このような感じに出るには出るんですよね。。。
    mysqld_safe --skip-grant-tables


    2020-12-15T12:38:07.6NZ mysqld_safe Logging to '/usr/local/var/mysql/nakamuranoMBP.err'.
    2020-12-15T12:38:07.6NZ mysqld_safe Starting mysqld daemon with databases from /usr/local/var/mysql
    2020-12-15T12:38:09.6NZ mysqld_safe mysqld from pid file /usr/local/var/mysql/nakamuranoMBP.pid ended
  40. 3行目 に ended と出ているのでそこで終了してしまっているようですね……
  41. そういえば Homebrew で MySQL を普通にインストールするとポートが3306になるはずですが8889になってますね。これは MAMP の初期設定値と同じなんですが、 MAMP か同様のものをインストールした覚えはありますか? これにも MySQL が入っているので競合しているかもしれません。 https://www.mamp.info/en/mamp/mac/
  42. いや、変えない方がいいです。 MAMP の MySQL と Homebrew で入れた MySQL が競合してしまうので。
  43. 今までは Homebrew の MySQL を再インストールしたりデータを消して作り直したりしていましたが、 mysql コマンドの接続先が MAMP の MySQL になっていて、データも別の場所にあるのでうまくいっていなかったということですね。
  44. Homebrew の MySQL は止めておいた方がいいです。それとうっかりしていましたが、最初の時点で Laravel アプリからは MySQL に接続できていたので、その設定ファイルにある MySQL ユーザー名と MySQL パスワードで接続できるような気がします。 .env ファイルに DB_USERNAME と DB_PASSWORD が設定してあればそれが使えます。 config/database.php かもしれません。

  45. @suiru_nakamura

    Questioner

    @uasiさん有難うございます!!
    ご連絡有難うございます。帰ったらまた作業しますね。
    ご教授いただき有難うございます!
  46. @suiru_nakamura

    Questioner

    @uasiさん、
    ということはMAMPのmysqlは使用しないということですね!
    了解です!下記コードはdatabase.phpファイルなんですけどsocketがMAMPディレクトリ配下になっているのが原因としてあるのでしょうか?
    本当にこんなにご教授いただき申し訳ございません。。😭

    'mysql' => [
    'driver' => 'mysql',
    'url' => env('DATABASE_URL'),
    'host' => env('DB_HOST', '127.0.0.1'),
    'port' => env('DB_PORT', '8889'),
    'database' => env('DB_DATABASE', 'forge'),
    'username' => env('DB_USERNAME', 'root'),
    'password' => env('DB_PASSWORD', 'root'),
    'unix_socket' => env('DB_SOCKET', '/Applications/MAMP/tmp/mysql/mysql.sock'),
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_unicode_ci',
    'prefix' => '',
    'prefix_indexes' => true,
    'strict' => true,
    'engine' => null,
    'options' => extension_loaded('pdo_mysql') ? array_filter([
    PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
    ]) : [],
    ],
  47. いえ、 MAMP の MySQL を使うことにしたいと思います。

    Homebrew の MySQL はポート番号やデータの場所などが標準的な構成で分かりやすいので使いたいところですが、色々やってもうまく起動できませんでしたし、 MAMP をやめるとすると PHP と Apache の設定もやり直しなので大変かなと。

    で database.php ですが、ソケットファイルが /Applications/MAMP/tmp/mysql/mysql.sock ですね。最初のほうでターミナルから MySQL の接続がうまく行かなかったのはこっちのファイルを参照しなかったからだと思います。

    ただ mysql -uroot -h 127.0.0.1 -P 8889 で接続するときはソケットファイルを使わないのでもう気にしなくて大丈夫です。接続するために知りたい残りの情報は MySQL のユーザー名とパスワードです。

    見た感じユーザー名とパスワードは root になりそうですが……データベース名が妙なのが気になりますね。最初のほうで出たエラーは database_name という名前のデータベースが見つからないと言っていました。

    'database' => env('DB_DATABASE', 'forge')

    これは「環境変数 DB_DATABASE がセットされていればその値を、なければ "forge" を接続先データベース名とする」という設定です。接続先データベース名が database_name になっていたということは、どこかで環境変数が DB_DATABASE="database_name" とセットされていると想像できます。
    そうすると、 DB_USERNAME と DB_PASSWORD もどこかでセットされているかもしれません。

    Laravel の場合は .env というファイルで環境変数をセットできるので見てみてください。
    DB_USERNAME と DB_PASSWORD があれば、その値で MAMP の MySQL に接続できると思います。

    % mysql -u(ユーザー名) -h 127.0.0.1 -P 8889 -p
    Enter password: (パスワード)

    です。
  48. @suiru_nakamura

    Questioner

    @uasiさん、ご返信有難うございます!
    過去のブランチを明後日みたらこんな感じになってました!!
    なので、パスワードなどは設定していなかったと思います。

    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', 'forge'),
    'username' => env('DB_USERNAME', 'forge'),
    'password' => env('DB_PASSWORD', ''),
    'unix_socket' => env('DB_SOCKET', ''),
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_unicode_ci',
    'prefix' => '',
    'prefix_indexes' => true,
    'strict' => true,
    'engine' => null,
    'options' => extension_loaded('pdo_mysql') ? array_filter([
    PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),

    .env.example

    APP_NAME=Laravel
    APP_ENV=local
    APP_KEY=
    APP_DEBUG=true
    APP_URL=http://localhost

    LOG_CHANNEL=stack
    LOG_LEVEL=debug

    DB_CONNECTION=mysql
    DB_HOST=127.0.0.1
    DB_PORT=3306
    DB_DATABASE=laravel
    DB_USERNAME=root
    DB_PASSWORD=

@suiru_nakamura 権限情報ありがとうございます。 MySQL のデータはすべて /usr/local/var/mysql に入っているので ls -la /usr/local/var/mysql が必要ですね(再インストールでもうまくいかなかったとき教えてくだされば)

0Like

Comments

  1. @suiru_nakamura

    Questioner

    @uasiさん、
    再インストールした後に、教えていただいたコマンドを実行しました。
    下のようになりました。

    ls -la /usr/local/var/mysql
    total 222352
    drwxr-xr-x 7 nakamura admin 224 12 15 14:12 .
    drwxrwxr-x 4 nakamura admin 128 12 15 13:54 ..
    -rw-r----- 1 nakamura admin 205 12 15 14:12 ib_buffer_pool
    -rw-r----- 1 nakamura admin 50331648 12 15 14:12 ib_logfile0
    -rw-r----- 1 nakamura admin 50331648 12 15 13:54 ib_logfile1
    -rw-r----- 1 nakamura admin 12582912 12 15 14:12 ibdata1
    -rw-r----- 1 nakamura admin 537252 12 15 14:12 nakamuranoMacBook-Pro.local.err

@uasi さん、おはようございます!
MAMPでの、MYSQLの状態と、それにつなげているアプリケーションのmysqlの設定を記載しました。
MAMPですが、ブラウザでmysqlの情報を確認したところ以下の画像のような状態です。
なので以下のコードのように記載しました!

エラー解決.png

database.php

'mysql' => [
            'driver' => 'mysql',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '8889'),
            'database' => env('DB_DATABASE', 'localhost'),
            'username' => env('DB_USERNAME', 'root'),
            'password' => env('DB_PASSWORD', 'root'),
            'unix_socket' => env('DB_SOCKET', '/Applications/MAMP/tmp/mysql/mysql.sock'),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'prefix_indexes' => true,
            'strict' => true,
            'engine' => null,
            'options' => extension_loaded('pdo_mysql') ? array_filter([
                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
            ]) : [],
        ],

.env.example

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=8889
DB_DATABASE=localhost
DB_USERNAME=root
DB_PASSWORD=root

.env

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=8889
DB_DATABASE=localhost
DB_USERNAME=root
DB_PASSWORD=root

エラー文ですが変わらない状態です。

 php artisan migrate

   Illuminate\Database\QueryException 

  SQLSTATE[HY000] [1049] Unknown database 'localhost' (SQL: select * from information_schema.tables where table_schema = localhost and table_name = migrations and table_type = 'BASE TABLE')

  at vendor/laravel/framework/src/Illuminate/Database/Connection.php:678
    674▕         // If an exception occurs when attempting to run a query, we'll format the error
    675▕         // message to include the bindings with SQL, which will make this exception a
    676▕         // lot more helpful to the developer instead of just the database's errors.
    677▕         catch (Exception $e) {
  ➜ 678▕             throw new QueryException(
    679▕                 $query, $this->prepareBindings($bindings), $e
    680▕             );
    681▕         }
    682▕ 

      +33 vendor frames 
  34  artisan:37
      Illuminate\Foundation\Console\Kernel::handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))

0Like

@suiru_nakamura 情報ありがとうございます。

ホスト名 localhost とデータベース名は無関係です。 DB_DATABASE=localhost だと紛らわしいので変えておいてください。とりあえず DB_DATABASE=my_app_db とセットしたことにして話を進めます。

そうセットして php artisan migrate を実行するとエラーが以下のように変わるはずです。

SQLSTATE[HY000] [1049] Unknown database 'my_app_db' (SQL: select * from information_schema.tables where table_schema = localhost and table_name = migrations and table_type = 'BASE TABLE')

MySQL に接続できているが、データベース my_app_db が見つからないというエラーです。(「データベース」は MySQL の中にあってテーブルをまとめるフォルダのようなもの、と説明しましたね。)データベースは手作業で作る必要があります。

  • mysql -uroot --socket /Applications/MAMP/tmp/mysql/mysql.sock -p
  • mysql -uroot -h 127.0.0.1 -P 8889 -p

このどちらかのコマンドでコンソールを開けるはずです。パスワードを求められたら root と入力してください。

CREATE DATABASE my_app_db; EXIT;

と実行するとデータベースを作れます。これで php artisan migrate が通ると思います。

0Like

Comments

  1. @suiru_nakamura

    Questioner

    @uasiさん、ご返信有難うございます!

    かしこまりました。ご教授いただいたものを実行してみます!
  2. @suiru_nakamura

    Questioner

    @uasiさん!成功しました!!😭
    やりました!
    有難うございます!
  3. おめでとうございます!お疲れ様でした。根気よく対応してくださって助かりました。
  4. @suiru_nakamura

    Questioner

    @uasiさん、こちらこそ本当に感謝しかないです!
    有難うございました!!😇

Your answer might help someone💌