Bagaimana cara mengikat server MySQL ke lebih dari satu alamat IP?

260

Apakah ada cara rahasia untuk mengikat MySQL ke lebih dari satu alamat IP?

Sejauh yang saya bisa lihat parameter bind-address di my.cnf tidak mendukung lebih dari satu IP dan Anda tidak dapat memilikinya lebih dari sekali.

BlaM
sumber

Jawaban:

242

Tidak, tidak ada (saya baru memeriksa 1 jam yang lalu). Anda dapat mengomentari bind-address di my.cnf:

#skip-networking
#bind-address                   = 127.0.0.1

Jika Anda hanya ingin 2 IP, Anda harus menggunakan firewall.

Christian Lescuyer
sumber
31
Benar. Binding terbatas pada 0, 1, atau semua alamat IP di server.
Joe
7
Namun, perhatikan bahwa Anda dapat mempublikasikan dan melayani soket unix lokal dan soket jaringan dengan menentukan opsi socketdan bind-addressopsi.
danorton
5
masih berlaku sampai hari ini.
Dennis Nolte
22
Itu konyol.
Phillipp
2
@AJP Mysql memperlakukan 'localhost' dan '127.0.0.1' secara berbeda dalam sistem privilege. Dikonfirmasi di sini: File soket Unix digunakan jika Anda tidak menentukan nama host atau jika Anda menentukan nama host khusus localhost.
Christian Lescuyer
78

Mengikat ke 127.0.0.x tidak akan membuatnya tersedia untuk semua perangkat, itu akan membuatnya tersedia secara lokal saja. Jika Anda ingin membuatnya tersedia untuk semua antarmuka, Anda harus menggunakan 0.0.0.0. Jika Anda ingin mengaksesnya dari lebih dari satu, tetapi kurang dari semua antarmuka, Anda harus mengikat ke 0.0.0.0 dan firewall dari antarmuka yang Anda tidak ingin diakses melalui.

Selain itu, sebagai lapisan kedua keamanan, Anda harus memastikan bahwa semua pengguna MySQL Anda memiliki bidang host yang disetel ke sesuatu selain% (yaitu host mana pun).

Grey Panther
sumber
1
Kecuali Anda memiliki tumpukan jaringan yang rusak, Anda tidak dapat mengikat port TCP ke alamat 0.0.0.0.
John Gardeniers
26
Anda dapat mengikat ke 0.0.0.0. Anda tidak bisa mengarahkan ke sana. Jika Anda menggunakan Linux (atau bahkan di Windows, cukup instal netcat untuk windows) coba: di satu terminal: nc -l 0.0.0.0 4321 dan di terminal kedua: telnet <IP dari semua antarmuka yang dimiliki komputer Anda> 4321 Dan itu akan terhubung ke sana.
Grey Panther
Seperti yang saya katakan, kecuali jika Anda memiliki tumpukan jaringan yang rusak ...
John Gardeniers
1
@JohnGardeniers Apakah itu sebabnya itu di ip linux (7) halaman manual yang ditetapkan di bawah alamat khusus: INADDR_ANY (0.0.0.0) means any address for binding;?
ebyrob
2
Di Debian, buat file /etc/mysql/conf.d/bindaddress.cnffile dengan konten[mysqld] \n bind-address = 0.0.0.0
Yves Martin
41

Anda tidak dapat mengikat lebih dari satu alamat IP, tetapi Anda dapat mengikat semua alamat IP yang tersedia. Jika demikian, cukup gunakan 0.0.0.0untuk alamat yang mengikat di file konfigurasi MySQL Anda (mis. /Etc/mysql/my.cnf) sebagai berikut:

bind-address    = 0.0.0.0

Jika alamatnya adalah 0.0.0.0, server menerima koneksi TCP / IP pada semua antarmuka host server IPv4.

Selanjutnya jika alamatnya adalah ::, server menerima koneksi TCP / IP pada semua antarmuka host server IPv4 dan IPv6. Gunakan alamat ini untuk mengizinkan koneksi IPv4 dan IPv6 pada semua antarmuka server.

