とある古いプロダクトのDBに入れない・・・
いつもの下記コマンドでログインを試みましたところ・・・
$ mysql -uroot -p
下記の出力が出てきてしまい、入れません。
Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'
sockファイルが無いみたいなので、これを使って、
$ ps aux | grep mysql
root 9004 0.0 0.0 115356 3204 ? S Jan22 0:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/tmp/mysql.sock --pid-file=/var/run/mysqld/mysqld.pid --basedir=/usr --user=mysql
mysql 9208 0.0 11.3 1504812 459820 ? Sl Jan22 133:13 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/tmp/mysql.sock
これを見る限り、tmpの下にありそうですね。
シンボリックリンクを貼ってあげればよさそう・・・と思ったのですが、このサーバーあまりにも昔のものすぎてサーバー管理者不明、ドキュメントも無いのでsudoでコマンド実行するためのパスワードが不明ということで、OMG状態でしたので今回は、mysqlになんとか接続できる方法をベテランのエンジニアの方に教えてもらいました。
解決策
mysqlの二つ目の通信方法、TCP接続を利用する。
mysqlのデータベースでのユーザーはhostと紐づけられており、
mysql> select host,user from mysql.user;
+-----------+------------------+
| host | user |
+-----------+------------------+
| localhost | dev-user |
| localhost | mysql.infoschema |
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | root |
+-----------+------------------+
上記のようになっているので、-hのオプションを指定することによって、ソケット通信を使用せずに、TCP接続で入ることができる。ソケットファイルが無くて通信できなくても、こっちを使えばいいじゃないっていうお話でした。
$ mysql -h 127.0.0.1 -u ユーザー名 -p
もしくは
$ mysql -h localhost -u ユーザー名 -p
こちらでもDBに接続することができる。