Cara mengizinkan koneksi jarak jauh ke mysql

362

Saya telah menginstal MySQL Community Edition 5.5 pada mesin lokal saya dan saya ingin memperbolehkan koneksi jarak jauh sehingga saya dapat terhubung dari sumber eksternal.

Bagaimana saya bisa melakukan itu?

Leo
sumber
1
kemungkinan duplikat Aktifkan koneksi MySQL jarak jauh
pengguna
1
Jika Anda kebetulan menggunakan DigitalOcean, Anda dapat mencoba menggunakannya sudo mysql_secure_installation. FYI.
Alan Dong
Jangan gunakan pemformatan kode untuk teks yang bukan kode. Keluar topik.
Marquis of Lorne
@ EJP mengapa? pertanyaan jujur ​​karena penasaran
René Roth

Jawaban:

776

Itu diizinkan secara default di MySQL.

Yang dinonaktifkan secara default adalah rootakses jarak jauh . Jika Anda ingin mengaktifkannya, jalankan perintah SQL ini secara lokal:

 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
 FLUSH PRIVILEGES;

Dan kemudian temukan baris berikut dan beri komentar di my.cnffile Anda , yang biasanya hidup /etc/mysql/my.cnfdi sistem Unix / OSX. Dalam beberapa kasus lokasi file adalah /etc/mysql/mysql.conf.d/mysqld.cnf).

Jika ini adalah sistem Windows, Anda dapat menemukannya di direktori instalasi MySQL, biasanya seperti C:\Program Files\MySQL\MySQL Server 5.5\ dan nama filenya my.ini.

Ubah baris

 bind-address = 127.0.0.1

untuk

 #bind-address = 127.0.0.1

Dan restart server MySQL ( Unix / OSX , dan Windows ) agar perubahan diterapkan.

mjuarez
sumber
4
Ok jadi saya telah menambahkan binnd-address = 127.0.0.1 di akhir file dan saya sudah mencoba menghubungkan menggunakan navicat dari host eksternal dan saya mendapatkan 10060 error
Leo
7
Hmm, Anda tidak perlu menambahkannya. Seperti jawaban saya katakan, Anda perlu berkomentar, bukan menambahkannya. Ada satu di sana secara default, jadi Anda harus menemukan itu, dan berkomentar dengan awalan dengan #
mjuarez
7
Hmm, di \ MYsql Server 5.5 \ hanya ada 1 file ini bernama my-default.ini dan satu-satunya baris tanpa # adalah ini: sql_mode = NO_ENGINE_SUBSTITUTION, STRICT_TRANS_TABLES
Leo
2
jawaban ini berfungsi sempurna. thnx @mjuarez - MEMBERIKAN SEMUA HAK ISTIMEWA . UNTUK 'me-root' @ '%' DIIDENTIFIKASI OLEH 'password' DENGAN GRANT OPTION;
yadavr
66
Bagi mereka yang mencari my.cnffile dan tidak menemukan bind-addressarahan di dalamnya, perhatikan bahwa dalam kasus saya (MySQL versi 14.14 pada Ubuntu 16.04.2) lokasi untuk file itu/etc/mysql/mysql.conf.d/mysqld.cnf
Ash Menon
49

Setelah melakukan semua hal di atas saya masih tidak bisa login sebagai rootjarak jauh, tetapi Telnetting ke port 3306mengkonfirmasi bahwa MySQLmenerima koneksi.

Saya mulai melihat pengguna di MySQL dan memperhatikan ada beberapa pengguna root dengan kata sandi yang berbeda.

select user, host, password from mysql.user;

Jadi MySQLsaya mengatur semua kata sandi untuk root lagi dan akhirnya saya bisa login dari jarak jauh root.

use mysql;
update user set password=PASSWORD('NEWPASSWORD') where User='root';
flush privileges;
Matthew Lock
sumber
4
Ini benar. Saat mengikuti langkah-langkah dalam jawaban lain, akun pengguna dengan kata sandi kosong tampaknya dibuat. Jadi, Anda perlu menambahkan kata sandi untuknya.
chhantyal
1
Saya perlu menggabungkan jawaban yang diterima dengan yang ini dan kemudian semuanya bekerja dengan baik.
James
8
SQL untuk 5.7 dan di atasnyaupdate user set authentication_string=password('YOUR_PASSWORD') where user='root';
DalSoft
Jawaban yang diterima menetapkan kata sandi dan berfungsi untuk saya.
MikeKulls
1
Terima kasih, seperti @James, saya harus menggabungkan ini dengan jawaban yang diterima untuk memperbaikinya.
Ben Everard
39

Hanya catatan dari pengalaman saya, Anda dapat menemukan file konfigurasi di bawah jalur ini /etc/mysql/mysql.conf.d/mysqld.cnf.

(Saya berjuang selama beberapa waktu untuk menemukan jalan ini)

