Saya mencoba menyiapkan WordPress. Saya menjalankan Apache dan MySQL, dan akun serta database sudah siap. Saya mencoba membuat koneksi sederhana:
<?php
$conn = mysql_connect('localhost', 'USER', 'PASSWORD');
if(!$conn) {
echo 'Error: ' . mysql_errno() . ' - ' . mysql_error();
}
?>
Dan saya selalu mendapatkan ini:
Kesalahan: 2002 - Tidak ada file atau direktori seperti itu
File atau direktori apa yang sedang dibicarakan?
Saya menggunakan OS X Snow Leopard, menggunakan Apache bawaan. Saya menginstal MySQL menggunakan x86_64 dmg.
PEMBARUAN: Saya menemukan bahwa soket di /tmp/mysql.sock, jadi di php.ini, saya mengganti semua kemunculan jalur yang salah dengan itu.
php
mysql
connection
mk12
sumber
sumber
/etc/init.d/mysql start
jika Anda menggunakan distro berbasis debian. jika gagal, periksa/etc/my.cnf
file untuk jalur file soket mysql yang benar.Jawaban:
Jika Anda menggunakan Linux: jalur ke file mysql.sock salah. Ini biasanya karena Anda menggunakan (LAMPP) XAMPP dan tidak ada di /tmp/mysql.sock
Buka file php.ini dan temukan baris ini:
Dan lakukanlah
sumber
localhost
untuk bekerja dan TCP / IP berfungsi sehingga mengubahnya ke alamat TCP / IP127.0.0.1
akan berfungsi.Saya memiliki masalah yang sama dan dapat mengatasinya dengan menggunakan mysql saya
127.0.0.1
alih - alihlocalhost
.Ini mungkin berarti saya memiliki sesuatu yang salah dalam pengaturan host saya, tetapi perbaikan cepat ini membuat saya pergi sekarang.
sumber
code
127.0.0.1 localhostcode
. Yang membuat saya penasaran mengapa menghubungkan melalui localhost tidak berhasil. Jika seseorang bisa mencerahkan saya, saya akan bahagia.localhost
untuk bekerja dan TCP / IP berfungsi sehingga mengubahnya ke alamat TCP / IP127.0.0.1
akan berfungsi.Ini untuk Mac OS X dengan penginstalan asli Apache HTTP dan penginstalan kustom MySQL .
Jawabannya didasarkan pada respon yang sangat baik dari @ alec-gorge, tetapi karena saya harus mencari di Google beberapa perubahan spesifik untuk mengonfigurasi konfigurasi saya, kebanyakan khusus untuk Mac OS X, saya pikir saya akan menambahkannya di sini demi kelengkapan.
Aktifkan dukungan PHP5 untuk Apache HTTP
Pastikan dukungan PHP5 diaktifkan di
/etc/apache2/httpd.conf
.Edit file dengan
sudo vi /etc/apache2/httpd.conf
(masukkan kata sandi saat diminta) dan hapus komentar (hapus;
dari awal) baris untuk memuat modul php5_module .Mulai Apache HTTP dengan
sudo apachectl start
(ataurestart
jika sudah dimulai dan perlu dimulai ulang untuk membaca kembali file konfigurasi).Pastikan itu
/var/log/apache2/error_log
berisi baris yang memberi tahu Anda bahwa php5_module diaktifkan - Anda akan melihatnyaPHP/5.3.15
(atau serupa).Mencari nama file Socket
Saat MySQL aktif dan berjalan (dengan
./bin/mysqld_safe
) harus ada baris debug yang dicetak ke konsol yang memberi tahu Anda di mana Anda dapat menemukan file log. Catat nama host dalam nama file -localhost
dalam kasus saya - yang mungkin berbeda untuk konfigurasi Anda.File yang muncul setelah
Logging to
itu penting. Di situlah MySQL mencatat pekerjaannya.Buka
localhost.err
file (sekali lagi, nama Anda mungkin berbeda), yaitutail -1 /Users/jacek/apps/mysql/data/localhost.err
untuk mengetahui nama file soket - ini harus menjadi baris terakhir.Perhatikan
socket:
bagian - itu file soket yang harus Anda gunakanphp.ini
.Ada cara lain (beberapa mengatakan cara yang lebih mudah) untuk menentukan lokasi nama file soket dengan masuk ke MySQL dan menjalankan:
Konfigurasi PHP5 dengan dukungan MySQL - /etc/php.ini
Berbicara tentang php.ini ...
Di
/etc
direktori ada file /etc/php.ini.default . Salin ke /etc/php.ini .Buka
/etc/php.ini
dan cari mysql.default_socket .Defaultnya
mysql.default_socket
adalah/var/mysql/mysql.sock
. Anda harus mengubahnya ke nilai yang telah Anda catat sebelumnya - itu/tmp/mysql.sock
dalam kasus saya.Ganti
/etc/php.ini
file untuk mencerminkan nama file soket:Verifikasi akhir
Mulai ulang HTTP Apache.
Periksa log jika tidak ada kesalahan yang terkait dengan PHP5. Tidak ada kesalahan berarti Anda sudah selesai dan PHP5 dengan MySQL seharusnya berfungsi dengan baik. Selamat!
sumber
mysql_connect
, yang merupakan masalah sebenarnya dari pertanyaan asli dan bukan umum kesalahpahaman tentang menginstal perangkat lunak.localhost
. Tidak ada yang mencari bantuan untuk menyiapkan xamp di macOS akan sampai ke sini dengan googling. Karenanya saya menggunakan istilah 'omong kosong'. Utas ini tidak ada hubungannya sama sekali dengan macOS tetapi hanya dengan mysql (bahkan tidak php).Mengganti 'localhost' menjadi '127.0.0.1' di file konfigurasi (koneksi db) membantu!
sumber
Memulai ulang server mysql mungkin membantu. Dalam kasus saya, memulai ulang server menghemat banyak waktu.
PS- digunakan
sudo service mysql restart
untuk pengguna non-root.sumber
Pertama, pastikan MySQL sedang berjalan. Perintah: mulai mysqld
Jika Anda masih tidak dapat terhubung maka: Seperti apa tampilan /etc/my.cnf Anda? (atau /etc/msyql/my.cnf)
2 posting lainnya sudah benar sehingga Anda perlu memeriksa soket Anda karena 2002 adalah kesalahan soket.
Tutorial bagus tentang menyiapkan LAMP adalah: http://library.linode.com/lamp-guides/centos-5.3/index-print
sumber
/usr/local/mysql/mysql-test/include/default_my.cnf
, haruskah saya menyalinnya sebagai my.cnf ke/etc
?Bukan berarti itu banyak membantu Anda, tetapi dalam versi terbaru (dan bahkan yang lebih baru ) dari MySQL, kode kesalahan 2002 berarti "Tidak dapat terhubung ke server MySQL lokal melalui soket [nama-soket]", jadi itu mungkin memberi tahu Anda sedikit lagi.
sumber
Memperluas jawaban Matthias D di sini saya bisa mengatasi kesalahan 2002 ini pada MySQL dan MariaDB dengan jalur yang tepat menggunakan perintah ini:
Pertama, dapatkan jalur sebenarnya ke soket MySQL:
Kemudian dapatkan jalur PHP :
Menggunakan output dari dua perintah ini , hubungkan mereka:
Jika itu mengembalikan
No such file or directory
Anda hanya perlu membuat jalur ke PHP mysql.sock, misalnya jika jalur/var/mysql/mysql.sock
Anda adalah Anda akan menjalankan:Kemudian coba lagi perintah sudo ln .
sumber
Saya akan memeriksa file php.ini Anda dan memverifikasi mysql.default_socket diatur dengan benar dan juga memverifikasi bahwa mysqld Anda dikonfigurasi dengan benar dengan file socket yang dapat diaksesnya. Default tipikal adalah "/tmp/mysql.sock".
sumber
/var/mysql/mysql.sock
, tapi jalan itu tidak ada.Saya mengalami masalah ini juga, lalu saya memodifikasi 'localhost' menjadi '127.0.0.1', berhasil.
sumber
dalam kasus saya, saya punya masalah dengan mysqli_connect.
ketika saya ingin terhubung
mysqli_connect('localhost', 'myuser','mypassword')
mysqli_connect_error () kembalikan kesalahan ini "Tidak ada file atau direktori seperti itu"
ini berhasil untuk saya
mysqli_connect('localhost:3306', 'myuser','mypassword')
sumber
Kesalahan 2002 berarti MySQL tidak dapat terhubung ke server database lokal melalui file soket (misalnya
/tmp/mysql.sock
).Untuk mengetahui di mana file socket Anda, jalankan:
lalu periksa kembali apakah aplikasi Anda menggunakan file soket Unix yang benar atau sambungkan melalui port TCP / IP.
Kemudian periksa kembali apakah PHP Anda memiliki pengaturan soket MySQL yang benar:
dan pastikan file itu ada .
Uji soket:
Jika soket Unix salah atau tidak ada, Anda dapat melakukan symlink, misalnya:
atau perbaiki file konfigurasi Anda (misalnya
php.ini
).Untuk menguji koneksi PDO langsung dari PHP, Anda dapat menjalankan:
Periksa juga konfigurasi antara Apache dan CLI (antarmuka baris perintah), karena konfigurasinya bisa berbeda.
Lihat: Mengatasi Masalah Menghubungkan ke MySQL
Utils / perintah lain yang dapat membantu melacak masalah:
mysql --socket=$(php -r 'echo ini_get("mysql.default_socket");')
netstat -ln | grep mysql
php -r "phpinfo();" | grep mysql
php -i | grep mysql
xdebug.show_exception_trace=1
dixdebug.ini
sudo dtruss -fn mysqld
, di Linux debug denganstrace
stat $(mysql_config --socket)
dan jika Anda memiliki cukup ruang kosong (df -h
).net.core.somaxconn
.sumber
Pastikan server lokal Anda (MAMP, XAMPP, WAMP, dll ..) sedang berjalan.
sumber
Saya memiliki masalah serupa.
Pada dasarnya di sini masalahnya mungkin ada dua contoh mysql berjalan.
A) Satu berjalan di /etc/init.d
B) Lampu dipasang di / opt / lamp
Solusi:
Langkah 1: - Temukan semua contoh berjalan mysql menggunakan commnad "find / | grep mysqld"
Langkah 2: - Matikan layanan yang berjalan di /etc/init.d menggunakan layanan mysql stop
Langkah 3: - Restart layanan Lamp Anda menggunakan / opt / lamp / lamp restart
Anda sebaiknya pergi :)
sumber
Di Mac, sebelum melakukan semua pekerjaan berat, cukup periksa pengaturan Anda di
System Preferences > MySQL
. Lebih sering daripada tidak, saya mengalami tim yang mengalami masalah ini sejak saat ituThe MySQL Server Instance is stopped
.Klik
Start MySQL Server
tombolnya, dan keajaiban akan terjadi.sumber
Saya menggunakan PHP-FPM atau beberapa versi php di server saya. Dalam kasus saya, saya memperbarui nilai mysqli karena tidak ada parameter soket default mysql:
kepada:
terima kasih kepada @Alec Gorge
sumber
Saya memiliki masalah yang sama. Soket saya akhirnya ditemukan di /tmp/mysql.sock. Lalu saya menambahkan path itu ke php.ini. Saya menemukan soket di sana dari memeriksa halaman "Status Server" di MySQL Workbench. Jika soket Anda tidak ada di /tmp/mysql.sock, maka mungkin MySQL Workbench dapat memberi tahu Anda di mana tempatnya? (Memang Anda menggunakan MySQL Workbench ...)
sumber
Saya telah menginstal MySQL menggunakan installer. Faktanya, tidak ada direktori data di samping direktori 'bin'.
Jadi, saya secara manual membuat direktori 'data' di bawah "C: \ Program Files \ MySQL \ MySQL Server 8.0". Dan itu berhasil (mengubah kata sandi root mengikuti langkah-langkah yang disarankan di https://dev.mysql.com/doc/mysql-windows-excerpt/5.7/en/resetting-permissions-windows.html .
sumber
Digital Ocean MySql 2002-tidak ada-file-atau-direktori
Tambahkan akhir file ini
/etc/mysql/my.cnf
Mulai ulang MySql
service mysql restart
sumber
Saya juga mengalami masalah yang sama di server Linux. Yang membantu saya adalah perintah ' sudo reboot ', yang digunakan untuk mereboot server Linux.
sumber
aktifkan dan mulai layanan mariadb
sudo systemctl mengaktifkan mariadb.service
sudo systemctl mulai mariadb.service
sumber