Tidak dapat terhubung ke server MySQL lokal melalui socket '/var/lib/mysql/mysql.sock' (2)

255

Saya mendapatkan kesalahan berikut ketika saya mencoba terhubung ke mysql:

Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

Apakah ada solusi untuk kesalahan ini? Apa yang mungkin menjadi alasan di baliknya?

Atul
sumber
Saya telah menjawab ini di sini, silakan periksa tautan di bawah ini: stackoverflow.com/a/35577309/4773290
Pratik Patil

Jawaban:

222

Apakah Anda terhubung ke "localhost" atau "127.0.0.1"? Saya perhatikan bahwa ketika Anda terhubung ke "localhost" konektor soket digunakan, tetapi ketika Anda terhubung ke "127.0.0.1" konektor TCP / IP digunakan. Anda dapat mencoba menggunakan "127.0.0.1" jika konektor soket tidak diaktifkan / berfungsi.

Jan Thomä
sumber
27
Dalam hal ini, Anda mungkin harus memeriksa apakah server MYSQL Anda benar-benar berjalan.
Jan Thomä
3
Anda juga dapat memaksa menggunakan soket dengan parameter soket (-S dengan / usr / bin / mysql) dan memaksa TCP / IP dengan menyediakan port (-P dengan / usr / bin / mysql.)
Kaoru
Menggunakan nama jaringan yang sepenuhnya memenuhi syarat selain localhost bekerja untuk saya. Pastikan itu dinyatakan dalam file 'host' sisi klien.
Fabien Haddadi
2
Catatan untuk pengguna cygwin: jika klien cygwin mysql mencoba menghubungkan ke server mysql WAMP lokal misalnya, gunakan -h <hostname selain localhost>. Jangan mencoba membuat file mysql.sock dan mendeklarasikannya dalam file my.cnf apa pun, itu tidak akan berfungsi.
Fabien Haddadi
Nama host yang salah memang memberi saya kesalahan yang sama persis. Melihat /etc/hostsfile dalam wadah buruh pelabuhan menunjukkan kepada saya nama host MySql mysql. Menggunakan nama host yang sama ini di konfigurasi koneksi saya menyelesaikan masalah.
Stephane
188

Pastikan layanan mysql Anda berjalan

service mysqld start

Kemudian, coba salah satu dari yang berikut ini:

(jika Anda belum menetapkan kata sandi untuk mysql)

mysql -u root

jika Anda sudah mengatur kata sandi

mysql -u root -p
Haja Peer Mohamed H
sumber
5
pada rilis debian yang lebih baru: service mariadb startkarena mariadb.org/debian-9-released-mariadb-mysql-variant
Zahra
2
Beri dia medali.
Siraj Alam
Ini jawaban untuk saya. Karena saya menggunakan mariadb solusinya adalah menjalankan yang berikut ini: "sudo systemctl start mariadb". Semua baik-baik saja setelah itu.
Mohsen,
Beri @Zahra medali
Ahmed C
28

Jika file Anda my.cnf (biasanya di folder dll) sudah dikonfigurasi dengan benar

socket=/var/lib/mysql/mysql.sock

Anda dapat memeriksa apakah mysql berjalan dengan perintah berikut:

mysqladmin -u root -p status

coba ubah izin Anda ke folder mysql. Jika Anda bekerja secara lokal, Anda dapat mencoba:

sudo chmod -R 777 /var/lib/mysql/

yang menyelesaikannya untukku

marimaf
sumber
Ini juga berfungsi untuk saya, tetapi setelah saya memutakhirkan ke versi terbaru kemudian muncul masalah ini, bolehkah saya tahu mengapa ini terjadi?
Ben
sudo chmod -R 777 / var / lib / mysql / Bekerja untuk saya dengan masalah yang saya miliki dalam memulai wadah buruh pelabuhan mysql
user3152459
23

Server MySQL tidak berjalan, atau itu bukan lokasi file soketnya (periksa my.cnf).

Dan Grossman
sumber
Saya memiliki masalah yang dijelaskan di atas dan ini adalah masalahnya. Terima kasih.
oshirowanen
3
Di mana itu untuk menginstal Homebrew?
pal4life
19

Kemungkinan besar mysql.socktidak ada di /var/lib/mysql/.

Jika Anda menemukan file yang sama di lokasi lain maka symlink:

Sebagai contoh: Saya memilikinya /data/mysql_datadir/mysql.sock

