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


385

Saya mengalami masalah besar ketika mencoba terhubung ke mysql. Ketika saya menjalankan:

/usr/local/mysql/bin/mysql start

Saya memiliki kesalahan berikut:

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

Saya punya di mysql.sockbawah /var/mysqldirektori.

Dalam /etc/my.cnfaku punya:

[client]
port=3306
socket=/var/mysql/mysql.sock

[mysqld]
port=3306
socket=/var/mysql/mysql.sock
key_buffer_size=16M
max_allowed_packet=8M

dan /etc/php.iniaku punya:

; Default socket name for local MySQL connects.  If empty, uses the built-in
; MySQL defaults.
mysql.default_socket = /var/mysql/mysql.sock

Saya telah memulai kembali apache menggunakan sudo /opt/local/apache2/bin/apachectl restart

Tapi saya masih punya kesalahan.

Kalau tidak, saya tidak tahu apakah itu relevan tetapi kapan mysql_config --socketssaya mendapatkannya

--socket         [/tmp/mysql.sock]

53
Apakah MySQL berjalan?
David

2
Itu tentu menjelaskan kesalahan dalam mencoba terhubung ke sana. Bagaimana, seperti yang disebutkan @Romain, apakah ada sesuatu di log MySQL (coba /var/log/mysqlatau di suatu tempat di sekitar) yang menunjukkan mengapa itu tidak berjalan? Apakah Anda mendapatkan kesalahan saat Anda mencoba memulainya?
David

5
Saya mendapatkan kesalahan yang sama, tetapi dalam kasus saya, saya menemukan mysql tidak akan mulai karena disk 100% penuh. /var/log/mysqld.log sangat membantu.
yellavon

4
alasan mereka bertanya apakah itu berjalan, saya kira, adalah karena soket dibuat ketika layanan dimulai. saya menginstal mysql, tetapi tidak pernah memulai layanan, jadi file .sock tidak ada. ketik service mysqld startjika Anda baru saja menginstal. hth
changokun

2
Jawaban shimanyi di bawah ini sudo service mysql startmenyelamatkan saya
Kiren Siva

Jawaban:


218

Jika file Anda my.cnf (biasanya di folder / etc / mysql / ) 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 755 /var/lib/mysql/

yang menyelesaikannya untukku


11
Itu membantu saya setelah saya mengikuti langkah-langkah di atas dan memulai kembali mysqldlayanan.
whirlwin

11
Akan lebih baik jika Anda mengatur izin ke 755 sehingga hanya pemilik direktori yang dapat menulisnya.
codewaggle

2
Masalah saya sebenarnya hanya karena volume penyimpanan saya untuk aplikasi web saya telah kehabisan ruang! Klasik!
James T Snell

3
Di openSUSE 12.3 saya, my.cnf ada di / etc /.

kita juga harus mengubah izin ke /var/log/mysqld.log, Terima kasih
Allahbakash.G

94

Anda yakin telah menginstal mysql dan juga server mysql ..

Sebagai contoh untuk menginstal server mySql saya akan menggunakan yum atau apt untuk menginstal alat baris perintah mysql dan server:

yum -y install mysql mysql-server (or apt-get install mysql mysql-server)

Aktifkan layanan MySQL:

/sbin/chkconfig mysqld on

Mulai server MySQL:

/sbin/service mysqld start

setelah itu setel kata sandi root MySQL:

mysqladmin -u root password 'new-password' (with the quotes)

Saya harap ini membantu.


Saya menggunakan homebrew dan bekerja seperti pesona:brew install mysql
JaKXz

2
Saya sudah menginstal klien, perintah yang saya butuhkan adalah sudo apt-get install mysql-serverhidup itu baik
ErichBSchulz

1
Bukankah output Can't connect to local MySQL server through socket '/var/mysql/mysql.sock' (38) dari klien? Klien mencoba dan gagal terhubung, bukan? (Saya pikir pertanyaan awal perlu diedit untuk menjelaskan itu).
msouth

76

