mysql.sock
は UNIX ドメインソケットファイル
です[^socket_mac]。
[^socket_mac]: Mac はデフォルトで MySQL サーバー( mysqld )起動時に /tmp フォルダに作成します。
UNIX ドメインソケットファイル( mysql.sock )を使用することで同一物理ホストに存在する MySQL サーバーにプロセス間通信で接続できます。
TCP / IP 接続より高速な通信ができます。
MySQL サーバー接続時に接続先ホストを省略した場合もしくは localhost を指定した場合は UNIX ドメインソケットファイルを使用します。
ホストが指定されていないか、localhost である場合、ローカルホストへの接続が発生します:
Windows では、共有メモリー接続をサポートするために shared_memory システム変数を有効にしてサーバーを起動した場合、クライアントは共有メモリーを使用して接続します。
Unix では、MySQL プログラムは、他のネットワークベースのプログラムと比較して予想とは異なる方法で、ホスト名 localhost を特別に処理: クライアントは Unix ソケットファイルを使用して接続します。 ソケット名の指定には、--socket オプションまたは MYSQL_UNIX_PORT 環境変数を使用できます。
ref. 4.2.4 コマンドオプションを使用した MySQL Server への接続
mysql.sock の場所は下記 SQL で確認できます。
mysql > select @@socket;
+-----------------------------+
| @@socket |
+-----------------------------+
| /var/run/mysqld/mysqld.sock |
+-----------------------------+
1 row in set (0.00 sec)
-- または
mysql > show variables where Variable_name = 'socket';
+---------------+-----------------------------+
| Variable_name | Value |
+---------------+-----------------------------+
| socket | /var/run/mysqld/mysqld.sock |
+---------------+-----------------------------+
1 row in set (0.04 sec)
UNIX ドメインソケットファイルで接続します。
$ mysql -u root -p // または mysql -h localhost -u root -p
// ソケットファイルを明示的する場合
// mysql -u root -p --socket /var/run/mysqld/mysqld.sock
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.39 MySQL Community Server - GPL
UNIX ドメインファイルを削除してドメインファイル経由で接続できないことを確認します。
$ rm /var/run/mysqld/mysqld.sock
$ mysql -u root -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
ホストを指定すれば TCP / IP 経由で接続できることを確認します。
$ 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 10
Server version: 8.0.39 MySQL Community Server - GPL
my.conf でパスを指定します。 mysqld と client は同じパスにします(同一物理ホストのプロセス間通信に使用するので同じファイルになります)。
# my.cnf
[mysqld]
// ...
socket=/path/to/mysql.sock
// ...
[client]
// ...
socket=/path/to/mysql.sock
// ...