Tidak dapat terhubung ke MySQL menggunakan 'localhost' tetapi menggunakan '127.0.0.1' tidak apa-apa?

12

File / etc / hosts saya terlihat seperti ini:

127.0.0.1 localhost

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Saya menemukan ketika membangun server, bahwa walaupun saya bisa melakukan ping localhost dengan sukses, dalam file konfigurasi tertentu untuk layanan seperti Postfix dan Apache dan Dovecot, saya perlu menentukan 127.0.0.1alih-alih localhostuntuk membuatnya berfungsi.

Saya juga perlu mengubah file konfigurasi situs web yang didorong oleh basis data tertentu, yang digunakan localhostuntuk terhubung ke MySQL.

Saya telah mencoba berbagai modifikasi pada hostsfile tersebut, tetapi sejauh ini belum ada yang saya coba.

Server menjalankan Ubuntu 12.04.02 LTS. Itu tidak memiliki selinux diinstal dan situasi di atas tetap bahkan setelah menetapkan kebijakan standar IPtables untuk menerima dan membilas mereka.

Peter Snow
sumber

Jawaban:

15

Satu hal yang mungkin Anda periksa adalah (yang mengharuskan Anda masuk ke konsol MySQL) - centang untuk memastikan bahwa Anda memiliki izin untuk masuk rootmelalui localhost.

mysql -h 127.0.0.1 -u root -p

- Setelah Anda berhasil masuk -

mysql> select user,host from mysql.user;
+------+--------------------------------+
| user | host                           |
+------+--------------------------------+
| root | 127.0.0.1                      | 
| root | ::1                            |
| root | localhost                      | <-- Make sure you have a localhost entry for root
+------+--------------------------------+
3 rows in set (0.00 sec)

Hanya membuangnya di sana, kalau-kalau ini masalahnya.

drewrockshard
sumber
Saya merasa Anda berada di jalur yang benar. Saya telah melakukan itu dan saya dapat melihat bahwa meskipun root dan beberapa pengguna lain dibuat untuk localhost, itu dibuat oleh panel kontrol hosting untuk semua pengguna 127.0.0.1(kecuali untuk satu yang %). Saya pikir ini mungkin mengungkapkan cukup bagi saya untuk memperbaikinya, jadi saya mungkin akan menerima jawaban Anda dalam waktu singkat.
Peter Snow
Terima kasih untuk bantuannya! Saya ingin menambahkan bahwa me-restart server mysql diperlukan setelah memperbarui tabel mysql.user agar perubahan diterapkan.
lackovic10
Meskipun diterima, ini bukan biasanya (pernah?) Masalah, untuk mysql. Lihat jawaban EEAA sebagai gantinya (mysql mengartikan localhostsebagai socketganti TCP).
ToolmakerSteve
8

Sebagian besar klien MySQL aneh dalam kenyataan bahwa jika Anda menentukan host sebagai localhost, mereka alias itu untuk koneksi soket bukan koneksi TCP. Opsi Anda adalah tetap dengan 127.0.0.1atau, jika klien mendukungnya (seperti biner CLI mysql tidak dengan --protocolbendera), memaksanya untuk menggunakan TCP bukan soket unix.

EEAA
sumber
Terima kasih EEAA. Masalahnya adalah hal-hal seperti pemasang Joomla gagal. Jika Anda menentukan 127.0.0.1alih-alih localhostdi bidang hostname selama instalasi, itu menyebabkan jalur instalasi menjadi kacau memberi saya kesalahan lain, tetapi menentukan localhost gagal menghubungkan database! Apa yang menyebabkan situasi ini? Mengapa saya memilikinya?
Peter Snow
3
@PeterSnow Siapkan soket domain Unix di konfigurasi MySQL Anda.
Michael Hampton
Terima kasih @MichaelHampton Saya telah mencari setengah jam terakhir dan tidak dapat menemukan cara mengatur ini. Bisakah Anda menunjukkan saya pada sebuah artikel atau tolong beri saya ide? Saya punya socket = /var/run/mysqld/mysqld.sockdi my.cnfdan file yang ada, yang dimiliki oleh mysql dengan izin 777. Terima kasih.
Peter Snow
@PeterSnow Apakah Anda me-restart mysqld setelah melakukan perubahan itu?
EEAA
Saat ini saya sedang mencoba menggunakannya melalui skrip instalasi Joomla. Halaman http menanyakan nama host. Jika saya memilih 127.0.0.1itu berfungsi (tapi skrip menggunakan entri nanti dan gagal karena mengharapkan nama yang bisa diselesaikan seperti localhost), tetapi jika saya menggunakan localhost, menghubungkan, untuk membuat database, gagal.
Peter Snow
1

Anda dapat memeriksa izin seperti ini:

[learner@localhost ~]$ sudo netstat -npa | grep mysqld  
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      6284/mysqld         
unix  2      [ ACC ]     STREAM     LISTENING     233040 6284/mysqld         /var/lib/mysql/mysql.sock

Jika ini mendengarkan pada 0 0.0.0.0:* itu berarti bahwa setiap orang dapat mengakses mysql itu.

Anda dapat mengedit binding untuk ini di file my.conf. Di jalur default linux untuk ini adalah:

[learner@localhost ~]$ sudo vi /etc/my.cnf

Tambahkan baris ini di file my.conf untuk memungkinkan ip yang Anda inginkan.

bind-address = 127.0.0.1   
bind-address = 0.0.0.0
a_learner
sumber
Terima kasih a_learner, untuk informasinya, walaupun saya sudah menerima jawaban.
Peter Snow
0

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 menyelesaikan masalah Anda harus menentukan lokasi soket baru di file /etc/php.ini .

mysqli.default_socket =/newDBLocation/mysql/mysql.sock
joelschmid
sumber
0

Saya memecahkan masalah ini dengan membuat symlink sudo ln -s /opt/lampp/var/mysql/mysql.sock /var/run/mysqld/mysqld.sock,. Tapi pertama-tama saya harus membuat folder /var/run/mysqld/karena folder itu tidak ada pada awalnya.

saharul
sumber
-1

Anda memerlukan mysql.sock di / tmp

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

harus bekerja dengan baik setelah itu.

William
sumber