Solusi cepat yang berfungsi untuk saya: coba gunakan alamat ip lokal (127.0.0.1) alih-alih 'localhost' di mysql_connect (). Ini "memaksa" php untuk terhubung melalui TCP / IP bukannya soket unix.


Itu berhasil ... tapi mengapa? Apakah MySQL tidak menyelesaikan localhostdan menyelesaikannya 127.0.0.1sebelum mencoba menghubungkan?
Jaime Hablutzel

3
tidak ... ketika menggunakan localhost Anda tidak menggunakan Internet Socket. Anda menggunakan Soket IPC. en.wikipedia.org/wiki/Unix_domain_socket . 127.0.0.1 adalah loopback lokal yang berarti permintaan tidak akan keluar dari mesin Anda tetapi akan menggunakan TCP / IP sehingga lebih lambat ...
Master Yogurt

Bekerja untuk saya juga. Saya di ubuntu 14.04, hhvm dan nginx.
Maykonn

1
Terima kasih. ini bekerja untuk saya tetapi tidak jelas bagi saya dari jawaban apa perbaikannya
Nathan Buesgens

Ini juga diperlukan ketika Anda terhubung ke server jauh melalui terowongan ssh
Tamm

51

Saya mendapat kesalahan berikut

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (111)

Mencoba beberapa cara dan akhirnya menyelesaikannya melalui cara berikut

sudo gksu gedit /etc/mysql/my.cnf

diubah

#bind-address       = 127.0.0.1

untuk

bind-address        = localhost

dan memulai kembali

sudo /etc/init.d/mysql restart

itu berhasil


Saya memiliki masalah serupa; pindah dari ethernet (192.168.220.11) ke wifi (192.168.220.12) tetapi telah mengikat-address hard-coded ke IP ethernet. Mengubah untuk localhostmemperbaikinya.
Chris G

30

Pastikan Anda menjalankan mysqld: /etc/init.d/mysql start


3
Atau sudo service mysql start|restartuntuk Ubuntu.
Wtower

18

Untuk mencegah masalah terjadi, Anda harus melakukan shutdown server yang anggun dari baris perintah daripada mematikan server.

shutdown -h now

Ini akan menghentikan layanan yang berjalan sebelum mematikan mesin.

Berdasarkan Centos, metode tambahan untuk mendapatkannya kembali ketika Anda mengalami masalah ini adalah memindahkan mysql.sock:

mv /var/lib/mysql/mysql.sock /var/lib/mysql/mysql.sock.bak

service mysqld start

Restart layanan menciptakan entri baru yang disebut mqsql.sock


14

Saya mendapatkan kesalahan ini ketika saya mengatur tugas cron untuk file saya. Saya mengubah izin file menjadi 777 tetapi tetap tidak berfungsi untuk saya. Akhirnya saya mendapat solusinya. Mungkin itu akan bermanfaat bagi orang lain.

Coba dengan perintah ini:

mysql -h 127.0.0.1 -P 3306 -u root -p

Ingat bahwa -h berarti host , -P berarti port dan -p berarti kata sandi.


Memaksa koneksi melalui TCP / IP alih-alih menggunakan soket tidak efisien (dan mengharuskan Anda mengaktifkan localhost dukungan TCP / IP di server, seperti jawaban sebelumnya ). Jawaban yang diterima dari 2011 lebih baik: Konfigurasikan server sehingga Anda dapat menggunakan soket dengan benar.
Quentin

10
-ptidak berarti port , itu berarti kata sandi , Anda telah mengacaukannya dengan-P
Quentin

Ini sepertinya, kurang lebih, salinan dari jawaban yang lebih awal ini
Quentin

Bagi saya itu hanya masalah mendefinisikan host yang benar: mysql -h 127.0.0.1 -u root -p
kghbln

12

Seperti yang dapat dilihat oleh banyak jawaban di sini, ada banyak masalah yang dapat mengakibatkan pesan kesalahan ini ketika Anda memulai layanan MySQL. Masalahnya, MySQL biasanya akan memberi tahu Anda apa yang salah, jika Anda hanya melihat file log yang sesuai.