Alihkan pengguna ke mysql dan jalankan seperti yang disebutkan di bawah ini:

su mysql

ln -s /data/mysql_datadir/mysql.sock /var/lib/mysql/mysql.sock

Itu memecahkan masalah saya

sreddy
sumber
mengganti nama mysql.sock menjadi sesuatu yang lain, kemudian me-restart mysqld ("service mysqld restart"), kemudian mengubah nama sesuatu yang lain kembali ke mysql.sock bekerja untuk saya. Sedikit variasi pada jawaban ini, terima kasih.
Analisis Fuzzy
Jawaban ini dapat membantu menemukan mysql.sockfile
Nobita
15

Jika Anda menggunakan RHEL baru-baru ini, Anda mungkin perlu memulai mariadb (open source mysql db) alih-alih mysql db:

yum remove mysql
yum -y install mariadb-server mariadb
service mariadb start

Anda kemudian dapat mengakses mysql dengan cara yang biasa:

mysql -u root -p
duhaime
sumber
FYI ini bekerja untuk CentOS 8.1 juga. Setelah menginstal mariadb-serverdan mariadb, jangan lupa untuk menjalankan mysql_secure_installationuntuk membersihkan beberapa pengaturan default tidak aman.
Dio Phung
13

Dalam kasus saya, saya telah memindahkan file socket ke lokasi lain di dalam /etc/my.cnf dari /var/lib/mysql/mysql.sockke/tmp/mysql.sock

Bahkan setelah me-restart layanan mysqld, saya masih melihat pesan kesalahan ketika saya mencoba untuk terhubung. ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

Masalahnya adalah dengan cara klien dikonfigurasi. Menjalankan diagnostik sebenarnya akan menunjukkan jalur soket yang benar. misalnyaps aux | grep mysqld

Bekerja:

mysql -uroot -p -h127.0.0.1
mysql -uroot -p --socket=/tmp/mysql.sock

Tidak bekerja:

mysql -uroot -p
mysql -uroot -p -hlocalhost

Anda dapat memperbaiki masalah ini dengan menambahkan garis soket yang sama di bawah [client]bagian dalam konfigurasi mysql.

Dejan
sumber
13

Cukup edit /etc/my.cnf Tambahkan baris berikut kemy.cnf

[mysqld]

socket=/var/lib/mysql/mysql.sock 

[client]

socket=/var/lib/mysql/mysql.sock

Mulai ulang mysql dan hubungkan kembali

mysql -u pengguna -p basis data kata sandi -h host;

minhas23
sumber
Satu-satunya jawaban yang benar. Saya bertanya-tanya mengapa itu tidak cukup suara.
CentAu
11

Periksa apakah layanan mysqld Anda berjalan atau tidak, jika tidak berjalan, mulai layanan.

Jika masalah Anda tidak terpecahkan, cari /etc/my.cnfdan modifikasi sebagai berikut, di mana Anda melihat baris dimulai dengan socket. Ambil cadangan file itu sebelum melakukan pembaruan ini.

socket=/var/lib/mysql/mysql.sock  

Mengubah

socket=/opt/lampp/var/mysql/mysql.sock -u root
vkGunasekaran
sumber
1
Hai Sekar, saya memasukkan "find / -name my.cnf", dan saya mendapat dua lokasi. 1) /opt/lampp/etc/my.cnf 2) /etc/mysql/my.cnf. Jadi, mana yang harus digunakan .. Saya bertanya di sini .. stackoverflow.com/questions/32437796/…
Nana Partykar
7

MariaDB, komunitas garpu yang dikembangkan dari MySQL, telah menjadi implementasi default dari MySQL di banyak distribusi.

Jadi pertama-tama Anda harus mulai,

$ sudo systemctl start mariadb

Jika ini gagal, cobalah

$ sudo systemctl start mysqld

Kemudian untuk memulai mysql,

$ mysql -u root -p

Sampai hari ini, di Fedora paket tersebut dinamai mariadb Dan di Ubuntu disebut mariadb-server.

Jadi, Anda mungkin harus menginstalnya jika belum diinstal di sistem Anda.

Gayan Weerakutti
sumber
7

Pastikan Anda memiliki cukup ruang /var. Jika Mysql iblis tidak dapat menulis info tambahan ke drive, server mysql tidak akan memulai dan mengarah ke kesalahanCan't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

Pertimbangkan untuk menggunakan