Atau Anda bisa langsung berkomentar bind-address=, jadi itu akan mengikat ke semua alamat. Tetapi pastikan Anda tidak skip-networkingmengaktifkan di my.cnf Anda jika Anda juga ingin mengizinkan koneksi jarak jauh (Baca lebih lanjut: MySQL: Izinkan koneksi jarak jauh DAN lokal ).

Setelah mengubah alamat yang mengikat, jangan lupa untuk me-restart server MySQL Anda dengan:

sudo service mysql restart

Akhirnya Anda dapat mempertimbangkan untuk menjalankan beberapa instance MySQL pada satu mesin (port yang berbeda) dengan replikasi Master / Slave. Replikasi memungkinkan data dari satu server database MySQL (master) untuk disalin ke satu atau lebih server database MySQL (para budak).

Baca lebih lajut:

kenorb
sumber
Ini berfungsi dengan baik. Ingatlah untuk memeriksa apakah semua pengguna diizinkan untuk terhubung dari tanggal 2, 3, alamat IP apa pun
gies0r
21

Tidak Anda tidak bisa. Halaman yang Anda tautkan dengan jelas menyatakan:

Alamat IP yang akan diikat. Hanya satu alamat yang dapat dipilih. Jika opsi ini ditentukan beberapa kali, alamat terakhir yang diberikan digunakan.

Jika tidak ada alamat atau 0.0.0.0 yang ditentukan, server mendengarkan semua antarmuka.

Andreas
sumber
12

Seperti yang telah dijawab orang lain, belum ada cara untuk secara selektif mengikat lebih dari satu antarmuka.

Linux memiliki beberapa alat TCP yang memungkinkan. Dalam pengaturan ini, Anda akan mengonfigurasi mysql untuk mendengarkan pada 127.0.0.1 dan kemudian menggunakan redir untuk mengeksposnya pada antarmuka yang sewenang-wenang.

Saya telah menggunakan ini untuk membantu tamu kotak virtual melihat mysql diinstal pada mesin host.

redir --laddr=192.168.33.1 --lport=3306 --caddr=127.0.0.1 --cport=3306 &
txyoji
sumber
Catatan MySQL> = 8.0.13 memungkinkan pengikatan ke lebih dari satu antarmuka.
txyoji
6

Saya pikir pertanyaan Anda terkait dengan bug ini http://bugs.mysql.com/bug.php?id=14979 Laporan bug menyarankan beberapa solusi.


sumber
Permintaan fitur MySQL sejak 2005!
Tonin
5

Sebelum MySQL 8.0.13, --bind-address menerima nilai alamat tunggal, yang dapat menentukan satu alamat IP non-wildcard atau nama host, atau salah satu format alamat wildcard yang memungkinkan mendengarkan pada beberapa antarmuka jaringan (*, 0,0 .0.0, atau: :).

Pada MySQL 8.0.13, --bind-address menerima nilai tunggal seperti yang baru saja dijelaskan, atau daftar nilai yang dipisahkan koma. Ketika opsi menamai daftar beberapa nilai, setiap nilai harus menentukan satu alamat IP non-wildcard atau nama host; tidak ada yang bisa menentukan format alamat wildcard (*, 0.0.0.0, atau: :).

Sumber: https://dev.mysql.com/doc/refman/8.0/en/server-options.html

Tadej
sumber
3

Dalam perubahan my.cnf (biasanya /etc/mysql/my.cnf di Linux atau untuk windows periksa jawaban ini .

bind-address                   = 127.0.0.1

untuk

bind-address                   = 0.0.0.0

Kemudian restart mysql (di layanan Ubuntu mysql restart ) di windows biasanya layanan restart melalui Win + R services.msc

0.0.0.0 memberitahukannya untuk mengikat semua IP yang tersedia dengan port yang juga diberikan di my.cnf

Aleksandar Pavić
sumber