Misalnya, di Ubuntu, Anda harus memeriksa /var/log/syslog. Karena banyak hal lain mungkin juga masuk ke file ini, Anda mungkin ingin menggunakan grepuntuk melihat pesan mysql, dan tailhanya melihat yang terbaru. Secara keseluruhan, itu mungkin terlihat seperti:

grep mysql /var/log/syslog | tail -50

Jangan membabi buta membuat perubahan pada konfigurasi Anda karena orang lain berkata 'Ini bekerja untuk sistem saya.' Cari tahu apa yang sebenarnya salah dengan sistem Anda dan Anda akan mendapatkan hasil yang lebih baik lebih cepat.


5
+1 Untuk mengambil langkah mundur dan menunjukkan sesuatu yang banyak dari jawaban lain gagal untuk mempertimbangkan - yang sebenarnya melihat apa yang dilaporkan aplikasi sebagai masalah adalah pendekatan yang jauh lebih baik daripada terburu-buru masuk dan membuat perubahan yang mungkin tidak bahkan berlaku ...!
SlySven

Ah, jadi itu salah .cnf. Itu menjelaskannya. Sekarang saya bisa berhenti mencoba hal-hal acak dan mengatasi masalah yang sebenarnya. Terima kasih.
Synetech

11

Solusi lain adalah mengedit /etc/my.cnf dan menyertakan host di bagian [klien]

 [client]
 #password       = your_password
 host            = 127.0.0.1
 port            = 3306
 socket          = /var/run/mysql/mysql.sock

Dan kemudian me-restart layanan mysql.

Solusi ini diuji dalam: Versi server: Distribusi sumber 5.5.25a-log


menambahkan bagian [klien] disarankan jika belum ada di my.cnf
Cris

7

Saya memiliki masalah yang sama dan itu disebabkan oleh pembaruan driver mysql ketika server mysql berjalan. Saya memperbaikinya hanya me-restart mysql dan apache2:

layanan sudo mysql berhenti

sudo service mysql start

sudo service apache2 berhenti

sudo service apache2 mulai


Dalam kasus saya, mysqltidak berjalan. Saya berlari sudo service mysql startsetelah berlari sudo service mysql statusuntuk memverifikasi itu tidak berjalan.
Tass

6

Dalam kasus saya, saya menggunakan Centos 5.5. Saya menemukan bahwa masalahnya adalah karena layanan mysql dihentikan. Jadi saya memulai layanan mysql dengan perintah:

 /etc/init.d/mysqld start

Jadi .. kesalahan konyol.


6

Jika semuanya bekerja dengan baik dan Anda baru saja mulai melihat kesalahan ini, sebelum Anda melakukan hal lain, pastikan Anda tidak kehabisan ruang disk:

df -h

Jika volume tempat mysql.sock sedang dibuat adalah 100% digunakan, MySql tidak akan dapat membuatnya dan ini akan menjadi penyebab kesalahan ini. Yang perlu Anda lakukan adalah menghapus sesuatu yang tidak diperlukan, seperti file log lama.



5
sudo service mysql start

Ini akan melayani Anda dengan baik. Mungkin ada kemungkinan Anda mengubah beberapa perintah yang memengaruhi konfigurasi mysql.


atau systemctl start mariadb.servicedi Fedora 22 atau RedHat 7. Setelah itu dimungkinkan untuk mengatur kata sandi root.
Junior Mayhé

5

Ada banyak solusi untuk masalah ini tetapi untuk situasi saya, saya hanya perlu memperbaiki DATE pada mesin / server ( Ubuntu 16.04 Server ).

i) Periksa tanggal server Anda dan perbaiki.

ii) Lari sudo /etc/init.d/mysql restart

Itu harus memulainya.


4

Saya mendapatkan kesalahan karena saya menjalankan MAMP dan file .sock saya berada di lokasi yang berbeda. Saya baru saja menambahkan tautan simbolis di mana aplikasi berpikir seharusnya menunjuk ke tempat itu sebenarnya dan itu berfungsi seperti pesona.


