M1 macでmysqlをインストールと起動が出来なかった忘備録

## インストール
``mysql２``を``bundle install``をした時に、転けてしまった。

```
$ bundle install
・
・
省略
・
・
-----
Don't know how to set rpath on your system, if MySQL libraries are not in path mysql2 may not load
-----
-----
Setting libpath to /usr/local/opt/mysql@5.7/lib
-----
creating Makefile

current directory: /Users/fukudatakumi/tabelog/vendor/bundle/ruby/2.5.0/gems/mysql2-0.5.2/ext/mysql2
make "DESTDIR=" clean

current directory: /Users/fukudatakumi/tabelog/vendor/bundle/ruby/2.5.0/gems/mysql2-0.5.2/ext/mysql2
make "DESTDIR="
compiling client.c
・
・
省略
```
結論から言うと、``LDFLAGS``、``CPPFLAGS``というをオプション指定した上で``bundle install``。

設定するべき値は``brew info openssl``で確認できる。(``openssl``のインストールが要るっぽい)

```
$ brew info openssl

・
省略
・

If you need to have openssl first in your PATH run:
  echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.bash_profile

For compilers to find openssl you may need to set:
  export LDFLAGS="-L/usr/local/opt/openssl/lib"
  export CPPFLAGS="-I/usr/local/opt/openssl/include"
・
省略
・
```

``export LDFLAGS="-L/usr/local/opt/openssl/lib"``
``export CPPFLAGS="-I/usr/local/opt/openssl/include"``

この2行を``bundler``にコンパイルオプションを指定。

```
bundle config build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include"
```
これで``bundle install``すれば本来無事にインストールできるはずだが、新たに別のエラーが出た。

```
34 warnings generated.
linking shared-object mysql2/mysql2.bundle
ld: library not found for -lzstd
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [mysql2.bundle] Error 1
```
``ld: library not found for -lzstd``ここが問題っぽい。
[この記事](https://nomad.office-aship.info/library-not-found-for-lzstd-lssl/)を参考に、またコンパイルオプションを指定し直した。

```
% bundle config --local build.mysql2 --with-ldflags=-L/opt/homebrew/lib --with-opt-dir=/opt/homebrew/opt/openssl
```
すると無事インストールできた。

## mysql起動
やっとインストールできたので``db:create``したら今度は下記エラーが出た。

よく見かける解決法で、``mysql.sockファイル``が無いから、``sudo touch /tmp/mysql.sock``でファイル作ると次は``(2)``のところが、今度は``（38）``になる。ディレクトリ権限が原因だとか。（▶︎[分かりやすい記事がここに](https://qiita.com/carotene4035/items/e00076fe3990b9178cc0)）

```
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
  ... /tmp/mysql.sock がない時に発生した

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (38)
  ... /tmp/mysql.sock を作った後に発生した

ERROR! The server quit without updating PID file (/usr/local/var/mysql/xxxxx.pid).
#筆者はパスを変えていたのでこっち→(/opt/homebrew/var/mysql/xxx.local.pid)
  ... mysql.server start した時に発生した
```

ただ他の記事も見てみると、先に``sudo touch /tmp/mysql.sock``で作成するとあまり良く無いそう。

``PID file``が関係あるそう。多くのパターンはこれらに該当する。

1.そもそも``pidファイル``が存在していない。
2.``pidファイル``に適切な権限が設定されていない
(1.に当てはまる場合は自動的に2.にも引っかかる)

じゃあ``xxx.local.pidファイル``を作成したらできるのでは無いかと思い、ファイル作成し再度``mysql.server start``してもまたエラーになり、``The server quit without updating PID file xxx.local.pid　``と同じ文が返ってきた。

よくよく見てみると、先程作成した``xxx.local.pid``がなぜか消えている。``mysql.server start``する度に消えている？のかこれで相当時間を食った。

下記、筆者が行ったコマンド。

```
①sudo touch /tmp/mysql.sock
　　→これ意味ないかも…

②sudo chown mysql:mysql
　　→権限を与えたかったがコマンドがミスってた可能性

③opt/homebrew/var/mysql/xxx.local.pidを手動で作成
　　→これも意味ないかも…

④sudo rm /tmp/mysql.sock
　　→①のファイルを削除するため

⑤cd /opt/homebrew/var
　　→sqlをパスで設定してたなそういやこっちに移動して権限与えてみよ

⑥chown -R _mysql:_mysql mysql

⑦mysql.server start
　　→できた
```

コマンドを振り返って見てみると、ただパスと権限を間違えていた様子…

## bundle exec rails db < db/seed.sql
MySQLの8系を使う場合は以下のエラーが出ると思われる。``db/seed.sql``から``NO_AUTO_CREATE_USER``の記述を全て削除することで解決できるそう。

```
$ rails db < db/seed.sql                                                                                                                                
ERROR 1231 (42000) at line 3348: Variable 'sql_mode' can't be set to the value of 'NO_AUTO_CREATE_USER'
```

## 関係ありそうな単語
**プロセス**
メモリを使って、何かやっているプログラムひとつひとつのこと。実行中のプログラム。

**pid**
``pidファイル``の``pid``とは、プロセスIDのこと（Process ID）。「プロセスに割り振られた管理者用の番号」。

## 参考記事
[rails の bundle install で mysql2 library not found for -lzstd, -lssl エラー](https://nomad.office-aship.info/library-not-found-for-lzstd-lssl/)
[【Rails】MySQL2がbundle installできない時の対応方法](https://qiita.com/fukuda_fu/items/463a39406ce713396403)
[mysql2 gemがインストールできない時の対策 全部のせ](https://qiita.com/ts-3156/items/056689b2f82696ec563e)
[mysqlが起動できない（Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)）](https://qiita.com/carotene4035/items/e00076fe3990b9178cc0)
[mysql 起動時のThe server quit without updating PID file エラーの回避法](https://qiita.com/jonakp/items/477a18d4a94c01a31583)
[mysql起動時でエラーが起きた時の対処](https://qiita.com/makuramoto1/items/52159370d00bef708595)
[[MySQL]homebrewでインストールしたMySQLが起動できなくなった話](https://qiita.com/tosite0345/items/3f346780e14feca48f55)
[MySQLが起動しない（The server quit without updating PID file ~~~）](https://zenn.dev/ogakuzuko/articles/1d9d20fb5cbef8)