明日から本気だす

データベース好きなサポートエンジニアのメモです.

Oracle VM Manager の MySQL 接続時に Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' が発生

TL;DR

  • Oracle VM Manager の MySQLmysql クライアントで接続する際に Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' が発生した
  • Oracle VM Manager の MySQL は my.cnf を /u01/app/oracle/mysql/data に配置し、起動時に --defaults-file で指定していた
  • mysql コマンドクライアントの -S オプションで sock ファイルの PATH を指定し接続できた

環境

事象

Oracle VM Manager の内部では Weblogic Server と MySQL がインストールされています。Oracle VM Manager 上の MySQL について確認したいと思い mysql コマンドで接続しようとしたところ、以下のメッセージで接続ができませんでした。

$ mysql -u root -p
Enter password: 
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

/var/lib/mysql 配下を確認すると mysql.sock がないので、ネットの情報などから touch コマンドで sock ファイルを手動作成しましたが事象は変わらず。

調べたこと

OracleVM の MySQL は起動時に /u01/app/oracle/mysql/data 配下の my.cnf ファイルを --defaults-file オプションで指定しているようでした。

$ systemctl status ovmm_mysql.service 
● ovmm_mysql.service - LSB: start and stop MySQL
   Loaded: loaded (/etc/rc.d/init.d/ovmm_mysql; bad; vendor preset: disabled)
   Active: active (running) since 火 2021-10-05 08:42:59 JST; 11h ago
     Docs: man:systemd-sysv-generator(8)
  Process: 1039 ExecStart=/etc/rc.d/init.d/ovmm_mysql start (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/ovmm_mysql.service
           ├─1077 /bin/sh /usr/bin/mysqld_safe --defaults-file=/u01/app/oracle/mysql/data/my.cnf --user=oracle --datadir=/u01/app/oracle/mysql/data --pid-file=/u01/app/o...
           └─1612 /usr/sbin/mysqld --defaults-file=/u01/app/oracle/mysql/data/my.cnf --basedir=/usr --datadir=/u01/app/oracle/mysql/data --plugin-dir=/usr/lib64/mysql/pl...

上記パス(/u01/app/oracle/mysql/data)の my.cnf で [client] グループに sock は指定されていたのですが、my.cnf は /u01/app/oracle/mysql/data のみしか存在しなかったため mysql コマンドクライアント起動時に、Build 時のデフォルトである /var/lib/mysql/mysql.sock が参照されてしまっていた(?)模様…

$ cat /u01/app/oracle/mysql/data/my.cnf | grep -A 2 "\[client\]"
[client]
socket=/u01/app/oracle/mysql/data/mysqld.sock
port=49500

$ mysql --help | grep my.cnf
                      order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf 

対策

以下のいずれかで無事 Oracle VM Manager 上の MySQL に接続できました。

  • mysql コマンドクライアントで接続時に -S オプションで sock ファイルを指定
$ mysql -S /u01/app/oracle/mysql/data/mysqld.sock -u root -p
  • mysql コマンドクライアントで接続時に --defaults-file オプションで my.cnf を指定
mysql --defaults-file=/u01/app/oracle/mysql/data/my.cnf -u root -p