Seringkali saya mengalami situasi ketika saya harus memutuskan koneksi di server MySQL – misalnya, ratusan contoh dari beberapa kueri buruk sedang berjalan, membuat server tidak dapat digunakan. Banyak orang memiliki skrip khusus yang dapat menjadikan pengguna, host sumber, atau kueri sebagai parameter dan melakukan tindakan. Ada juga cara melakukannya hanya dengan menggunakan MySQL dengan beberapa perintah
Kerang1
2
3
4
5
6
7
8
9
10
11
12
13
14
mysql> pilih concat('KILL ',id,';') from information_schema.processlist di mana pengguna = 'root';
+------------------------+
. concat('KILL ',id,';') |
+------------------------+
. BUNUH 3101; .
. BUNUH 2946; .
+------------------------+
2 baris di set (0.00 dtk)
mysql> pilih concat('KILL ',id,';') from information_schema.processlist di mana pengguna = 'root' into outfile '/tmp/a.txt';
Kueri OK, 2 baris affected (0.00 dtk)
mysql> sumber / tmp/a.txt;
Kueri OK, 0 baris affected (0.00 dtk)
Secara umum, ini adalah pendekatan yang sangat kuat yang saya gunakan dalam banyak kasus untuk membuat satu set pernyataan SQL dengan kueri SQL dan kemudian menjalankannya
Alangkah baiknya dan bersih jika MySQL memiliki beberapa cara untuk "eval" - jalankan kumpulan hasil kueri sebagai perintah SQL. Ini akan menghindari persyaratan untuk menggunakan file sementara dll
Dalam beberapa kasus saat menjalankan MySQL di Amazon RDS (atau di tempat lain), mungkin perlu untuk FLUSH semua host catatan dari MySQL. Biasanya, ini diperlukan saat kesalahan "Host 'host_name' is blocked" terjadi, yang akan mencegah koneksi tambahan dari host_name tertentu
Kesalahan host_name blocked_ terjadi ketika jumlah max_connect_errors yang ditentukan dalam konfigurasi MySQL terlampaui, yang berarti host tertentu terlalu sering mencoba menyambung tanpa hasil. Ini adalah tindakan keamanan yang dilakukan oleh MySQL untuk mencegah serangan yang tidak beralasan dari host/pengguna yang tidak memiliki kredensial yang tepat, tetapi terkadang hal itu dapat terjadi secara tidak sengaja dan mungkin perlu diselesaikan dengan membersihkan host
Apa yang Dilakukan Pembilasan Host?
Dengan pengguna MySQL dengan hak istimewa yang tepat mengeksekusi pernyataan FLUSH, MySQL dapat menghapus tabel flush, kunci, dan sistem cache internal tergantung pada options yang diteruskan. Dalam kasus $ mysqladmin -h <RDS_ENDPOINT_URL> -P <PORT> -u <USER> -p flush-hosts 0, MySQL akan mengosongkan cache host, yang secara efektif berarti catatan MySQL tentang host mana yang saat ini atau baru saja terhubung akan diatur ulang, memungkinkan koneksi lebih lanjut dari host tersebut
Menjalankan FLUSH HOST Secara Langsung
Meskipun mungkin Anda benar-benar dicegah untuk terhubung ke MySQL, dalam beberapa kasus sistem mungkin akan "menyimpan" slot koneksi yang hanya tersedia untuk akun utama atau $ mysqladmin -h <RDS_ENDPOINT_URL> -P <PORT> -u <USER> -p flush-hosts 1
Untuk $ mysqladmin -h <RDS_ENDPOINT_URL> -P <PORT> -u <USER> -p flush-hosts 2, nama pengguna ini biasanya ditemukan di konsol manajemen Anda sebagai default atau "Master". Coba sambungkan ke server MySQL Anda dengan nama pengguna utama ini
Jika Anda dapat terhubung, membersihkan host Anda semudah menjalankan pernyataan MySQL $ mysqladmin -h <RDS_ENDPOINT_URL> -P <PORT> -u <USER> -p flush-hosts 0
FLUSH HOSTS; _
Anda sekarang seharusnya telah menghapus kesalahan host_name blocked Anda dan dapat terhubung dengan akun MySQL standar Anda
Pembilasan Host dari Jarak Jauh Menggunakan MySQLAdmin
Jika Anda tidak dapat terhubung ke MySQL sebagai akun utama dan masih menerima kesalahan $ mysqladmin -h <RDS_ENDPOINT_URL> -P <PORT> -u <USER> -p flush-hosts 5, opsi selanjutnya adalah menyambung ke server dari jarak jauh dan menjalankan perintah $ mysqladmin -h <RDS_ENDPOINT_URL> -P <PORT> -u <USER> -p flush-hosts 6 menggunakan alat $ mysqladmin -h <RDS_ENDPOINT_URL> -P <PORT> -u <USER> -p flush-hosts 7
Untuk melakukan ini, Anda harus terhubung ke instans atau server EC2 lain yang memiliki akses ke server RDS yang menghasilkan kesalahan
Setelah terhubung, jalankan perintah berikut dengan opsi yang tepat diganti antara $ mysqladmin -h <RDS_ENDPOINT_URL> -P <PORT> -u <USER> -p flush-hosts 8
$ mysqladmin -h <RDS_ENDPOINT_URL> -P <PORT> -u <USER> -p flush-hosts
Jika berhasil, perintah $ mysqladmin -h <RDS_ENDPOINT_URL> -P <PORT> -u <USER> -p flush-hosts _9 akan dieksekusi seperti yang diharapkan dan sekarang Anda dapat terhubung ke MySQL seperti biasa
Mem-boot ulang Instans RDS
Opsi terakhir, jika semuanya gagal, cukup masuk ke panel kontrol manajemen RDS dan mulai ulang secara manual instans RDS yang memberikan kesalahan. Ini secara efektif akan mengatur ulang FLUSH_0 untuk Anda, meskipun mungkin tidak ideal dalam keadaan produksi