expire_logs_days = 10
max_binlog_size = 100M

Ini akan membantu Anda menjaga penggunaan disk tetap rendah.

Karthik
sumber
Terima kasih, saya menjalankan mysql di oracle virtualbox dan ketika saya membuat dump dari bd saya, saya kehabisan ruang, dan tidak bisa mendapatkan server mysql untuk memulai, ketika saya menghapus file dump saya bisa me-restart server mysql.
JayCee
1
Ini menyelesaikannya untuk saya. Saya telah menetapkan innodb_buffer_pool_size ke nilai yang sangat tinggi untuk lingkungan produksi dan itu membuat mysql crash pada mesin virtual saya.
Benjamin Brizzi
1
Aku punya masalah ini ketika menggunakan phabricator dan solusinya adalah untuk mengubah innodb_buffer_pool_sizedi my.cnf. Menetapkannya ke nilai yang kecil seperti innodb_buffer_pool_size = 50Madalah ujian yang baik untuk membuang hipotesis ini;)
Yercalamarino
Itu masalah yang menakutkan, memeriksa semuanya kecuali ruang disk. Ruang bebas dari / var, kembali!
Nadjib Mami
5

Inilah yang bekerja untuk saya:

ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
service mysqld restart
Pengguna
sumber
4

Silakan periksa apakah layanan mysql lain sedang berjalan.

Kishore Relangi
sumber
4

Pastikan Anda memulai server:

mysql.server start

Kemudian terhubung dengan pengguna root:

mysql -uroot
Deniz Ozger
sumber
3

Jika mysql Anda sebelumnya berfungsi dan tiba-tiba berhenti hanya "reboot" server.

Sedang menghadapi masalah ini pada CentOS VPS saya .->

Terus mendapatkan

Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'(2)

Mencoba semua teknik, akhirnya me-restart server memperbaiki masalah ->

shutdown -r now

Semoga ini membantu !!

Shashank Agarwal
sumber
3

mencoba

echo 0 > /selinux/enforce
dvin
sumber
3

Jika Anda mengubah file di / var / lib / mysql [suka salin atau ganti], Anda harus mengatur pemilik file ke mysql ini sangat penting jika mariadb.service restart telah gagal

chown -R mysql: mysql / var / lib / mysql / *

chmod -R 700 / var / lib / mysql / *

Mohsen Beiranvand
sumber
2

Pertama masukkan "service mysqld start" dan login

hPrasad
sumber
apa yang ingin Anda katakan? tolong baca faq sebelum mengajukan pertanyaan di sini
Freak
Pertanyaan ini berhasil dijawab tiga tahun lalu. Jawaban persis ini diberikan lebih lengkap tahun lalu.
Cairnarvon
2

Harap pastikan Anda telah menginstal server MySQL dengan benar, saya menemui kesalahan ini berkali-kali dan saya pikir ini rumit untuk debug dari soket, maksud saya mungkin lebih mudah untuk menginstalnya kembali.

Jika Anda menggunakan CentOS 7, berikut adalah cara yang benar untuk menginstalnya:

Pertama-tama, tambahkan sumber komunitas mysql
yum install http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm

Kemudian Anda dapat menginstalnya dengan yum install mysql-community-server

Mulai dengan systemctl: systemctl start mysqld

Zernel
sumber
1

Masalah saya adalah saya berhasil menginstal mysql dan berfungsi dengan baik.

Tetapi suatu hari, kesalahan yang sama terjadi.

Tidak dapat terhubung ke server MySQL lokal melalui socket '/var/lib/mysql/mysql.sock' (2)

Dan tidak ada file mysql.sock.

Solusi ini menyelesaikan masalah saya dan mysql sudah aktif kembali:

Masuk sebagai root:

sudo su -

Lari:

systemctl stop mysqld.service
systemctl start mysqld.service
systemctl enable mysqld.service

Uji sebagai root:

mysql -u root -p

mysql sekarang harus aktif dan berjalan.

Saya harap ini dapat membantu orang lain juga.

bharald
sumber
1

Perhatikan bahwa sementara mysql membaca info lokasi socketfile dari file my.cnf, program mysql_secure_installation tampaknya tidak melakukannya dengan benar pada waktu-waktu tertentu.

Jadi jika Anda seperti saya dan mengacak hal-hal di sekitar saat instalasi Anda mungkin masuk ke situasi di mana Anda dapat terhubung ke database dengan mysql baik-baik saja, tetapi masalahnya tidak dapat diamankan (tidak menggunakan script itu pula).

