私の問題は、mysqlのインストールでrootとしてログインできなくなったことから始まりました。 パスワードを設定せずにmysqlを実行しようとしたのですが...コマンドを実行するたびに
# mysqld_safe --skip-grant-tables &
プロンプトが表示されません。私は、パスワードを回復するためのこれらの指示に従おうとしていました。
画面はちょうどこのようになっています。
root@jj-SFF-PC:/usr/bin# mysqld_safe --skip-grant-tables
120816 11:40:53 mysqld_safe Logging to syslog.
120816 11:40:53 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
と表示され、パスワードをリセットするためのSQLコマンドを入力するプロンプトが表示されません。
また、CTRL + C を押して終了させると、以下のメッセージが表示されます。
error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)'
Check that mysqld is running and that the socket: '/var/run/mysqld/mysqld.sock' exists!
コマンドを再試行し、十分に時間を置くと、確かに以下の一連のメッセージが表示されます。
root@jj-SFF-PC:/run/mysqld# 120816 13:15:02 mysqld_safe Logging to syslog.
120816 13:15:02 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
120816 13:16:42 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
[1]+ Done mysqld_safe --skip-grant-tables
root@jj-SFF-PC:/run/mysqld#
しかし、ルートとしてログインしようとすると、次のようになります。
# mysql -u root
以下のようなエラーメッセージが表示されます。
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
確認したところ、/var/run/mysqld/mysqld.sock
ファイルが存在しませんでした。フォルダは存在しますが、ファイルは存在しません。
また、役に立つかどうかわかりませんが、find / -name mysqld
を実行したところ、次のように出てきました。
/var/run/mysqld - folder
/usr/sbin/mysqld - file
/run/mysqld - folder
私はLinuxもMySQLも初めてなので、これが普通なのかどうかはわかりません。しかし、参考になればと思い、この情報を掲載します。
ついにmysqlをアンインストールして再インストールすることにしました。
apt-get remove mysql-server
apt-get remove mysql-client
apt-get remove mysql-common
apt-get remove phpmyadmin
すべてのパッケージを上記と同じ順番で再インストールした後、phpmyadminのインストール中に、同じエラーが発生しました。
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
そこで、再度、アンインストール/再インストールを試みました。今回は、パッケージをアンインストールした後、すべてのmysqlファイルとディレクトリの名前をそれぞれの場所で手動でmysql.bad
に変更しました。
/var/lib/mysql
/var/lib/mysql/mysql
/var/log/mysql
/usr/lib/perl5/DBD/mysql
/usr/lib/perl5/auto/DBD/mysql
/usr/lib/mysql
/usr/bin/mysql
/usr/share/mysql
/usr/share/dbconfig-common/internal/mysql
/etc/init.d/mysql
/etc/apparmor.d/abstractions/mysql
/etc/mysql
その後、mysql-server
とmysql-client
を再度インストールしようとしました。 しかし、パスワードの入力を求められないことに気がつきました。 管理者のパスワードを要求するようになっているのではないでしょうか?
システム上のすべてのソケットファイルを見つけるには、次のように実行します。
sudo find / -type s
私の Mysql サーバシステムでは、/var/lib/mysql/mysql.sock
でソケットを開いていました。
ソケットが開かれている場所がわかったら、/etc/my.cnfファイルにソケットファイルのパスを記述した行を追加または編集してください。
socket=/var/lib/mysql/mysql.sock
コマンドラインの実行ファイルを起動したシステムスタートアップスクリプトが、--socket=path
というフラグを指定している場合があります。このフラグがmy.cnfの場所を上書きしてしまうと、my.cnfファイルが示す場所にソケットが見つからなくなってしまいます。 そうすると、mysqlコマンドラインクライアントを実行しようとすると、ソケットを見つけるためにmy.cnfを読みますが、サーバが作成した場所から外れているため、ソケットが見つかりません。 そのため、ソケットがどこにあるかを気にしないのであれば、my.cnfを一致するように変更するだけで動作するはずです。
次に、mysqld プロセスを停止します。 これをどのように行うかはシステムによって異なります。
もしあなたがLinuxシステムのスーパーユーザーなら、あなたのMysqlセットアップが使用している特定の方法がわからない場合は、以下のいずれかを試してみてください。
service mysqld stop
。/etc/init.d/mysqld stop
。mysqladmin -u root -p shutdown
.pkill -9 mysqld
。pgrep mysql
または ps aux | grep mysql | grep -v grep
のいずれかで mysql のプロセス ID を見つける。4969
である場合、kill -9 4969
で終了する。この後、/var/run/mysqld/
にある pid ファイルを探して削除するとよいでしょう。
ソケットのパーミッションが、mysqld を実行しているどのユーザでも読み書きできるようになっていることを確認します。 簡単なテストとしては、ソケットを完全に読み書きできるようにして、それでも動作するかどうかを確認します。
chmod 777 /var/run/mysqld/mysqld.sock
これで問題が解決したら、セキュリティ設定に基づいて必要に応じてソケットのパーミッションやオーナーシップを調整することができます。
また、ソケットが存在するディレクトリには、mysqldプロセスを実行しているユーザが到達できる必要があります。
解決方法はもっと簡単です。
1.まず、mysql.sock
ファイルがどこにあるかを確認します(ターミナルで "sudo find / -type s")。私の場合は /opt/lampp/var/mysql/mysql.sock
にありました。
2.ターミナルを起動して
sudo Nautilus<br> これで、スーパーユーザ権限でファイルマネージャが起動します。 3.3. Nautilusから
mysql.sockファイルがある場所に移動します。 4.ファイルの上で右クリックし、*Make Link*を選択します。 5.リンクファイルの名前を
mysqld.sockに変更し、ファイルを右クリックして *Cut* します。 6.6.
/var/runに移動して、
mysqldという名前のフォルダを作成し、それを入力します。 7.リンクファイルを右クリックして、*貼り付けます。 8.ほら!これで
/var/run/mysqld/mysqld.sockに
mysqld.sock` ファイルができあがりました :)