Saya membutuhkan cara yang efisien untuk memutuskan semua klien dengan nama pengguna yang diberikan dari MySQL. Saya berpikir untuk mengganti kata sandi pengguna tetapi saya pikir itu hanya diperiksa ketika koneksi dibuat.
Ide ide?
Anda dapat menggunakan metode "SQL ke SQL" di bawah ini (cukup berikan opsi koneksi tambahan ke klien mysql sesuai kebutuhan):
shell> mysql -NBe "SELECT CONCAT('KILL ', id, ';') FROM information_schema.processlist WHERE user = 'some_username';" | mysql -vv
Catatan: Ini berfungsi dengan MySQL 5.1 dan 5.5. Ini harus diimplementasikan secara berbeda untuk versi MySQL yang lebih lama karena information_schema tidak memiliki tabel daftar proses.
Opsi yang digunakan:
-N means that you do not want to get column names back.
-B puts it into batch mode, so that you do not get MySQL's table layout.
-e executes the following statement.
-v controls the verbosity, could be used up to three times.
Penjelasan tentang cara kerjanya:
Pertama, pernyataan KILL dihasilkan bersama dengan ID.
shell> mysql -NBe "SELECT CONCAT('KILL ', id, ';') FROM information_schema.processlist WHERE user = 'some_username';"
Output sampel:
KILL 1061;
KILL 1059;
KILL 1057;
Kemudian pernyataan itu dieksekusi.
shell> mysql -NBe "SELECT CONCAT('KILL ', id, ';') FROM information_schema.processlist WHERE user = 'some_username';" | mysql -vv
Output sampel:
--------------
KILL 1061
--------------
Query OK, 0 rows affected
--------------
KILL 1059
--------------
Query OK, 0 rows affected
--------------
KILL 1057
--------------
Query OK, 0 rows affected
Di linux Anda bisa menggunakan sesuatu seperti itu.
Pendekatan saya sangat sederhana. Pada langkah pertama kami mengirim 'tampilkan daftar proses' ke database kami. Hasilnya adalah daftar dengan semua pengguna yang terhubung. Pada langkah berikutnya kita menggunakan perintah grep tua yang baik untuk memfilter nama pengguna. Dengan awk kita menghasilkan 'kill command'. Pada langkah terakhir kami mengirim semua perintah kill ke mysql. Semuanya harus disatukan dengan | simbol.
sumber