Untuk memperbaikinya saran dari sreddy berfungsi dengan baik: buatlah softlink dari tempat script mengharapkan soket ke tempat sebenarnya. Contoh:

ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock

(Saya menggunakan / tmp / sebagai lokasi default untuk soket)

Ellert van Koperen
sumber
1

Ini bekerja untuk saya dengan perubahan berikut

Apa pun jalur untuk soket disebutkan di [mysqld] dan sama di [client] di my.cnf dan restart mysql

[mysqld] socket = / var / lib / mysql / mysql.sock

[client] socket = / var / lib / mysql / mysql.sock

minhas23
sumber
1

Salah satu cara untuk mereproduksi kesalahan ini: Jika Anda bermaksud menyambung ke server asing tetapi sebaliknya terhubung ke yang tidak ada:

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 ~ $

Jadi, Anda harus menentukan host seperti ini:

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 ~ $
Eric Leschinski
sumber
1

Ini mungkin saran yang bodoh tetapi pastikan 100% DB Anda masih di-host di localhost. Misalnya, jika Admin Jaringan memilih (atau diubah menjadi) hosting Amazon DB, Anda akan memerlukan nama host itu!

Satu-Satunya ChemistryBlob
sumber
Saya menggunakan penyedia hosting 1and1 dan mendapatkan kesalahan ini setelah ssh-ing ke tuan rumah. Cara mengatasinya hanya untuk memberikan nama host "mysql -u dbo70123521 -p --host db70313321.db.1and1.com db703133520"
rob
1

Dalam kasus saya, saya mengimpor database baru, dan saya tidak dapat terhubung lagi setelah itu. Akhirnya saya menyadari bahwa itu adalah masalah ruang.

Jadi Anda dapat menghapus database terakhir dan memperluas hard drive Anda atau apa yang saya lakukan, mengembalikan snapshot dari mesin virtual saya.

Untuk berjaga-jaga jika seseorang berpikir itu berguna

Evan
sumber
0

mengalami masalah ini ketika mencoba untuk menghubungkan mysql di klien SSH, ditemukan menambahkan jalur soket ke perintah yang membantu ketika beralih di antara soket diperlukan.

> mysql -u user -p --socket=/path/to/mysql5143.sock
Jaak Kütt
sumber
0

Ini adalah masalah jika Anda kehabisan ruang disk. Solusinya adalah dengan membebaskan beberapa ruang dari HDD.

Silakan baca lebih lanjut untuk mendapatkan penjelasan:

Jika Anda menjalankan MySQL di LINUX, periksa ruang kosong HDD dengan disk bebas:

 df 

jika Anda mendapatkan sesuatu seperti itu:

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

Maka ini masalahnya dan sekarang Anda punya solusinya!

Karena mysql.sock ingin dibuat di folder mysql yang hampir selalu di bawah folder root tidak dapat mencapainya karena kurangnya ruang.

Jika Anda secara berkala memberikan perintah ls di bawah direktori mysql (di openSUSE 11.1 di / var / lib / mysql) Anda akan mendapatkan sesuatu seperti:

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

File mysql.sock sering muncul dan menghilang (Anda harus mencoba membagikan dengan ls untuk memukul sebuah instance dengan file mysql.sock pada folder).

Ini disebabkan oleh tidak cukup ruang disk.

Saya harap saya akan membantu beberapa orang !!!! Terima kasih!

c.chasapis
sumber
0

Saya harus menonaktifkan explicit_defaults_for_timestampdari my.cnf.

powtac
sumber
0

Coba dulu 2, 3 solusi. Kesalahan adalah stil popup & Jika Anda tidak dapat menemukan/var/lib/mysql/mysql.sock

find /var/ -name mysql.sock

Periksa ruang yang tersedia di / var /

df

Jika direktori penuh hapus beberapa file / direktori yang tidak digunakan

rm /var/cache/*

Mungkin masalah Anda akan diurutkan sekarang.

Sadee
sumber
0

Jika Anda berada di shell sf.net , coba:

mysql --host=mysql-{LETTER} --user={LETTER}{GROUP ID}admin -p

Ubah {LETTER} dan {ID GROUP} seperti yang ditunjukkan dalam Database MySQL profil admin proyek Anda.

Chetabahana
sumber