Mysqlを導入した際に気になったことがあったので、色々調べてみました。
この記事を読んでもらうことで、エラーが起きたけどなんとなしに解決できた、できなかったと言う人を減らしたいと考えています!
目的
- データベースのファイルが入っているディレクトリを知る
- pidファイルの役割を理解する
- mysql.sockについて理解する
(前提、環境)
mac
macOS Mojave 10.14.5
ruby 2.5.1
rails 5.2.3
mysql@5.6
はじめに
前提
- Ruby on Rails によるアプリケーション
- myaql2を利用している
- Homebrewを用いてインストール
①データベース(mysql)のファイルってどこに保存されているか?
/usr/local/var/mysql
MySQLをダウンロードする際、自動で生成されます。
今まで作成したデータベースのファイルがこのディレクトリの配下に置かれ、Sequel ProなどのGUIのアプリはこのファイル群を読んでいます。
Finderで見られるのか??
Command + Shift + G
を押します。
出てきたウィンドウに、パスを入力します。
ここで「移動」を押すと、Finderで対象のディレクトリを見ることができます。
②pidファイルとは?
pidとはprocess idの略です。
pidファイルには、process idが記載されます。
対象のファイルは前述の「/usr/local/var/mysql」ディレクトリ内にある「xxxx.local.pid」です。
これの中身を見てみます。
less A-289.local.pidとタイプします。A-289の部分はご自身のファイルに合わせてください。
※lessコマンドはターミナル上でファイルを開く際に使用します。
中身が見れれば良いので、viewコマンドやvimコマンド、catコマンドでも大丈夫です。
すると、501という数字が出てきました。
これがProcess IDです。
これらのプロセス(実行中のプログラム)には自動的に番号が与えられます。
これがプロセス識別子、Process IDです。
この番号が書かれるファイルが「PID」ファイルです。
コンピュータはこのプロセス識別子に対して、「動け!」と命令しています。
つまり、この番号が無いと動くことができません。
Process IDとは?
Process IDは「プロセス識別子」というものです。
余談:プロセスとは?
プロセスとは、メモリを使って動いているプログラムひとつひとつのことです。
パソコンは動作中、メモリと呼ばれるハードウェア上で様々なアプリケーションを動作させています。
▼メモリの実物 パソコンのマザーボード上に刺さっています。
The server quit without updating PID fileのエラー
環境構築のエラーでよく見かけるこのエラー文は、このプロセス識別子が無いことを示しています。
$ mysql.server start
ERROR! The server quit without updating PID file (/usr/local/var/mysql/username.local.pid).
前述したように、このプロセスIDは起動すると自動的に付与されます。
意図的に作成する必要はありません。
プロセスを確認するには??
MACでは、「アクティビティモニタ」というもので現在稼働中のプロセスを確認することができます。
※Windowsで言うタスクマネージャーのようなもの。
開き方は次の通りです。
①アプリケーションディレクトリの「ユーティリティ」をダブルクリック。
②その中にある、「アクティビティモニタ」をダブルクリック。
③「メモリ」タブをクリック。
ここに、PIDと書かれた列があります。これがプロセス識別子です。
見ると、mysqldのPID列には「501」と書かれています。
※mysqldの「d」は「demon(デーモン)」のdです。説明については割愛します。
③mysql.sockとは?
mysql.sockはmysqlが起動すると自動で生成されるファイルです。
ソケットファイルと呼ばれます。
通常は/tmp/ディレクトリに作成されます。
※tmpは「temporary」の略です。日本語にすると「一時的な」という意味です。
一時的に生成されたファイルがこの/tmpディレクトリに居ます。このディレクトリにあるファイルは一定期間が経つと自動で削除されます。mysql.sockの場合、PCをシャットダウンした際に自動で消えます。
実際に見てみましょう。
ルートディレクトリへ移動後、/tmpディレクトリへ移動します。lsコマンドを叩くと、mysql.sockというファイルが出てきます。
※Finder上では見られません
A-289:mysql user-name$ cd /
A-289:/ user-name$ cd tmp
A-289:tmp user-name$ ls
com.apple.launchd.cBoyiIPJac com.apple.launchd.cyM9k7egXe mysql.sock powerlog
これはMySQLのソケットファイルです。
ソケットファイルとはソケットが書かれたファイルのことです。
ソケットとは?
ソケットとは、「プログラムとネットワークを繋げる接続口のこと」です。
言葉だけではよく分からないので、次の図を見てください。
実行中のプログラムのネットワークと繋がるクチにあたるものが「ソケット」です。
MySQLの場合、「mysql.sock」というファイルがこのクチにあたります。
これが無いとネットワークと通信することができません。
つまり、サーバーに接続できず、データベースとしての機能を果たすことができなくなるということになります。
Can’t connect to local MySQL server through socketのエラー
環境構築のエラーでよく見かけるこのエラー文は、MySQLのネットワークとの接続口が無いことを示しています。
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock'
こちらのファイルも自動で生成されるものです。
通常はtouchコマンドで手動作成する必要はありません。
まとめ
①DBのファイルは「/usr/local/var/mysql」にある。
②pidファイルはProcess ID(プロセス識別子)が書かれたファイルである。
③プロセス識別子とは動作しているプログラムに自動的に付与される番号のことである。
④ソケットとは、プログラムとネットワークとの接続口である。
終わりに
どうでしたでしょうか。
mysql系のエラーを解決しようとするとPIDファイルやmysql.sockをtouchコマンドで自作しましょうと言ったブログ記事が出てくるのですが、作っても意味がないんですよね・・・
僕もプログラミング始めたての時、このmysql系のエラーが起きた時にそう言った記事をみて試しては上手くいかないを繰り返していたので、この記事をご覧いただいた方にはそう言った無駄な試行をしなくても良くなればと思っています!