bagaimana bisa menambahkan tautan simbolis di mana aplikasi berpikir seharusnya menunjuk ke tempat yang sebenarnya?
Gilberto Ibarra

4

Saya juga menemukan bahwa ini adalah masalah izin. Saya membandingkan file MySQL dengan instalasi yang berfungsi (keduanya pada Debian 6 squeeze) dan harus membuat perubahan kepemilikan berikut (di manamydatabase ada database yang Anda miliki).

Kepemilikan mysql:mysql:

chown mysql:mysql /var/lib/mysql
chown mysql:mysql /var/lib/mysql/ib*
chown mysql:mysql /var/lib/mysql/mydatabase
chown mysql:mysql /var/lib/mysql/mydatabase/*
chown mysql:mysql /var/lib/mysql/mysql/* 

Kepemilikan mysql:root:

chown mysql:root /var/lib/mysql/mysql
chown mysql:root /var/run/mysqld 

Kepemilikan mysql:adm:

chown mysql:adm /var/log/mysql
chown mysql:adm /var/log/mysql.err
chown mysql:adm /var/log/mysql.log* 

4

Bagi saya - ini hanyalah kasus MySQL yang membutuhkan waktu lama untuk dimuat. Saya memiliki lebih dari 100.000 tabel di salah satu basis data saya dan akhirnya mulai tetapi jelas harus memakan waktu lama dalam hal ini.


3

Jika Anda menggunakan AWS (Amazon Web Services) versi Mikro, maka itu adalah masalah memori. Ketika saya berlari

mysql

dari terminal katanya

ERROR 2002 (HY000): Can't connect to local MySQL server through socket /var/run/mysqld/mysqld.sock' (111)

Jadi saya mencoba yang berikut dan itu hanya akan gagal.

service mysqld restart

Setelah banyak pencarian, saya menemukan bahwa Anda harus membuat file swap agar MySQL memiliki cukup memori. Instruksi terdaftar: http://www.prowebdev.us/2012/05/amazon-ec2-linux-micro-swap-space.html .

Kemudian, saya bisa me-restart mysqld.


Saya memiliki masalah yang sama pada contoh server AWS "mikro" dan saya dapat mengonfirmasi bahwa membuat file swap memperbaiki "ERROR 2002 (HY000): tidak dapat terhubung ke server MySQL lokal melalui soket / var / run / mysqld / mysqld masalah .sock '(111) ". Terima kasih @ jth_92!
Konaras

3

Anda selalu dapat memulai server mysql dengan menentukan lokasi file mysql.sock menggunakan --socketopsi seperti

mysql --socket=/var/mysql/mysql.sock 

Ini akan berfungsi bahkan jika lokasi file socket di tentukan di lokasi yang berbeda di file my.cnf.


3

Bagi mereka yang solusinya tidak berhasil, coba:

cd /etc/mysql

periksa apakah my.cnf ada

nano my.cnf

dan pastikan Anda hanya memiliki satu bind-address sebagai berikut:

bind-address = 127.0.0.1

Jika tidak, itu mungkin masalahnya, keluar saja dari nano dan simpan file.

dan service mysql start

Perhatikan bahwa jika Anda tidak memiliki nano (editor teks) cukup instal dengan apt-get install nanodan sekali saja tekan Ctrl + X untuk keluar, jangan lupa untuk mengatakan Y untuk menyimpan dan menggunakan file yang sama)


Sayangnya ini tidak berhasil. Ini pada dasarnya hanya mengatakan bahwa hanya mesin lokal yang dapat mengakses mysql. Tidak ada koneksi jarak jauh.
stephen

3

Saya punya masalah ini juga ketika mencoba untuk memulai server, begitu banyak jawaban di sini yang hanya mengatakan untuk memulai server tidak berfungsi. Hal pertama yang dapat Anda lakukan adalah menjalankan yang berikut untuk melihat apakah ada kesalahan konfigurasi:

/usr/sbin/mysqld --verbose --help 1>/dev/null

Saya memang memiliki satu kesalahan yang muncul:

160816 19:24:33 [Note] /usr/sbin/mysqld (mysqld 5.5.50-0ubuntu0.14.04.1-log) starting as process 9461 ...
160816 19:24:33 [Warning] Using unique option prefix myisam-recover instead of myisam-recover-options is deprecated and will be removed in a future release. Please use the full name instead.
160816 19:24:33 [Note] Plugin 'FEDERATED' is disabled.
160816 19:24:33 [ERROR] /usr/sbin/mysqld: unknown variable 'innodb-online-alter-log-max-size=4294967296'
160816 19:24:33 [ERROR] Aborting

Sederhana grep -HR "innodb-online-alter-log-max-size" /etc/mysql/menunjukkan kepada saya file apa yang berisi baris yang menyinggung, jadi saya menghapus baris itu dari file.

Kemudian, memeriksa /var/log/mysql/error.logfile saya, saya punya:

InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes
InnoDB: than specified in the .cnf file 0 671088640 bytes!
160816 22:46:46 [ERROR] Plugin 'InnoDB' init function returned error.
160816 22:46:46 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
160816 22:46:46 [ERROR] Unknown/unsupported storage engine: InnoDB
160816 22:46:46 [ERROR] Aborting

Berdasarkan pertanyaan ini solusi yang diterima tidak akan berfungsi karena saya bahkan tidak bisa memulai server, jadi saya mengikuti apa yang dikatakan beberapa komentar dan menghapus saya /var/lib/mysql/ib_logfile0dan/var/lib/mysql/ib_logfile1 file .

Ini memungkinkan server untuk memulai dan saya dapat terhubung dan mengeksekusi query, namun memeriksa file log kesalahan saya dengan cepat diisi dengan beberapa puluhan ribu baris seperti ini:

160816 22:52:15  InnoDB: Error: page 1415 log sequence number 82039318708
InnoDB: is in the future! Current system log sequence number 81640793100.
InnoDB: Your database may be corrupt or you may have copied the InnoDB
InnoDB: tablespace but not the InnoDB log files. See
InnoDB: http://dev.mysql.com/doc/refman/5.5/en/forcing-innodb-recovery.html
InnoDB: for more information.

Berdasarkan saran dari sini , untuk memperbaikinya, saya melakukan mysqldump dan memulihkan semua basis data (lihat tautan untuk beberapa solusi lain).

$ mysqldump -u root -p --allow-keywords --add-drop-database --comments --hex-blob --opt --quote-names --databases db_1 db_2 db_3 db_etc > backup-all-databases.sql
$ mysql -u root -p < backup-all-databases.sql

Semuanya tampak berfungsi seperti yang diharapkan sekarang.


Memeriksa /var/log/mysql/error.logmembantu dalam kasus saya. Ada [ERROR] Can't init tc logyang dengan cepat diperbaiki menggunakan jawaban berikut: dba.stackexchange.com/a/185006/163583
Juraj.Lorinc

2

Menambahkan

--protocol=tcp 

ke daftar pramaters di koneksi Anda bekerja untuk saya.


2

Ini cukup baik untukku

sudo /etc/init.d/mysql restart

2

Saya mengalami masalah ini hari ini. Tak satu pun dari jawaban ini memberikan perbaikan. Saya perlu melakukan perintah berikut (ditemukan di sini https://stackoverflow.com/a/20141146/633107 ) untuk memulai layanan mysql saya:

sudo /etc/init.d/mysql stop
cd /var/lib/mysql/
ls ib_logfile*
mv ib_logfile0 ib_logfile0.bak
mv ib_logfile1 ib_logfile1.bak
... etc ...
/etc/init.d/mysql restart

Ini sebagian ditunjukkan oleh kesalahan berikut di /var/log/mysql/error.log:

140319 11:58:21 InnoDB: Completed initialization of buffer pool
InnoDB: Error: log file ./ib_logfile0 is of different size 0 50331648 bytes
InnoDB: than specified in the .cnf file 0 5242880 bytes!
140319 11:58:21 [ERROR] Plugin 'InnoDB' init function returned error.
140319 11:58:21 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
140319 11:58:21 [ERROR] Unknown/unsupported storage engine: InnoDB
140319 11:58:21 [ERROR] Aborting

Saya juga melihat disk penuh kesalahan, tetapi hanya ketika menjalankan perintah tanpa sudo. Jika pemeriksaan izin gagal, ini melaporkan disk penuh (bahkan ketika partisi Anda bahkan tidak mendekati penuh).


2

CentOS 7, 64 bit. Instalasi baru.
Dalam kasus saya, kesalahannya adalah karena saya tidak memiliki server MySQL yang tepat dan klien MySQL diinstal.
Menggunakan yum, saya menghapus mariadbdan edisi mysql-komunitas. Saya mengunduh rpm untuk klien dan server dari situs web resmi MySQL dan menginstal server dan klien.

Saat menginstal server, saya diperlihatkan pesan bahwa kata sandi ke akun root untuk MySQL disimpan dalam file yang dapat saya lihat dengan sudo cat /root/.mysql_secret .

Jadi setelah menginstal klien dan server, saya memeriksa apakah MySQL berfungsi (saya pikir saya reboot sebelum melakukannya) dengan perintah sudo service mysql statusdan saya mendapat hasilnya.

Menjalankan MySQL (2601) [Oke]

Saya login ke MySQL menggunakan password dari file .mysql_secret:
mysql -uroot -pdxM01Xfg3DXEPabpf. Perhatikan bahwa dxM01Xfg3DXEPabpfkata sandi yang disebutkan dalam file .mysql_secret.

dan kemudian diketik masukkan perintah berikut di prompt mysql untuk mengubah kata sandi root:

mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('somePassword');

Semuanya bekerja dengan baik sejak saat itu.


1
kasus yang sama pada RHEL6U6 dengan versi Server: 5.6.23-enterprise-commercial-advanced.
HCD

2
sudo service mysqld start

Bekerja untuk saya, saya menggunakan Centos


2

Ini tidak langsung menjawab pertanyaan Anda tetapi sebagian, yaitu menggunakan PythonAnywhere. Saya terus menemukan pertanyaan ini ketika mencari perbaikan jadi saya menambahkannya di sini dengan harapan itu akan membantu orang lain dalam situasi saya.


PythonAnywhere memutuskan untuk mengubah nama host koneksi database untuk meningkatkan efisiensi dan keandalan, sebagaimana dirinci di sini :

Nama host resmi yang harus digunakan untuk menghubungkan ke akun Anda MySQL database contoh telah berubah dari mysql.server ke yourusername .mysql.pythonanywhere-services.com . Ini melewati bagian dari infrastruktur kami yang telah mulai menunjukkan masalah dalam beberapa minggu terakhir, dan itu seharusnya jauh lebih efisien dan dapat diandalkan daripada cara lama.

Karenanya, Anda perlu memperbarui nama host Anda ke nilai yang disorot di atas.



1

Saya mengalami kesalahan soket ini dan pada dasarnya bermuara pada fakta bahwa MySQL tidak berjalan. Jika Anda menjalankan instalasi baru, pastikan Anda menginstal 1) paket sistem dan 2) installer panel (mysql.prefPane). Pemasang panel akan memungkinkan Anda untuk pergi ke System Preferences dan membuka MySQL, dan kemudian menjalankan instance.

Perhatikan bahwa, pada instalasi baru, saya perlu mengatur ulang komputer saya agar perubahan dapat diterapkan dengan benar. Setelah reboot, saya menjalankan instance baru dan dapat membuka koneksi ke localhost tanpa masalah.

Juga dari catatan, saya tampaknya telah menginstal versi MySQL sebelumnya tetapi telah menghapus panel, yang membuatnya mudah untuk mendapatkan instance dari MySQL yang berjalan untuk pengguna mac.

Tautan yang baik untuk proses instalasi ulang ini: http://www.coolestguyplanettech.com/how-to-install-php-mysql-apache-on-os-x-10-6/

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.