ini agak misteri bagi saya. Satu-satunya cara saya dapat terhubung ke MySQL adalah jika saya menyebutnya melalui "127.0.0.1" ... misalnya, skrip koneksi PHP saya TIDAK akan bekerja dengan localhost
Saya menjalankan Mac OS X Lion, apache2 bawaan, MySQL, PHP, phpMyAdmin
mysqladmin:
count 0
debug-check FALSE
debug-info TRUE
force FALSE
compress FALSE
character-sets-dir (No default value)
default-character-set auto
host (No default value)
no-beep FALSE
port 0
relative FALSE
socket (No default value)
sleep 0
ssl FALSE
ssl-ca (No default value)
ssl-capath (No default value)
ssl-cert (No default value)
ssl-cipher (No default value)
ssl-key (No default value)
ssl-verify-server-cert FALSE
user (No default value)
verbose FALSE
vertical FALSE
connect-timeout 43200
shutdown-timeout 3600
plugin-dir (No default value)
default-auth (No default value)
ping localhost
dan lihat apa yang dikatakannya.Jawaban:
MySQL akan mencoba untuk terhubung ke soket unix jika Anda mengatakannya untuk terhubung ke "localhost". Jika Anda menyuruhnya terhubung ke 127.0.0.1 Anda memaksanya untuk terhubung ke soket jaringan. Jadi, mungkin Anda memiliki MySQL yang dikonfigurasi untuk hanya mendengarkan soket jaringan dan tidak ke soket sistem file.
Apa yang sebenarnya salah dengan soket unix Anda sulit dikatakan. Tetapi saya menyarankan Anda untuk membaca halaman ini di panduan referensi MySQL. Ini akan membantu Anda.
UPDATE: Berdasarkan pertanyaan yang diperbarui: Parameter "socket" harus seperti ini: "/var/lib/mysql/mysql.sock". Halaman ini dalam Manual Referensi memiliki beberapa informasi lebih lanjut.
Di sini Anda memiliki awal file /etc/my.cnf saya:
File Anda harus serupa. Maka masalah Anda harus diselesaikan. Jangan lupa untuk me-restart server MySQL sebelum Anda mengujinya.
sumber
Anda mungkin memiliki IPv6 yang diaktifkan, localhost yang sangat mungkin memutuskan ke localv ip6, yang tidak didefinisikan dalam konfigurasi msql Anda.
ive juga punya masalah di mana saya harus menambahkan 'localhost' di tempat '127.0.0.1' ke subnet yang diizinkan untuk pengguna itu, tidak mengerti mengapa (saya menggunakan ipv4 dan beberapa waktu yang lalu) tetapi patut dicoba.
sumber
Bagi saya, builtin php OSX dikonfigurasi untuk menggunakan unix-socket yang berbeda dari mysql homebrew. Dengan demikian ia tidak dapat terhubung melalui localhost yang menggunakan soket itu.
Saya memperbaikinya dengan hack cepat dengan menghubungkan socket-path php yang dikonfigurasi untuk menunjuk ke yang benar-benar digunakan mysql.
Perintah diagnostik berikut ini sangat membantu.
Periksa jalur soket default yang digunakan oleh php dan mysql:
Hubungkan menggunakan soket yang ditentukan:
Tentukan jenis socket mysql client yang digunakan untuk menghubungkan:
sumber
Bisakah Anda memeriksa
mysql/conf/my.conf
(struktur direktori harus hampir sama pada OSx) untuk melihat apakahskip-networking
tidak diomortasikan? Jika demikian, tambahkan#
in-front of the line dan restart mysql-server.Saya sebenarnya memiliki masalah yang sama beberapa waktu lalu (walaupun itu tidak ada di OSx), jadi saya pikir ini mungkin layak dicoba.
sumber
PHP masih mencoba menggunakan lokasi soket default. Masalah ini dapat muncul jika Anda telah memindahkan folder MariaDB / MySQL dari / var / lib / mysql ke lokasi lain. Untuk mengatasi masalah ini, Anda harus menentukan lokasi soket baru di file /etc/php.ini .
Awas, tergantung pada driver yang Anda gunakan, Anda mungkin harus menentukan pdo_mysql.default_socket = !
Untuk memeriksa direktori Anda saat ini, jalankan perintah berikut di mysql:
sumber
Apakah localhost didefinisikan dalam
/private/etc/hosts
file Anda ?sumber
/private
? Belum pernah melihat itu sebelumnyaSaya dapat membuat kembali gejala yang sama pada kotak tes saya, semoga ini membantu.
Di MySQL, pengguna didefinisikan oleh dua bagian (nama dan host). Secara default, MySQL akan memiliki 3 pengguna root:
Kolom kata sandi akan kosong (tanpa kata sandi) atau menyimpan hash. Jika Anda mengatur kata sandi untuk satu pengguna tertentu, itu tidak secara otomatis memperbarui semua, karena MySQL melihatnya sebagai pengguna yang berbeda.
Sebagai contoh:
akan memperbarui kata sandi untuk
'root'@'127.0.0.1'
, tetapi tidak'root'@'localhost'
atau'root'@'localhost.localdomain'
Lihatlah
skip_name_resolve
variabelnya:Secara default
skip_name_resolve
adalahOFF
, dan akan berusaha untuk menyelesaikan semua alamat IP ke nama host. Misalnya, jika Anda terhubung dengan'root'@'127.0.0.1'
, MySQL akan mengubah menghubungkan Anda dengan'root'@'localhost'
.Jika ya
ON
, MySQL akan melihat dan terhubung'root'@'127.0.0.1'
serta'root'@'localhost'
sebagai pengguna yang terpisah. Dan mereka mungkin atau mungkin tidak memiliki kata sandi yang berbeda, tergantung pada bagaimana mereka ditetapkan.Jadi pertama, saya akan memeriksa untuk melihat perbedaan kata sandi:
mysql> SELECT host,user,password FROM mysql.user WHERE user='root';
Jika ada, Anda dapat memperbaikinya, atau Anda dapat melanjutkan penyelidikan.
Maka saya akan memeriksa
skip_name_resolve
:mysql> show variables like 'skip_name_resolve';
Jika ya
ON
, saya akan mencari tahu di mana itu sedang diatur (misalnya/etc/my.cnf
) dan menghapusnya, kecuali ada kebutuhan untuk itu.Semoga ini bisa membantu Anda!
sumber
Saya mengalami masalah ini dan saya tidak bisa mengatasinya. Saya mencoba semua yang saya bisa tetapi tidak berhasil.
Saya menemukan bahwa saya memiliki .netrc di / root / yang memiliki info di dalamnya.
Saya menghapusnya dan masalah hilang.
Dapat masuk ke mysql menggunakan mysql -uroot -p tanpa masalah sekarang.
Saya tahu ini adalah posting lama tapi semoga ini membantu seseorang.
sumber
Bagi saya, mengubah izin agar dapat dibaca secara publik di direktori induk dari mysql.sock memperbaiki masalah ini:
sumber
Untuk orang-orang yang menggunakan CageFS dengan CloudLinux:
Saya diciptakan ulang
/var/lib/mysql
karena saya sedang membangun kembali server MySQL dari awal ...yang melepas jalur dari cagefs. Saya tahu ini tidak terkait, tapi saya menggunakan cPanel dan CloudLinux. Saya tidak dapat memverifikasi mengapa koneksi soket tidak berfungsi, dan akhirnya, saya sadar.
menambahkan
/var/lib/mysql
ke/etc/cagefs/cagefs.mp
(jika sudah ada lanjutkan ke langkah berikutnya) dan berjalanmemperbaiki masalah
sumber
/etc/cagefs/cagefs.mp
tetapi berjalancagefsctl --remount-all
memperbaikinya. Terima kasih sobat!Anda harus mendefinisikannya di private / etc / hosts saya pikir ... atau hanya menggunakan 127.0.0.1 karena itu adalah hal yang sama, hanya sebuah alias.
sumber