LoginSignup
1
0

More than 3 years have passed since last update.

MySQLには2つの通信方式があるんですってことを知った話

Last updated at Posted at 2019-10-23

とある古いプロダクトの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に接続することができる。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0