Bagaimana cara membersihkan semua koneksi mysql?

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

Kerang

1

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

Bagaimana cara memperbaiki terlalu banyak koneksi di MySQL?

Solusi .
Identifikasi nilai variabel max_connections. mysql --user="root" --password="PASSWORD" --execute='TAMPILKAN VARIABEL SEPERTI "max_connections";.
Gunakan editor teks favorit Anda untuk mengubah /etc/mysql/my. cnf dan tetapkan nilai berikut. max_connections = 500. .
Mulai ulang layanan MySQL dan untuk menerapkan perubahan

Apa arti flush di MySQL?

FLUSH LOG. Menutup dan membuka kembali semua file log yang ditulis oleh server . Operasi ini memerlukan hak istimewa RELOAD. Efek dari operasi ini setara dengan efek gabungan dari operasi ini. FLUSH BINARY LOG FLUSH ENGINE LOG FLUSH ERROR LOG FLUSH UMUM LOG FLUSH RELAY LOG FLUSH SLOW LOG.

Bagaimana cara mematikan server MySQL?

Hentikan Server MySQL .
PENTING. Jangan hentikan server MySQL jika sisa aplikasi STA sedang berjalan
Buka sesi terminal di server STA, dan masuk sebagai pengguna Oracle
Hentikan server MySQL. $ STA hentikan mysql
Pastikan server tidak berjalan. $ STA status mysql. Anda harus melihat. mysql dimatikan

Bagaimana cara saya memeriksa terlalu banyak koneksi di MySQL?

Untuk memeriksa jumlah max_connections saat ini, masuklah ke klien baris perintah MySQL/MariaDB dengan perintah berikut. .
mysql -u akar -p
TAMPILKAN variabel;
sudo nano /etc/my. cnf
[mysqld]
max_connections=[jumlah maksimum baru yang diinginkan]
[mysqld] max_connections=200
mysql -u akar -p