Ketika saya mencoba untuk terhubung ke server MySQL lokal selama rangkaian pengujian saya, itu gagal dengan kesalahan:
OperationalError: (2002, "Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)")
Namun, saya dapat setiap saat, terhubung ke MySQL dengan menjalankan mysql
program baris perintah
. A ps aux | grep mysql
menunjukkan server sedang berjalan, dan
stat /tmp/mysql.sock
mengkonfirmasi bahwa soket ada. Selanjutnya, jika saya membuka debugger di except
klausul pengecualian itu, saya dapat terhubung dengan andal dengan parameter yang sama persis.
Masalah ini mereproduksi cukup andal, namun tampaknya tidak 100%, karena setiap kali di bulan biru, rangkaian pengujian saya sebenarnya berjalan tanpa mengenai kesalahan ini. Ketika saya mencoba untuk menjalankan dengan sudo dtruss
itu tidak mereproduksi.
Semua kode klien ada di Python, meskipun saya tidak tahu bagaimana itu bisa relevan.
Beralih untuk menggunakan host 127.0.0.1
menghasilkan kesalahan:
DatabaseError: Can't connect to MySQL server on '127.0.0.1' (61)
max_connections
di file conf MySQL Anda?mysql -h 127.0.0.1
bekerja dari commandline? Saya tidak begitu yakin server mysql Anda benar-benar mendengarkan pada port TCP.mysql -h localhost
bekerja dengan andal?Jawaban:
Ini berhasil untuk saya. Namun, jika ini tidak berhasil, pastikan bahwa mysqld sedang berjalan dan coba sambungkan.
sumber
Bagian yang relevan dari manual MySQL ada di sini . Saya akan mulai dengan melalui langkah-langkah debugging yang tercantum di sana.
Juga, ingat bahwa localhost dan 127.0.0.1 bukanlah hal yang sama dalam konteks ini:
localhost
, maka soket atau pipa digunakan.127.0.0.1
, maka klien dipaksa untuk menggunakan TCP / IP.Jadi, misalnya, Anda dapat memeriksa apakah database Anda mendengarkan koneksi TCP
netstat -nlp
. Vi . Tampaknya IS mendengarkan koneksi TCP karena Anda mengatakan itumysql -h 127.0.0.1
berfungsi dengan baik. Untuk memeriksa apakah Anda dapat terhubung ke database Anda melalui soket, gunakanmysql -h localhost
.Jika tidak ada yang membantu, Anda mungkin perlu memposting lebih banyak detail tentang konfigurasi MySQL Anda, persis bagaimana Anda membuat contoh koneksi, dll.
sumber
localhost
sebagai host). Mengubah untuk127.0.0.1
memperbaikinya.Bagi saya masalahnya adalah saya tidak menjalankan server mysql. Jalankan server terlebih dahulu lalu jalankan
mysql
.sumber
Saya telah melihat ini terjadi di toko saya ketika devs saya memiliki manajer tumpukan seperti MAMP yang diinstal yang sudah dikonfigurasi dengan MySQL yang diinstal di tempat yang tidak standar.
di terminal Anda
yang akan memberi Anda jalur ke file kaus kaki. ambil jalur itu dan gunakan di parameter DATABASES HOST Anda.
Yang perlu Anda lakukan adalah mengarahkan
CATATAN
juga berjalan
which mysql_config
jika Anda entah bagaimana memiliki beberapa contoh server mysql yang diinstal pada mesin Anda mungkin terhubung ke yang salah.sumber
Saya baru saja mengubah
HOST
darilocalhost
menjadi127.0.0.1
dan berfungsi dengan baik:sumber
settings.py
proyek tersebut.Kapan, jika Anda kehilangan daemon mysql di mac OSx tetapi ada di jalur lain misalnya di private / var lakukan perintah berikut
1)
2) restart koneksi Anda ke mysql dengan:
bekerja juga untuk mariadb
sumber
Jalankan cmd di bawah ini di terminal
Kemudian restart mesin untuk diterapkan. Berhasil!!
sumber
Periksa jumlah file yang terbuka untuk proses mysql menggunakan perintah lsof.
Tingkatkan batas file yang terbuka dan jalankan kembali.
sumber
ulimit
menambah jumlah file terbuka yang boleh dibuka oleh klien dan server Anda. jika Anda menggunakan ubuntu versi terbaru, ini mungkin memerlukan pengeditan skrip mysql upstart di / etc / init tetapi mudah-mudahan Anda bisa melakukannya di file .cnf.Setelah mencoba beberapa solusi ini dan tidak berhasil, inilah yang berhasil untuk saya:
sumber
Ini mungkin salah satu masalah berikut.
dan kemudian masukkan ke dalam kode koneksi db Anda:
/tmp/mysql.sock adalah hasil dari grep
2. Solusi port mysql salah: Anda harus mencari tahu port mysql yang benar:
lalu di kode Anda:
3306 adalah port yang dikembalikan dari grep
Saya pikir opsi pertama akan menyelesaikan masalah Anda.
sumber
Bagi mereka yang mengupgrade dari 5.7 ke 8.0 melalui homebrew, kesalahan ini kemungkinan besar disebabkan oleh peningkatan yang tidak selesai. Dalam kasus saya,
mysql.server start
buat saya kesalahan berikut:Saya kemudian memeriksa file log melalui
cat /usr/local/var/mysql/YOURS.err | tail -n 50
, dan menemukan yang berikut:Jika Anda berada di perahu yang sama, pertama instal
[email protected]
melalui homebrew, hentikan server, lalu mulai sistem 8.0 lagi.Kemudian,
Ini akan membuat MySQL (8.0) Anda berfungsi kembali.
sumber
ERROR! The server quit without updating PID file
lagi.Saya rasa saya melihat perilaku yang sama beberapa waktu lalu, tetapi tidak dapat mengingat detailnya.
Dalam kasus kami, masalahnya adalah saat testrunner menginisialisasi koneksi database relatif terhadap interaksi database pertama yang diperlukan, misalnya, dengan mengimpor modul di settings.py atau beberapa __init__.py. Saya akan mencoba menggali lebih banyak info lagi, tetapi ini mungkin sudah membunyikan bel untuk kasus Anda.
sumber
Pastikan / etc / hosts Anda ada
127.0.0.1 localhost
di dalamnya dan itu akan berfungsi dengan baiksumber
Saya punya dua dugaan licik yang satu ini
KONJEKTUR # 1
Perhatikan kemungkinan tidak dapat mengakses
/tmp/mysql.sock
file tersebut. Ketika saya mengatur database MySQL, saya biasanya membiarkan situs file socket masuk/var/lib/mysql
. Jika Anda login ke mysql asroot@localhost
, sesi OS Anda memerlukan akses ke/tmp
folder tersebut. Pastikan/tmp
memiliki hak akses yang benar di OS. Selain itu, pastikan pengguna sudo selalu dapat membaca file dalam format/tmp
.KONJEKTUR # 2
Mengakses mysql melalui
127.0.0.1
dapat menyebabkan kebingungan jika Anda tidak memperhatikan. Bagaimana?Dari baris perintah, jika Anda terhubung ke MySQL dengan
127.0.0.1
, Anda mungkin perlu menentukan protokol TCP / IP.atau coba nama DNS
Ini akan melewati proses masuk sebagai
root@localhost
, tapi pastikan Anda punyaroot@'127.0.0.1'
menentukan.Lain kali Anda terhubung ke MySQL, jalankan ini:
Ini memberi Anda apa?
Jika fungsi-fungsi ini kembali dengan nilai yang sama, maka Anda menghubungkan dan mengautentikasi seperti yang diharapkan. Jika nilainya berbeda, Anda mungkin perlu membuat pengguna yang sesuai
[email protected]
.sumber
Punya masalah yang sama. Ternyata
mysqld
telah berhenti berjalan (saya menggunakan Mac OSX). Saya memulainya kembali dan kesalahannya hilang.Saya menemukan bahwa
mysqld
sebagian besar tidak berjalan karena tautan ini: http://dev.mysql.com/doc/refman/5.6/en/can-not-connect-to-server.htmlPerhatikan tip pertama!
sumber
jika Anda mendapatkan error seperti di bawah ini:
Kemudian cari saja lokasi file mysqld.sock Anda dan tambahkan ke "HOST".
Seperti saya menggunakan xampp di linux jadi
mysqld.sock
file saya ada di lokasi lain. jadi tidak bekerja untuk '/var/run/mysqld/mysqld.sock
'sumber
Periksa apakah mysql Anda belum mencapai koneksi maksimum, atau tidak berada dalam loop boot seperti yang sering terjadi jika pengaturan di my.cnf salah.
Gunakan ps aux | grep mysql untuk memeriksa apakah PID berubah.
sumber
Terlalu lama melihat-lihat online untuk tidak berkontribusi. Setelah mencoba mengetikkan prompt mysql dari baris perintah, saya terus menerima pesan ini:
ERROR 2002 (HY000): Tidak dapat terhubung ke server MySQL lokal melalui soket '/tmp/mysql.sock' (2)
Ini karena server mysql lokal saya tidak lagi berjalan. Untuk memulai ulang server, saya menavigasi ke
di mana mysql.server saya berada. Dari sini, cukup ketik:
Ini akan meluncurkan kembali server mysql lokal.
Dari sana Anda dapat mengatur ulang kata sandi root jika perlu ..
sumber
Saya harus mematikan semua contoh mysql dengan terlebih dahulu menemukan semua ID proses:
Dan kemudian membunuh mereka:
Kemudian:
Bekerja untuk saya.
sumber
Soket terletak di / tmp. Pada sistem Unix, karena mode & kepemilikan di / tmp, ini dapat menyebabkan beberapa masalah. Tapi, selama Anda memberi tahu kami bahwa Anda BISA menggunakan koneksi mysql Anda secara normal, saya kira itu bukan masalah pada sistem Anda. Pemeriksaan utama harus untuk merelokasi mysql.sock di direktori yang lebih netral.
Fakta bahwa masalah terjadi "secara acak" (atau tidak setiap saat) membuat saya berpikir bahwa ini bisa menjadi masalah server.
Apakah / tmp Anda terletak pada disk standar, atau pada dudukan eksotis (seperti pada RAM)?
Apakah / tmp Anda kosong?
Apakah
iotop
menunjukkan sesuatu yang salah saat Anda menghadapi masalah?sumber
Konfigurasikan koneksi DB Anda dalam dialog 'Kelola Koneksi DB. Pilih 'Standar (TCP / IP)' sebagai metode koneksi.
Lihat halaman ini untuk detail lebih lanjut http://dev.mysql.com/doc/workbench/en/wb-manage-db-connections.html
Menurut halaman lain ini, file soket digunakan bahkan jika Anda menentukan localhost.
Ini juga menunjukkan cara memeriksa server Anda dengan menjalankan perintah berikut:
sumber
di ubuntu14.04 Anda dapat melakukan ini untuk mengatasi masalah ini.
sumber
Bagi saya, saya yakin mysqld sudah dimulai, dan baris perintah mysql dapat bekerja dengan baik. Tetapi server httpd menunjukkan masalah (tidak dapat terhubung ke mysql melalui soket).
Saya memulai layanan dengan mysqld_safe &.
akhirnya, saya menemukan ketika saya memulai layanan mysqld dengan layanan mysqld start, ada masalah (masalah izin selinux), dan ketika saya memperbaiki masalah selinux, dan memulai mysqld dengan "layanan mysqld start", masalah koneksi httpd hilang. Tetapi ketika saya memulai mysqld dengan mysqld_safe &, mysqld dapat bekerja. (klien mysql dapat bekerja dengan baik). Tapi masih ada masalah saat terhubung dengan httpd.
sumber
Jika terkait soket, baca file ini
dan lihat apa lokasi soket standar. Ini garis seperti:
sekarang buat alias untuk shell Anda seperti:
Dengan cara ini Anda tidak memerlukan hak akses root.
sumber
Coba saja lari
mysqld
.Inilah yang tidak berhasil untuk saya di mac. Jika tidak berhasil, coba buka
/usr/local/var/mysql/<your_name>.err
untuk melihat log kesalahan mendetail.sumber
Semoga bermanfaat.
sumber
Menggunakan MacOS Mojave 10.14.6 untuk MySQL 8.0.19 yang diinstal melalui Homebrew
sudo find / -name my.cnf
/usr/local/etc/my.cnf
Bekerja untuk beberapa saat kemudian akhirnya kesalahan kembali. Menghapus versi Homebrew MySQL dan menginstal file .dmg langsung dari sini
Terhubung dengan senang hati sejak itu.
sumber
Dalam kasus saya, yang membantu adalah mengedit file
/etc/mysql/mysql.conf.d/mysqld.cnf
dan mengganti baris:dengan
Kemudian saya me-restart server dan berfungsi dengan baik. Lucunya, jika saya mengembalikan saluran seperti sebelumnya dan memulai ulang, itu masih berfungsi ..
sumber
Saya menghadapi masalah serupa baru-baru ini. Pergi melalui banyak jawaban. Saya membuatnya berfungsi dengan mengikuti langkah-langkah.
sumber
Bagi saya, server mysql tidak berjalan. Jadi, saya memulai server mysql melalui
kemudian
mysql_secure_installation
untuk mengamankan server dan sekarang saya dapat mengunjungi server MySQL melalui
sudo mysql -uroot -p
sumber