クライアントからMySQLサーバーに接続する場合、MySQLサーバーがローカルマシンでUnixなら、ソケット通信で接続できます。 サーバーが他のマシンになる場合は、TCP/IPなどで接続することになります。 ここではそれらの接続に関するメモです。
接続
mysqlコマンドからMySQLサーバーへの接続方法について
-
UNIXドメインソケットでの接続
ローカルでMySQLが動作している場合、mysqlコマンドは-hオプション無しで、MySQLサーバーに接続できます。 このとき使用されるのがUNIXドメインソケットでのプロセス間通信です。
例
上記を実行したとき、以下のようなエラーメッセージが表示されて接続できない場合、MySQLのクライアントとサーバーのsocketの設定が異なっています。
$ mysql -u root
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
この場合は、my.cnfの[mysqld]と[client]に、socketの項目を追加して同じファイルパスを指定します。 UNIXドメインソケットでは、パラメータで指定したファイルパスでプロセス間通信の相手が決まります。 そのため、ファイルパスをクライアントとサーバーで同じにしてプロセス間通信ができるようにします。
例
[mysqld] socket=/var/lib/mysql/mysql.sock [client] socket=/var/lib/mysql/mysql.sock補足 CentOS 7.1にソースからインストールしたmysqlコマンドは、my.cnfの[client]にsocketが指定されていないと、デフォルトで/tmp/mysql.sockをUNIXドメインソケットで使用するようです。 そのため、[client]のsocketを指定しないで、[mysqld]のsocketに/tmp/mysql.sockと指定する方法もあります。
[mysqld] socket=/tmp/mysql.sock
my.cnfを変更しない場合
my.cnfを変更したくない場合は、mysqlコマンドに -SオプションにUNIXドメインソケットのパスを指定します。
$ mysql -u root -S /var/lib/mysql/mysql.socket
または、-hオプションに127.0.0.1を指定します。
$ mysql -u root -h 127.0.0.1注. -hにlocalhostを指定した場合、ソケットのエラーメッセージが表示されるので、接続にUNIXドメインソケットが使用されるようです。
$ mysql-u root -h localhost ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
ソースでのUNIXドメインソケットのデフォルトパス定義
ソースからインストールした場合、Cのヘッダーファイルがインストールされますが、そこにUNIXドメインソケットのデフォルトパスが定義されています。 インストール先が/usr/local/mysql/の場合、以下のようになっていました。
定義ファイルは /usr/local/mysql/include/mysql_version.h
....
#ifndef _mysql_version_h
#define _mysql_version_h
#ifdef _CUSTOMCONFIG_
#include >custom_conf.h<
#else
#define PROTOCOL_VERSION 10
#define MYSQL_SERVER_VERSION "5.6.25"
#define MYSQL_BASE_VERSION "mysqld-5.6"
#define MYSQL_SERVER_SUFFIX_DEF ""
#define FRM_VER 6
#define MYSQL_VERSION_ID 50625
#define MYSQL_PORT 3306
#define MYSQL_PORT_DEFAULT 0
#define MYSQL_UNIX_ADDR "/tmp/mysql.sock"
#define MYSQL_CONFIG_NAME "my"
#define MYSQL_COMPILATION_COMMENT "Source distribution"
/* mysqld compile time options */
#endif /* _CUSTOMCONFIG_ */
#ifndef LICENSE
#define LICENSE GPL
#endif /* LICENSE */
...