Apa alasan Host 'host_name' diblokir di MySQL?

12

Ketika saya menggunakan kata sandi yang salah untuk terhubung ke server mysql, dan jumlah tes lebih dari max_connect_errors, dan saya menemukan Aborted_connectsjuga muncul sebagai jumlah yang saya uji, tetapi tuan rumah masih belum diblokir.

Jadi apakah Aborted_connectslebih dari nama max_connect_errorshost maka diblokir?

pengguna3157
sumber

Jawaban:

8

Pada titik ini, Anda mungkin perlu menjalankan FLUSH HOSTS dan melihat apakah ini terbuka.

Dokumentasi MySQL mengatakan ini tentang FLUSH HOSTS:

  • Mengosongkan tabel cache host. Anda harus menyiram tabel host jika beberapa host Anda mengubah alamat IP atau jika Anda mendapatkan pesan kesalahan Host 'host_name' diblokir. Ketika lebih dari kesalahan max_connect_errors terjadi berturut-turut untuk host yang diberikan saat terhubung ke server MySQL, MySQL mengasumsikan bahwa ada sesuatu yang salah dan memblokir host dari permintaan koneksi lebih lanjut. Pembilasan tabel host memungkinkan upaya koneksi lebih lanjut dari host. Lihat Bagian C.5.2.6, “Host 'host_name' diblokir”. Anda dapat memulai mysqld dengan --max_connect_errors = 999999999 untuk menghindari pesan kesalahan ini.

Mengapa tuan rumah harus diblokir untuk memulai?

Menurut Dokumentasi MySQL :

Jika Anda mendapatkan kesalahan berikut, itu berarti mysqld telah menerima banyak permintaan koneksi dari host 'host_name' yang telah terputus di tengah: Host 'host_name' diblokir karena banyak kesalahan koneksi. Buka blokir dengan 'mysqladmin flush-hosts' Jumlah permintaan koneksi terputus yang diizinkan ditentukan oleh nilai variabel sistem max_connect_errors. Setelah max_connect_errors permintaan gagal, mysqld mengasumsikan bahwa ada sesuatu yang salah (misalnya, seseorang mencoba untuk masuk), dan memblokir host dari koneksi lebih lanjut sampai Anda menjalankan perintah mysqladmin flush-hosts atau mengeluarkan pernyataan FLUSH HOSTS. Lihat Bagian 5.1.3, “Variabel Sistem Server”.

Secara default, mysqld memblokir host setelah 10 kesalahan koneksi. Anda dapat menyesuaikan nilainya dengan memulai server seperti ini:

shell> mysqld_safe --max_connect_errors=10000 &

Jika Anda mendapatkan pesan kesalahan ini untuk host yang diberikan, Anda harus terlebih dahulu memverifikasi bahwa tidak ada yang salah dengan koneksi TCP / IP dari host itu. Jika Anda mengalami masalah jaringan, Anda tidak perlu menambah nilai variabel max_connect_errors.

RolandoMySQLDBA
sumber
Sepertinya kesalahan ini tidak masuk ke log kesalahan MySQL normal. Apakah ada cara untuk melihat log kesalahan koneksi pemblokiran host? Saya juga mencatat "berturut-turut" di atas. Jadi, hanya perlu koneksi yang sukses di antara? Atau, haruskah saya mengajukan pertanyaan baru?
Marc L.
1

Salah satu penyebab penyumbatan tersebut adalah ketika beberapa orang secara acak di host memutuskan untuk melakukan pemantauan MySQL dan mengatur telnet ke port MySQL pada server jarak jauh. Dengan jumlah doa telnet yang cukup, tuan rumah kemudian diblokir dari akses lebih lanjut ke server MySQL itu. Tidak seperti beberapa server, MySQL tidak secara otomatis membuka blokir akses setelah jangka waktu yang wajar: administrator server harus mengetuk MySQL.

Richard
sumber