Mayur Patel
sumber
1
Ini sangat tergantung pada distribusi apa yang Anda gunakan. Cara terbaik adalah dengan mencarinya saja:sudo find /etc -iname 'mysql*.cnf'
Martin Konecny
Saya menghargai perintah 'temukan'. Saya baru di baris perintah, jadi ini sangat membantu. Terima kasih!
Heres2u
Saya berjuang berjam-jam mengedit /etc/mysq/conf.d/mysql.cnf sampai saya menemukan ini tidak benar.
Gayan Kavirathne
26

Dalam kasus saya, saya mencoba untuk terhubung ke server mysql jarak jauh pada OS sen. Setelah melalui banyak solusi (memberikan semua hak istimewa, menghapus ikatan ip, mengaktifkan jaringan) masalah masih belum terpecahkan.

Ternyata, sambil melihat ke berbagai solusi, saya menemukan iptables, yang membuat saya menyadari port mysql 3306 tidak menerima koneksi.

Berikut ini adalah catatan kecil tentang bagaimana saya memeriksa dan menyelesaikan masalah ini.

  • Memeriksa apakah port menerima koneksi:
telnet (server mysql ip) [portNo]
  • Menambahkan aturan tabel ip untuk mengizinkan koneksi di port:
iptables -A INPUT -i eth0 -p tcp -m tcp --port 3306 -j MENERIMA
  • Tidak akan merekomendasikan ini untuk lingkungan produksi, tetapi jika iptables Anda tidak dikonfigurasi dengan benar, menambahkan aturan mungkin masih belum menyelesaikan masalah. Dalam hal ini harus dilakukan hal berikut:
iptables layanan berhenti

Semoga ini membantu.

Kushal
sumber
17

Silakan ikuti langkah-langkah yang disebutkan di bawah inorder untuk mengatur akses remote wildcard untuk Pengguna MySQL.

(1) Buka cmd.

(2) arahkan ke jalur C: \ Program Files \ MySQL \ MySQL Server 5.X \ bin dan jalankan perintah ini.

mysql -u root -p

(3) Masukkan kata sandi root.

(4) Jalankan perintah berikut untuk memberikan izin.

PEMBERI SEMUA HAK ISTIMEWA DI *. * KE 'USERNAME' @ 'IP' DIIDENTIFIKASI OLEH 'PASSWORD';

USERNAME: Nama pengguna yang ingin Anda hubungkan ke server MySQL.

IP: Alamat IP publik dari tempat Anda ingin mengizinkan akses ke server MySQL.

PASSWORD: Kata sandi nama pengguna yang digunakan.

IP dapat diganti dengan% untuk memungkinkan pengguna terhubung dari alamat IP apa pun.

(5) Siram previleges dengan mengikuti perintah dan keluar.

PRIVILEGUS FLUSH;

keluar; atau \ q

masukkan deskripsi gambar di sini

Hiren Parghi
sumber
3
Setelah melakukannya, akses root saya masih ditolak. Apa yang saya lewatkan?
teapeng
Anda dapat mencoba dengan Alamat IP sistem lokal Anda alih-alih% pada langkah ke-4. Itu harus bekerja. % berarti setiap Alamat IP.
Hiren Parghi
6

Jika proses server MySQL Anda hanya mendengarkan 127.0.0.1 atau :: 1 maka Anda tidak akan dapat terhubung dari jarak jauh. Jika Anda memiliki bind-addresspengaturan di/etc/my.cnf hal ini mungkin menjadi sumber masalah.

Anda juga harus menambahkan hak istimewa untuk yang bukan localhostpengguna.

anak laki-laki
sumber
Aneh, bagaimana mungkin server Anda "mendengarkan" pada IP lain 127.0.0.1?
Pacerier
2
@Pacerier 127.0.0.1 hanya terikat pada antarmuka loopback. Koneksi eksternal tidak akan berfungsi. Suatu sistem akan sering memiliki beberapa antarmuka jaringan, masing-masing harus terikat secara spesifik, atau Anda dapat menggunakan alamat bind-all 0.0.0.0.
tadman
6

Jika Anda menginstal MySQL brewdarinya sebenarnya hanya mendengarkan pada antarmuka lokal secara default. Untuk memperbaikinya Anda perlu mengedit /usr/local/etc/my.cnfdan mengubah bind-addressdari 127.0.0.1menjadi *.

Kemudian jalankan brew services restart mysql.

Timmmm
sumber
1
Untuk server ubuntu 16.04.4 saya, pengaturan bind-address ada di /etc/mysql/mysql.conf.d/mysqld.cnf
Frank
Ini bukan hanya menggunakan minuman, MySQL mana pun akan memiliki pengaturan default ini, hanya mengizinkan koneksi lokal.
nivs1978
6

Semua proses untuk login jarak jauh. Login jauh tidak aktif secara default. Anda harus membukanya secara manual untuk semua ip..untuk memberikan akses semua ip

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password';

