回答:
「localhost」または「127.0.0.1」に接続していますか?「localhost」に接続するとソケットコネクタが使用されますが、「127.0.0.1」に接続するとTCP / IPコネクタが使用されることに気付きました。ソケットコネクタが有効になっていない/機能していない場合は、「127.0.0.1」を使用してみてください。
/etc/hosts
Dockerコンテナー内のファイルを見ると、MySqlホスト名がであることがわかりましたmysql
。接続構成でこの同じホスト名を使用すると、問題が解決しました。
mysqlサービスが実行されていることを確認します
service mysqld start
次に、以下のいずれかを試してください。
(mysqlのパスワードを設定していない場合)
mysql -u root
すでにパスワードを設定している場合
mysql -u root -p
service mariadb start
理由mariadb.org/debian-9-released-mariadb-mysql-variant
ファイルmy.cnf(通常はetcフォルダー内)が正しく構成されている場合
socket=/var/lib/mysql/mysql.sock
mysqlが実行されているかどうかは、次のコマンドで確認できます。
mysqladmin -u root -p status
アクセス許可をmysqlフォルダーに変更してみてください。ローカルで作業している場合は、以下を試すことができます。
sudo chmod -R 777 /var/lib/mysql/
それは私のためにそれを解決しました
MySQLサーバーが実行されていないか、それがそのソケットファイルの場所ではありません(my.cnfを確認してください)。
おそらくにmysql.sock
は存在しません/var/lib/mysql/
。
同じファイルが別の場所にある場合は、シンボリックリンクします。
例:私はそれを持っています /data/mysql_datadir/mysql.sock
ユーザーをmysqlに切り替え、以下のように実行します。
su mysql
ln -s /data/mysql_datadir/mysql.sock /var/lib/mysql/mysql.sock
それは私の問題を解決しました
最近のRHELを使用している場合は、mysql dbではなくmariadb(オープンソースのmysql db)を起動する必要がある場合があります。
yum remove mysql
yum -y install mariadb-server mariadb
service mariadb start
その後、通常の方法でmysqlにアクセスできます。
mysql -u root -p
mariadb-server
しmariadb
たら、mysql_secure_installation
デフォルトの安全でない設定をクリーンアップするために実行することを忘れないでください。
私の場合、ソケットファイルを/etc/my.cnf
から内の別の場所に移動し/var/lib/mysql/mysql.sock
ました/tmp/mysql.sock
mysqldサービスを再起動した後でも、接続しようとするとエラーメッセージが表示されます。
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
問題は、クライアントの構成方法にあります。診断を実行すると、実際には正しいソケットパスが表示されます。例えばps aux | grep mysqld
作品:
mysql -uroot -p -h127.0.0.1
mysql -uroot -p --socket=/tmp/mysql.sock
動作しません:
mysql -uroot -p
mysql -uroot -p -hlocalhost
mysql config内のセクションの下に同じソケット行を追加することにより、この問題を修正できます。[client]
mysqldサービスが実行されているかどうかを確認し、実行されていない場合はサービスを開始します。
問題が解決しない場合は/etc/my.cnf
、次のように探して変更します。ここで、で始まる行が表示されsocket
ます。この更新を行う前に、そのファイルのバックアップを取ってください。
socket=/var/lib/mysql/mysql.sock
への変更
socket=/opt/lampp/var/mysql/mysql.sock -u root
MySQLのコミュニティ開発フォークであるMariaDBは、多くのディストリビューションでMySQLのデフォルト実装になっています。
だからまず始めに、
$ sudo systemctl start mariadb
これが失敗した場合は、
$ sudo systemctl start mysqld
次に、mysqlを起動します。
$ mysql -u root -p
現在のところ、Fedoraではパッケージの名前が付けられmariadb
、Ubuntuでは名前が付けられていますmariadb-server
ます。
したがって、システムにまだインストールされていない場合は、インストールする必要があります。
に十分なスペースがあることを確認してください/var
。Mysqlデーモンがドライブに追加情報を書き込めない場合、mysqlサーバーは起動せず、エラーが発生しますCan't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
使用を検討してください
expire_logs_days = 10
max_binlog_size = 100M
これにより、ディスク使用量を抑えることができます。
innodb_buffer_pool_size
することmy.cnf
でした。のような小さな値に設定することinnodb_buffer_pool_size = 50M
は、この仮説を破棄するための良いテストです;)
mysqlが以前は機能していて突然停止した場合は、サーバーを「再起動」するだけです。
私のCentOS VPSでこの問題に直面していました。->
常に得ていた
Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'(2)
すべてのテクニックを試し、最後にサーバーを再起動すると問題が修正されました->
shutdown -r now
お役に立てれば !!
/ var / lib / mysqlのファイルを変更する場合(コピーまたは置換など)、ファイルの所有者をmysqlに設定する必要があります。mariadb.serviceの再起動が失敗した場合、これは非常に重要です
chown -R mysql:mysql / var / lib / mysql / *
chmod -R 700 / var / lib / mysql / *
MySQLサーバーが正しくインストールされていることを確認してください。このエラーに何度も遭遇し、ソケットからのデバッグは複雑だと思います。つまり、再インストールする方が簡単かもしれません。
CentOS 7を使用している場合、正しいインストール方法は次のとおりです。
まず、mysqlコミュニティソースを追加します
yum install http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
次に、それをインストールすることができます yum install mysql-community-server
systemctlで起動します。 systemctl start mysqld
私の問題は、mysqlを正常にインストールし、それが正常に機能することでした。
しかし、ある日、同じエラーが発生しました。
ソケット '/var/lib/mysql/mysql.sock'(2)を介してローカルMySQLサーバーに接続できません
また、mysql.sockファイルは存在しませんでした。
この解決策で問題が解決し、mysqlが再び稼働しました。
rootとしてログインします。
sudo su -
実行:
systemctl stop mysqld.service
systemctl start mysqld.service
systemctl enable mysqld.service
ルートとしてテスト:
mysql -u root -p
これで、mysqlが稼働しているはずです。
これが他の誰かにも役立つことを願っています。
mysqlはmy.cnfファイルからソケットファイルの場所の情報を読み取りますが、mysql_secure_installationプログラムはそれを正しく行わない場合があることに注意してください。
あなたが私のようなもので、インストール時に物事をシャッフルした場合、mysqlでデータベースにうまく接続できる状況に入る可能性がありますが、物事は保護されません(とにかくそのスクリプトを使用しません)。
これを修正するには、sreddyからの提案が適切に機能します。スクリプトがソケットを期待する場所から実際の場所へのソフトリンクを作成します。例:
ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock
(私は/ tmp /をソケットのデフォルトの場所として使用しています)
このエラーを再現する1つの方法:外部サーバーに接続するつもりでしたが、存在しないローカルサーバーに接続する場合:
eric@dev ~ $ mysql -u dev -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through
socket '/var/lib/mysql/mysql.sock' (2)
eric@dev ~ $
したがって、次のようにホストを指定する必要があります。
eric@dev ~ $ mysql --host=yourdb.yourserver.com -u dev -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 235
Server version: 5.6.19 MySQL Community Server (GPL)
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+-------------------------+
| Database |
+-------------------------+
| information_schema |
| mysql |
| performance_schema |
+-------------------------+
3 rows in set (0.00 sec)
mysql> exit
Bye
eric@dev ~ $
これは愚かな提案かもしれませんが、DBがlocalhostでホストされていることを100%確認してください。たとえば、ネットワーク管理者がAmazon DBホスティングを選択(または変更)した場合、代わりにそのホスト名が必要になります。
これは、ディスク領域が不足している場合に問題になります。解決策は、HDDから一部のスペースを解放することです。
説明を読むためにもっと読んでください:
LinuxでMySQLを実行している場合は、disk freeコマンドでHDDの空き容量を確認します。
df
あなたがそのようなものを手に入れているなら:
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 5162828 4902260 0 100% /
udev 156676 84 156592 1% /dev
/dev/sda3 3107124 70844 2878444 3% /home
その後、これが問題であり、今あなたは解決策を持っています!
mysql.sockはルートフォルダーの下にあるmysqlフォルダーに作成されるため、スペースが不足しているため、ルートフォルダーを作成できません。
mysqlディレクトリの下で定期的にlsコマンドを実行している場合(openSUSE 11.1は/ var / lib / mysqlにあります)、次のようになります。
hostname:/var/lib/mysql #
.protected IT files ibdata1 mysqld.log systemtemp
.tmp NEWS greekDB mysql mysqld.pid test
ARXEIO TEMP1 ib_logfile0 mysql.sock polis
DATING deisi ib_logfile1 mysql_upgrade_info restore
mysql.sockファイルが頻繁に表示されたり消えたりします(lsで割り当てて、mysql.sockファイルがフォルダにあるインスタンスにヒットする必要があります)。
これは、十分なディスク領域がないために発生しました。
私はいくつかの人々を助けることを願っています!!!! ありがとう!