Koneksi Jarak Jauh Mysql Ubuntu

96

Untuk beberapa alasan, saya tidak dapat terhubung dari jarak jauh ke server MySQL saya. Saya sudah mencoba segalanya dan saya masih mendapatkan kesalahan.

root@server1:/home/administrator# mysql -u monty -p -h www.ganganadores.cl
Enter password:
ERROR 1045 (28000): Access denied for user 'monty'@'server1.ganganadores.cl' (using password: YES)

Sekarang, saya sudah mencoba lari

 GRANT ALL ON *.* to monty@localhost IDENTIFIED BY 'XXXXX'; 
 GRANT ALL ON *.* to monty@'%' IDENTIFIED BY 'XXXXXX';` 

dan tetap tidak ada! Apa yang saya lakukan salah?

EDIT : my.cnftelah mengomentari ip bind.

Cristian Eduardo Lehuede Lyon
sumber
versi MySQL apa yang Anda gunakan?
Steve
Versi server: 5.5.29-0ubuntu0.12.10.1 (Ubuntu)
Cristian Eduardo Lehuede Lyon
apa perintah ini kembali? ubuntu ~ $ sudo lsof -i -P | grep: 3306
apesa

Jawaban:

346

Untuk mengekspos MySQL ke selain localhost, Anda harus memiliki baris berikut

Untuk mysql versi 5.6 ke bawah

tidak /etc/mysql/my.cnfdiberi komentar dan ditetapkan ke alamat IP komputer Anda dan bukan loopback

Untuk mysql versi 5.7 ke atas

tidak /etc/mysql/mysql.conf.d/mysqld.cnfdiberi komentar dan ditetapkan ke alamat IP komputer Anda dan bukan loopback

#Replace xxx with your IP Address 
bind-address        = xxx.xxx.xxx.xxx

Atau tambahkan bind-address = 0.0.0.0 jika Anda tidak ingin menentukan IP

Kemudian hentikan dan mulai ulang MySQL dengan entri my.cnf yang baru. Setelah berjalan, buka terminal dan masukkan perintah berikut.

lsof -i -P | grep :3306

Itu akan menghasilkan sesuatu seperti ini dengan IP Anda yang sebenarnya di xxx

mysqld  1046  mysql  10u  IPv4  5203  0t0  TCP  xxx.xxx.xxx.xxx:3306 (LISTEN)

Jika pernyataan di atas kembali dengan benar, Anda kemudian akan dapat menerima pengguna jarak jauh. Namun agar pengguna jarak jauh dapat terhubung dengan hak istimewa yang benar, Anda harus membuat pengguna itu di localhost dan '%' seperti di.

CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypass';
CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypass';

kemudian,

GRANT ALL ON *.* TO 'myuser'@'localhost';
GRANT ALL ON *.* TO 'myuser'@'%';

dan akhirnya,

FLUSH PRIVILEGES; 
EXIT;

Jika Anda tidak memiliki pengguna yang sama yang dibuat seperti di atas, saat Anda logon secara lokal Anda mungkin mewarisi hak istimewa localhost dasar dan memiliki masalah akses. Jika Anda ingin membatasi akses yang dimiliki myuser maka Anda perlu membaca sintaks pernyataan GRANT DI SINI Jika Anda berhasil melewati semua ini dan masih memiliki masalah, posting beberapa output kesalahan tambahan dan baris my.cnf yang sesuai.

CATATAN: Jika lsof tidak kembali atau tidak ditemukan, Anda dapat menginstalnya DI SINI berdasarkan distribusi Linux Anda. Anda tidak membutuhkan lsof untuk membuat segala sesuatunya bekerja, tetapi ini sangat berguna ketika sesuatu tidak bekerja seperti yang diharapkan.

apesa
sumber
1
Terima kasih, meskipun saya telah mengikuti langkah-langkah ini dengan benar pada kali pertama, saya melakukannya lagi saat Anda memposting dan bekerja dengan sangat baik!
Cristian Eduardo Lehuede Lyon
14
Untuk orang lain yang kesulitan lsof -i -P | grep :3306, itu tidak berhasil tetapi koneksi jarak jauh masih berfungsi dengan baik tanpa konfirmasi itu, abaikan jika Anda tidak melihat output yang tepat.
Mike S
@Mike Slutsky Terima kasih atas catatannya, saya mengedit jawaban saya. Anda dapat menginstal lsof jika belum diinstal.
apesa
2
FWIW pada banyak sistem sudo lsof -i -Pakan jauh lebih berguna daripada lsof -i -P(dengan asumsi Anda masuk sebagai pengguna tanpa hak istimewa).
Dan Passaro
2
lsof -i -P | grep :3306tidak mengembalikan apapun!
Hijau
39

Tambahkan beberapa poin di atas posting apesa yang luar biasa:

1) Anda dapat menggunakan perintah di bawah ini untuk memeriksa alamat ip server mysql sedang mendengarkan

netstat -nlt | grep 3306

sample result:

tcp 0  0  xxx.xxx.xxx.xxx:3306  0.0.0.0:*   LISTEN

2) Gunakan FLUSH PRIVILEGESuntuk memaksa tabel hibah dimuat jika karena alasan tertentu perubahan tidak segera berlaku

GRANT ALL ON *.* TO 'user'@'localhost' IDENTIFIED BY 'passwd' WITH GRANT OPTION;
GRANT ALL ON *.* TO 'user'@'%' IDENTIFIED BY 'passwd' WITH GRANT OPTION;
FLUSH PRIVILEGES; 
EXIT;

pengguna == pengguna yang Anda gunakan untuk terhubung ke mysql ex.root
passwd == kata sandi yang Anda gunakan untuk terhubung ke mysql dengan

3) Jika firewall netfilter diaktifkan ( sudo ufw enable) pada mesin server mysql, lakukan hal berikut untuk membuka port 3306 untuk akses jarak jauh:

sudo ufw allow 3306

periksa status menggunakan

sudo ufw status

4) Setelah koneksi jarak jauh dibuat, itu dapat diverifikasi di mesin klien atau server menggunakan perintah

netstat -an | grep 3306
netstat -an | grep -i established
Jonathan L.
sumber
3
Ini menyelamatkan seluruh hari saya! Terima kasih untuk sudo ufw status!!
Riddhiman Adib
netstat -nlt | grep 3306kembali dengan kosong
João Pimentel Ferreira
@ João Pimentel Ferreira pastikan mysql berjalan terlebih dahulu, gunakan perintah "/etc/init.d/mysql status" untuk memverifikasi
Jonathan L
8

MySQL hanya mendengarkan localhost, jika kita ingin mengaktifkan akses jarak jauhnya, maka kita perlu melakukan beberapa perubahan pada file my.cnf:

sudo nano /etc/mysql/my.cnf

Kita perlu mengomentari baris bind-address dan skip-external-locking:

#bind-address = 127.0.0.1
# skip-external-locking

Setelah melakukan perubahan ini, kita perlu memulai ulang layanan mysql:

sudo service mysql restart
Vinh Lee
sumber
1
pastikan untuk berkomentarskip-external-locking
calebeaires
1
Saya tidak berkomentar lewati-penguncian-eksternal dan masih berfungsi.
Marcia Ong
Saya harus mengubahnya di
/etc/mysql/mysql.conf.d
milikku adalah lokasi ini:sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
Lester
1

Jika mengujinya di Windows, jangan lupa buka port 3306.

marw
sumber
Ah, Anda jenius, ini SUPER penting jika Anda menggunakan subsistem Windows untuk Linux, Anda perlu membuka port 3306 untuk lalu lintas masuk melalui firewall Windows, dan tidak ada hal di atas untuk memeriksa apakah MySQL mendengarkan berfungsi dengan subsistem
Brian Leishman
1

Anda menggunakan ubuntu 12 (yang cukup lama)

Pertama, Buka file /etc/mysql/mysql.conf.d/mysqld.cnf ( /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/my.cnf di Ubuntu 14.04 dan versi sebelumnya

Di bawah [mysqld] Cari Baris, bind-address = 127.0.0.1 Dan ubah ke, bind-address = 0.0.0.0 atau komentari

Kemudian, Restart Server MysQL Ubuntu systemctl restart mysql.service

Sekarang Server Ubuntu akan mengizinkan akses jarak jauh ke Server MySQL, Tetapi Anda tetap perlu mengkonfigurasi pengguna MySQL untuk mengizinkan akses dari host mana pun.

Pengguna harus 'username'@'%'dengan semua dana yang diperlukan

Untuk memastikan bahwa, server MySQL mendengarkan semua antarmuka, jalankan perintah netstat sebagai berikut.

netstat -tulnp | grep mysql

Semoga berhasil!

Gaurav Singh
sumber