Ip spesifik

GRANT ALL PRIVILEGES ON *.* TO 'root'@'your_desire_ip' IDENTIFIED BY 'password';

kemudian

flush privileges;

Anda dapat memeriksa Host Pengguna & Kata Sandi Anda

SELECT host,user,authentication_string FROM mysql.user;

Sekarang tugas Anda adalah mengubah ini

bind-address = 127.0.0.1

Anda dapat menemukannya di sini

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

jika Anda tidak menemukan ini di sana maka coba ini

sudo nano /etc/mysql/my.cnf

berkomentar dalam hal ini

#bind-address = 127.0.0.1

Kemudian mulai kembali Mysql

sudo service mysql restart

Sekarang nikmati login jarak jauh

albus_severus
sumber
3

Hanya FYI saya mencabut rambut saya dengan masalah ini selama berjam-jam .. akhirnya saya menghubungi penyedia hosting saya dan menemukan bahwa dalam kasus saya menggunakan server cloud yang di panel kontrol untuk 1and1 mereka memiliki firewall sekunder yang harus Anda kloning dan tambahkan port 3306. Setelah ditambahkan saya langsung masuk ..

Dan
sumber
Ini terdengar sangat spesifik untuk situasi Anda. Saya bukan sumber pengetahuan tanpa akhir tentang jaringan, tetapi apakah Anda yakin solusi ini berlaku untuk masalah ini?
Sandy Gifford
2
Saya juga pernah mengalami masalah ini. Umum dengan server yang di-host cloud,
Matthew Lock
2

Untuk siapa yang membutuhkannya, periksa port firewall 3306 juga terbuka, jika layanan firewall Anda berjalan.

Zelkovar
sumber
1

Dan untuk orang-orang OS X di luar sana ketahuilah bahwa parameter bind-address biasanya diatur dalam launchd plist dan bukan pada file my.ini. Jadi dalam kasus saya, saya dihapus <string>--bind-address=127.0.0.1</string>dari /Library/LaunchDaemons/homebrew.mxcl.mariadb.plist.

tdmartin102
sumber
Lokasi alternatif untuk file plist:~/Library/LaunchAgents
Dylan Nissley
1

Jika mysqldmemiliki alamat bind diatur ke loopback / alamat lokal (misalnya 127.0.0.1), server tidak akan dapat dijangkau dari host jarak jauh, karena antarmuka loopback tidak dapat dijangkau dari host jarak jauh mana pun.

Setel opsi ini ke 0.0.0.0( ::untuk IPv4 + 6) untuk menerima koneksi dari host mana pun, atau ke alamat lain yang dapat dijangkau secara eksternal jika Anda hanya ingin memperbolehkan koneksi pada satu antarmuka.

Sumber

Wesley Smith
sumber
0

beberapa kali perlu menggunakan nama pc di windows

langkah pertama) masukkan file konfigurasi mysql:

mysqld.cnf SET bind-address = 0.0.0.0

(untuk membiarkan koneksi recibe melalui tcp / ip)

langkah kedua) membuat pengguna di mysql, pengguna tabel, dengan nama pc pada windows propierties, BUKAN ip

masukkan deskripsi gambar di sini

Rubén Ruíz
sumber
0

Mengaktifkan akses root jarak jauh bisa berbahaya. Akan lebih baik jika Anda mengatur akun pengguna dengan izin yang lebih ketat. Tiga langkah berikut harus melakukannya.

  1. Pastikan baris yang dimulai dengan bind-address ...setidaknya dikomentari di file my.ini atau my.cnf Anda. Jika tidak ada, lanjutkan. Anda dapat menemukan file ini di C:\ProgramData\MySQL\MySQL Server 8.0Windows.

  2. Setelah itu, periksa bahwa akun pengguna yang Anda buat koneksi tidak memiliki localhostdalam bidang Pencocokan Tuan Rumah. Meskipun tidak disarankan, Anda bisa memasukkan %bidang itu untuk tujuan pengujian. Anda dapat melakukan ini dengan membuka koneksi lokal ke server dengan MySQL Workbench, kemudian pergi ke Server> Users and Privileges dari menu bar dan menemukan akun pengguna yang ingin Anda hubungkan.

Bidang "Limit to Hosts Matching" adalah yang melarang Anda untuk terhubung secara non-lokal. Yaitu membatasi koneksi yang diterima ke pola alamat IP. Idealnya, Anda harus mengakses server MySQL dari alamat IP statis atau subnet, sehingga Anda dapat seketat mungkin.

  1. Jelas, firewall Anda harus memungkinkan aplikasi Server MySQL untuk berkomunikasi melalui port yang Anda inginkan. Peralatan jaringan fisik di antara Anda dan server Anda harus memungkinkan komunikasi pada port yang ingin Anda sambungkan. (port 3306 biasanya)
Nikola Petrovic
sumber