Anda juga dapat memulai ulang mysqld, misalnya,sudo service mysqld restart
philfreo
Jawaban:
108
Anda harus membunuhnya satu per satu, MySQL tidak memiliki perintah kill besar-besaran. Anda dapat membuat skrip dalam bahasa apa pun, misalnya dalam PHP Anda dapat menggunakan sesuatu seperti:
$result = mysql_query("SHOW FULL PROCESSLIST");while($row=mysql_fetch_array($result)){$process_id=$row["Id"];if($row["Time"]>200){$sql="KILL $process_id";
mysql_query($sql);}}
jika Anda tidak ingin menyimpan dalam file, simpan dalam file variable
Jalankan saja di command prompt Anda
> out1=$(mysql -B test -uroot -proot --disable-column-names -e "select concat('KILL ',id,';') from information_schema.processlist where user='root' and time > 200;")> out2=$(mysql -B test -uroot -proot --disable-column-names -e "$out1")
ini adalah ide yang sangat buruk ... khususnya jika Anda memiliki mesin tabel yang disetel pada memori, menyebabkan semua data akan hilang ... atau jika Anda menggunakan tipe mesin innodb, karena itu akan mengulang semua indeks saat restart
HellBaby
8
Juga mematikan semua proses pada semua database
Diego Andrés Díaz Espinoza
10
Itu tidak lebih sederhana dari ini, Cukup jalankan ini di prompt mysql.
killUSER username;
Ini akan mematikan semua proses di bawah nama pengguna yang disediakan. karena sebagian besar orang menggunakan pengguna yang sama untuk semua tujuan, itu berhasil!
Saya telah menguji ini di MariaDB tidak yakin tentang mysql.
Di versi MySQL apa ini ada? Saya tidak melihatnya didokumentasikan dalam referensi MySQL 5.7 ; tidak ada bukti bahwa hal itu mungkin untuk membunuh oleh pengguna: KILL [CONNECTION | QUERY] processlist_id. Saya mencoba kueri Anda di MySQL 5.6.34 dan itu dianggap sebagai kesalahan sintaks.
Birchlabs
4
Saya telah mencoba ini di prompt MySQL 5.6.34: mysql> kill user root; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'root' at line 1 Mungkin jawaban Anda adalah fitur khusus MariaDB saja.
Birchlabs
Ini tidak berfungsi untuk Mysql. Harap baca sebelum memposting saran yang berkaitan dengan sistem DB lain ...
RyanH
7
Berikut ini akan membuat prosedur tersimpan sederhana yang menggunakan kursor untuk mematikan semua proses satu per satu kecuali untuk proses yang sedang digunakan:
DROPPROCEDUREIFEXISTS kill_other_processes;
DELIMITER $$CREATEPROCEDURE kill_other_processes()BEGINDECLARE finished INT DEFAULT0;DECLARE proc_id INT;DECLARE proc_id_cursor CURSORFORSELECT id FROM information_schema.processlist;DECLARECONTINUE HANDLER FORNOT FOUND SET finished =1;OPEN proc_id_cursor;
proc_id_cursor_loop: LOOP
FETCH proc_id_cursor INTO proc_id;IF finished =1THEN
LEAVE proc_id_cursor_loop;ENDIF;IF proc_id <> CONNECTION_ID()THENKILL proc_id;ENDIF;END LOOP proc_id_cursor_loop;CLOSE proc_id_cursor;END$$
DELIMITER ;
Ini dapat dijalankan dengan SELECTs untuk menunjukkan proses sebelum dan sesudah sebagai berikut:
Saya baru-baru ini perlu melakukan ini dan saya datang dengan ini
-- GROUP_CONCAT turns all the rows into 1-- @q:= stores all the kill commands to a variableselect@q:=GROUP_CONCAT(CONCAT('KILL ',ID) SEPARATOR ';')FROM information_schema.processlist
-- If you don't need it, you can remove the WHERE command altogetherWHEREuser='user';-- Creates statement and execute it
PREPARE stmt FROM@q;EXECUTE stmt;DEALLOCATE PREPARE stmt;
Dengan begitu, Anda tidak perlu menyimpan ke file dan menjalankan semua kueri dengan satu perintah.
Ini bukanlah jawaban atas pertanyaan tersebut. Di sini Anda membunuh satu proses sementara pertanyaannya adalah bagaimana Anda bisa menghentikan proses sekaligus.
Hristo Petev
@ badbod99 Saya akhirnya di sini mencari cara untuk mematikan proses mysql dan jawaban ini membantu saya jadi saya menaikkan suara itu.
Bogdan
3
Potongan ini berfungsi untuk saya (MySQL server 5.5) untuk mematikan semua proses MySQL:
mysql -e "show full processlist;"-ss | awk '{print "KILL "$1";"}'| mysql
LANGKAH 2: Panggil prosedur tersimpan dengan memberinya nama pengguna database yang prosesnya ingin Anda matikan. Anda dapat menulis ulang prosedur yang tersimpan untuk memfilter beberapa kriteria lain jika Anda mau.
Hei yang disana. Tidak yakin apakah Anda bot, Komunitas, atau manusia, tetapi bagaimanapun, akan sangat bagus jika Anda menambahkan beberapa kata yang menjelaskan apa yang terjadi dengan baris kode ini dan bagaimana cara itu menyelesaikan masalah yang dihadapi?
Félix Gagnon-Grenier
1
Menambahkan -u dan -p untuk memberikan akses ke pengguna ... berfungsi dengan baik!
Lord St John
2
Kita bisa melakukannya dengan MySQL Workbench. Jalankan saja ini:
Ini terdengar jawaban yang lebih baik karena tidak ada bahasa yang disebutkan di atas.
DeshDeep Singh
0
Cara termudah adalah dengan me-restart server mysql .. Buka "services.msc" di windows Run, pilih Mysql dari daftar. Klik kanan dan hentikan layanan. Kemudian Mulai lagi dan semua proses akan dimatikan kecuali yang satu (koneksi cadangan default)
sudo service mysqld restart
Jawaban:
Anda harus membunuhnya satu per satu, MySQL tidak memiliki perintah kill besar-besaran. Anda dapat membuat skrip dalam bahasa apa pun, misalnya dalam PHP Anda dapat menggunakan sesuatu seperti:
sumber
for i in {994..1145}; do mysql -uroot -p123456 -e "kill $i" ; done
Operasi pembunuhan massal menghemat waktu. Lakukan di MySql sendiri:
Jalankan perintah ini
Referensi
jika Anda tidak ingin menyimpan dalam file, simpan dalam file
variable
Jalankan saja di command prompt Anda
sumber
Saya juga telah mencari cara mengurai melalui MySQL perintah SHOW PROCESSLIST dan diakhiri dengan satu baris di Shell:
Anda dapat menjalankan grep sebelum perintah awk untuk memfilter nama database tertentu.
sumber
Atau ... dalam cangkang ...
Ya, saya tahu, saya malas, tapi itu bisa berguna juga.
sumber
Itu tidak lebih sederhana dari ini, Cukup jalankan ini di prompt mysql.
Ini akan mematikan semua proses di bawah nama pengguna yang disediakan. karena sebagian besar orang menggunakan pengguna yang sama untuk semua tujuan, itu berhasil!
Saya telah menguji ini di MariaDB tidak yakin tentang mysql.
sumber
KILL [CONNECTION | QUERY] processlist_id
. Saya mencoba kueri Anda di MySQL 5.6.34 dan itu dianggap sebagai kesalahan sintaks.mysql> kill user root; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'root' at line 1
Mungkin jawaban Anda adalah fitur khusus MariaDB saja.Berikut ini akan membuat prosedur tersimpan sederhana yang menggunakan kursor untuk mematikan semua proses satu per satu kecuali untuk proses yang sedang digunakan:
Ini dapat dijalankan dengan
SELECT
s untuk menunjukkan proses sebelum dan sesudah sebagai berikut:sumber
Saya baru-baru ini perlu melakukan ini dan saya datang dengan ini
Dengan begitu, Anda tidak perlu menyimpan ke file dan menjalankan semua kueri dengan satu perintah.
sumber
BUNUH SEMUA KUERI PILIHAN
sumber
Jika Anda tidak memiliki information_schema:
sumber
login ke Mysql sebagai admin:
Dan daripada menjalankan perintah:
Anda akan mendapatkan sesuatu seperti di bawah ini:
Anda akan melihat detail lengkap dari koneksi yang berbeda. Sekarang Anda dapat mematikan koneksi tidur seperti di bawah ini:
sumber
Potongan ini berfungsi untuk saya (MySQL server 5.5) untuk mematikan semua proses MySQL:
sumber
Saya akan menggabungkan bash dan mysql:
sumber
Berikut adalah solusi yang dapat Anda jalankan tanpa bergantung pada sistem operasi:
LANGKAH 1: Buat prosedur tersimpan.
LANGKAH 2: Panggil prosedur tersimpan dengan memberinya nama pengguna database yang prosesnya ingin Anda matikan. Anda dapat menulis ulang prosedur yang tersimpan untuk memfilter beberapa kriteria lain jika Anda mau.
PANGGILAN
kill_user_processes('devdba');
sumber
sumber
Kita bisa melakukannya dengan MySQL Workbench. Jalankan saja ini:
Contoh:
Itu akan menghapusnya.
sumber
Cara termudah adalah dengan me-restart server mysql .. Buka "services.msc" di windows Run, pilih Mysql dari daftar. Klik kanan dan hentikan layanan. Kemudian Mulai lagi dan semua proses akan dimatikan kecuali yang satu (koneksi cadangan default)
sumber
sumber
Terkadang saya memiliki beberapa proses mysql zombie yang tidak dapat dibunuh (menggunakan MAMP Pro).
Pertama dapatkan daftar semua proses mysql:
Selanjutnya bunuh semuanya dengan (ganti processId dengan kolom pertama di hasil perintah sebelumnya):
sumber
Berikut ini bekerja sangat baik untuk saya:
sumber
Saya menggunakan perintah
flush tables
untuk membunuh semua koneksi yang tidak aktif yang sebenarnya merupakan masalah massal.sumber
untuk bahasa python, Anda bisa melakukan seperti ini
sumber
Jika Anda menggunakan laravel maka ini untuk Anda:
Tentu saja, Anda harus menggunakan ini
use Illuminate\Support\Facades\DB;
setelah namespace Anda.sumber
Query 1 pilih concat ('KILL', id, ';') dari information_schema.processlist dimana user = 'username' ke outfile '/tmp/a.txt';
Kueri 2 sumber a.txt
Ini akan memungkinkan Anda untuk membunuh semua kueri dalam daftar proses acara oleh pengguna tertentu.
sumber