MySQL menolak untuk menerima koneksi jarak jauh

13

Saya baru saja menginstal server ubuntu baru dengan mysql (percona 5.5), tetapi ia menolak untuk menerima koneksi dari host jarak jauh

Inilah yang terjadi jika saya mencoba menyambung ke server ini dari jarak jauh:

mysql -h10.0.0.2 -uroot -pmypassowrd
ERROR 2003 (HY000): Can't connect to MySQL server on '10.0.0.2' (111)

telnet 10.0.0.2 3306
Trying 10.0.0.2...
telnet: Unable to connect to remote host: Connection refused

Ketika saya memeriksa apakah mysql mendengarkan koneksi jarak jauh saya melihat ini:

sudo netstat -ntlup | grep mysql
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      127018/mysqld 

Seperti yang Anda lihat itu mengatakan 127.0.0.1:3306yang berarti "Saya hanya menerima koneksi lokal".

Saya memeriksa variabel saya skip_networkingdan bind-address- semuanya dimatikan:

mysql> show variables like '%skip_networking%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| skip_networking | OFF   |
+-----------------+-------+
1 row in set (0.00 sec)

mysql> show variables like '%bind%';
Empty set (0.00 sec)

Saya memiliki server lain dengan konfigurasi yang benar-benar sama dan berfungsi dengan baik:

sudo netstat -ntlup | grep mysql
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      2431/mysqld 

Apa yang bisa menjadi alasan untuk ini? Bagaimana cara membuat mysql menanggapi koneksi jarak jauh?

Temnovit
sumber
Perhatikan bahwa variabel bind_addresshanya tersedia sejak versi 5.6 ( bugs.mysql.com/bug.php?id=44355 ), sehingga akan mengembalikan set kosong di v5.5 bahkan jika sudah diatur.
faker
Tunjukkan kami pengaturan my.cnf Anda.
user9517
Sudahkah Anda memeriksa masalah di luar mySQL, seperti firewall atau masalah perutean?
Stese

Jawaban:

20

Cobalah untuk menambahkan bind-address = 0.0.0.0ke [mysqld]bagian Anda my.cnfdan restart mysqld .

Guido Vaccarella
sumber
2
Berkasnya ada di/etc/mysql/mysql.conf.d/mysqld.cnf
Eduardo Cuomo
Milik saya di /etc/my.cnf.d/bind-addr.cnf
joseph
0

Itu bisa disebabkan oleh tabel pengguna database mysql (gunakan mysql; tunjukkan tabel;). Jika ikatan ke 0.0.0.0 tidak berfungsi untuk Anda, cobalah untuk memberikan host Anda '%' di tempat 'localhost' di tabel itu.

Misalnya, coba buat pengguna seperti:

CREATE USER yourusername @ '%' DIIDENTIFIKASI OLEH 'yourpassword'

semut mencoba terhubung dengan pengguna itu.

periket2000
sumber
3
Sambungan ditolak umumnya berarti tidak ada yang mendengarkan pada IP: port yang relevan.
user9517
Benar, saya sudah ter-flash oleh 'Tidak bisa terhubung ke server MySQL', saya tidak ingat di telnet. Maaf.
periket2000
"Tidak dapat terhubung ke MySQL" tidak berasal dari hak istimewa yang tidak tersedia bagi pengguna. Ini adalah pasangan {IP: port} yang tidak cocok dengan upaya koneksi.
Fabien Haddadi
0

Ketika semuanya gagal dan Anda yakin bahwa server IS mendengarkan pada port default dan Anda berusaha untuk terhubung dengan klien mysql dengan putus asa dari host lain, cobalah untuk menentukan port pada URL dari perintah mysql.

Aneh karena saya harus menggunakan sintaks berikut:

mysql -h someHost --port=3306 -u someUser -p someDb

Saya telah menemukan ini (bug?) Benar-benar secara tidak sengaja (setelah kehilangan rambut saya :)).

Setup saya: debian jessie, mysql 5.7.18 baru, pengguna / db dibuat, bind-address berkomentar-out, mysqld restart

Ondrej
sumber
Penjelasan rasionalnya adalah bahwa server MySQL someHost sebenarnya mendengarkan 3306, seperti yang ditunjukkan oleh direktif --port. Tapi biner klien mysql Anda berasal dari versi MariaDB ... oleh karena itu gunakan port 3307 sebagai default, kecuali ditentukan sebaliknya. Periksa asal biner klien mysql yang Anda gunakan. Petunjuk: periksa variabel lingkungan PATH Anda juga ...
Fabien Haddadi
0

Saya baru saja mengalami masalah ini dan masalah saya sepertinya terkait dengan firewall. BTW - Terima kasih @Temnovit untuk perintah pemecahan masalah Mysql.

Saya menggunakan netstat untuk memberi tahu server sedang berjalan dan pada port yang benar. Saya juga bisa tahu server saya tidak menerima koneksi pada port itu dengan perintah telnet sederhana.

# On the remote machine
➜  ~ echo X | telnet -e X 192.168.1.57 3306
Telnet escape character is 'X'.
Trying 192.168.1.57...
telnet: connect to address 192.168.1.57: Connection refused
➜  ~ 

Mengikuti jawaban bermanfaat lainnya pada perintah firewall Fedora saya bisa membuka port yang benar.

# On the server
sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --reload

Perintah telnet saya kemudian berhasil.

# On the remote machine
➜  ~ echo X | telnet -e X 192.168.1.57 3306
Telnet escape character is 'X'.
Trying 192.168.1.57...
Connected to 192.168.1.57.
Escape character is 'X'.

telnet> Connection closed.
➜  ~

Jika Anda masih memiliki masalah, kemungkinan masalah izin pengguna.

Eric Fossum
sumber
0

Saya telah mariadbmenginstal Soulution adalah untuk memodifikasi yang bind-addressterletak di/etc/mysql/mariadb.conf.d/50-server.cnf

Alex Balcome
sumber
-1

Solusi yang dijelaskan dalam tautan di bawah ini harus menyelesaikan masalah Anda http://www.debianhelp.co.uk/remotemysql.htm

bml13
sumber
2
bml13, mengutip tautan untuk mendukung jawaban Anda adalah praktik yang bagus, tetapi kami lebih suka orang-orang menulis jawabannya di sini dan menambahkan tautan, tidak hanya memasang tautan dan membiarkannya begitu saja.
MadHatter
1
... terutama karena itu sekarang merupakan tautan mati.
haz