Dalam hal mematikan proses dan kueri MySQL, ada beberapa hal yang dapat Anda coba. Berikut adalah beberapa cara terbaik untuk membunuh query dan proses MySQL. Catatan singkat, jika Anda menggunakan penyedia hosting WooCommerce yang bagus, Anda tidak perlu menyesuaikan proses MySQL secara manual untuk menjaga situs web Anda tetap online
1. Ketahui daftar Proses
Jalankan perintah berikut
show processlist;Ini akan menampilkan semua koneksi terbuka ke server. Ini termasuk ID utas, Pengguna, Host, DB, TIme, Status, Info, dll
Sebelum menjalankan perintah ini, pastikan Anda memiliki hak admin. Output perintah saat ini menjalankan kueri
2. Bunuh Utas Tertentu
Jika Anda mengetahui "Thread ID" maka Anda dapat mematikan utas tersebut menggunakan perintah kill
Cukup jalankan perintah berikut
kill thread_id;_Misalnya, jika ID utas adalah 33, Anda dapat menjalankan perintah berikut untuk mematikan utas ini
kill 33;3. Menggunakan CONCAT untuk membunuh beberapa Proses MySQL
Karena MySQL tidak memiliki perintah kill yang masif, Anda dapat menggunakan "concat" untuk menghasilkan perintah kill dari tabel daftar Proses
Ada beberapa cara untuk melakukan ini
Metode 1
Jalankan perintah berikut
mysql> SELECT GROUP_CONCAT(CONCAT('KILL ',id,';') SEPARATOR ' ') FROM information_schema.processlist WHERE user <> 'system user';Ini akan mematikan semua kueri MySQL Anda
Metode 2
Anda dapat membuat tabel dari daftar proses
Lari
SELECT * FROM processlist\G; _Sekarang, gunakan yang berikut ini
SELECT CONCAT('KILL ',id,';') AS kill_list FROM information_schema.processlist WHERE user='root' AND info = 'SELECT * FROM processlist';Ini akan memberikan output yang akan terlihat mirip dengan ini
+------------------------+ | kill_list | +------------------------+ | KILL 1; | | KILL 2; | | KILL 3; | | KILL 4; | +------------------------+ _Sekarang Anda dapat menggunakan salah satu dari cara berikut untuk mematikan semua utas
1. Dengan mengedit teks secara manual
Salin output ini dalam file teks dan hapus pipa, tanda tambah, dan tanda hubung. Kemudian jalankan semua perintah kill di MySQL. Ini akan membunuh semua proses
2. Dengan menggunakan perintah untuk membuat file output
Jalankan perintah berikut
SELECT CONCAT('KILL ',id,';') AS run_this FROM information_schema.processlist WHERE user='root' AND info = 'SELECT * FROM processlist' INTO OUTFILE '/tmp/kill_list.txt'Ini akan membuat file teks dengan nama "kill_list". Anda hanya perlu menghapus baris pertama dari file teks (kill_list) karena ini bukan perintah MySQL yang valid
Sekarang Anda dapat menjalankan ini di MySQL. Itu akan mengeksekusi semua pernyataan dalam file yang akan mematikan semua utas
Anda juga dapat mengimpor file ini untuk mematikan beberapa kueri MySQL sekaligus
mysql -uroot -p{yourpassword} < /tmp/kill_list.txt_4. Bunuh Semua Proses
Anda dapat mencoba menggunakan kueri berikut untuk mematikan semua proses
mysql -e "show full processlist;" -ss | awk '{print "KILL "$1";"}'| mysql _5. Menggunakan skrip PHP
Anda dapat menggunakan skrip PHP seperti berikut ini
kill thread_id;_06. Menggunakan Prosedur Tersimpan Untuk Mengecualikan Proses Saat Ini
Anda dapat membuat prosedur tersimpan untuk mematikan semua proses satu per satu tanpa mematikan proses yang sedang digunakan
kill thread_id;_1Anda dapat menyebutnya menggunakan
kill thread_id;_27. Prosedur Tersimpan Untuk Membunuh Proses Pengguna Tertentu
Anda dapat membuat prosedur tersimpan yang dapat mematikan semua proses pengguna tertentu
kill thread_id;_3Anda dapat memanggil prosedur dengan menyebutkan nama pengguna dari pengguna basis data yang prosesnya ingin Anda matikan. Misalkan pengguna adalah 'bob' yang dapat Anda gunakan
kill thread_id;_4
Jadi, Anda dapat mematikan kueri, proses, atau utas MySQL dengan menjalankan perintah ini. Anda mungkin telah memperhatikan bagaimana perintah "show processlist" berguna dalam mengidentifikasi metode yang harus dimatikan. Karena tidak ada perintah tunggal di MySQL untuk mematikan semua proses, kami harus menyelesaikannya dengan solusi. Kami harap artikel ini membantu Anda. Jika Anda memiliki pendekatan baru, silakan bergabung dengan diskusi di komentar.
mysql (dari MariaDB 10. 4. 6, juga disebut mariadb) adalah shell SQL sederhana (dengan kemampuan readline GNU). Ini mendukung penggunaan interaktif dan non-interaktif. Saat digunakan secara interaktif, hasil kueri disajikan dalam format tabel ASCII. Saat digunakan secara non-interaktif (misalnya, sebagai filter), hasilnya disajikan dalam format yang dipisahkan tab. Format keluaran dapat diubah menggunakan opsi perintah
Jika Anda mengalami masalah karena memori tidak mencukupi untuk set hasil yang besar, gunakan opsi mysql --user=user_name --password=your_password db_name 1. Ini memaksa mysql untuk mengambil hasil dari server satu baris pada satu waktu daripada mengambil seluruh set hasil dan menyangganya di memori sebelum menampilkannya. Ini dilakukan dengan mengembalikan rangkaian hasil menggunakan fungsi mysql --user=user_name --password=your_password db_name 2 C API di pustaka klien/server daripada mysql --user=user_name --password=your_password db_name 3
Menggunakan mysql sangat mudah. Aktifkan dari prompt penerjemah perintah Anda sebagai berikut
mysql db_nameAtau
mysql --user=user_name --password=your_password db_nameKemudian ketik pernyataan SQL, akhiri dengan “;”, \g, atau \G dan tekan Enter
Mengetik Control-C menyebabkan mysql mencoba mematikan pernyataan saat ini. Jika ini tidak dapat dilakukan, atau Control-C diketik lagi sebelum pernyataan dimatikan, mysql keluar
Anda dapat menjalankan pernyataan SQL dalam file skrip (file batch) seperti ini
mysql db_name < script.sql > output.tabDari MariaDB 10. 4. 6, mysql --user=user_name --password=your_password db_name _4 tersedia sebagai symlink ke mysql --user=user_name --password=your_password db_name 5
Dari MariaDB 10. 5. 2, mysql --user=user_name --password=your_password db_name _5 adalah symlink, dan mysql --user=user_name --password=your_password db_name 4 adalah nama biner
Menggunakan mysql
Perintah untuk menggunakan mysql --user=user_name --password=your_password db_name _5 dan sintaks umumnya adalah
mysqlPilihan
mysql --user=user_name --password=your_password db_name 5 mendukung opsi berikut
File Opsi
Selain membaca opsi dari baris perintah, mysql --user=user_name --password=your_password db_name 5 juga dapat membaca opsi dari file opsi. Jika opsi yang tidak diketahui disediakan untuk mysql --user=user_name --password=your_password db_name _5 dalam file opsi, maka opsi tersebut akan diabaikan
Opsi berikut terkait dengan cara alat baris perintah MariaDB menangani file opsi. Mereka harus diberikan sebagai argumen pertama pada baris perintah
Di MariaDB 10. 2 dan yang lebih baru, mysql --user=user_name --password=your_password db_name _5 ditautkan dengan MariaDB Connector/C. Namun, MariaDB Connector/C belum menangani penguraian file opsi untuk klien ini. Itu masih dilakukan oleh kode parsing file opsi server. Lihat MDEV-19035 untuk informasi lebih lanjut
Grup Opsi
mysql --user=user_name --password=your_password db_name 5 membaca opsi dari yang berikut dari file opsi
Cara Menentukan Protokol Yang Akan Digunakan Saat Menghubungkan ke Server mysqld
Anda dapat memaksa protokol mana yang akan digunakan untuk terhubung ke server mysql db_name < script.sql > output.tab 4 dengan memberikan opsi mysql db_name < script.sql > output.tab 5 salah satu dari nilai berikut. mysql db_name < script.sql > output.tab 6, mysql db_name < script.sql > output.tab 7, mysql db_name < script.sql > output.tab 8 atau mysql db_name < script.sql > output.tab 9
Jika mysql db_name < script.sql > output.tab 5 tidak ditentukan, sebelum MariaDB 10. 6. 1, properti koneksi baris perintah yang tidak memaksa protokol diabaikan
Dari MariaDB 10. 6. 1, properti koneksi yang ditentukan melalui baris perintah (mis. g. mysql 1) akan memaksa tipenya. Protokol yang cocok dengan properti koneksi masing-masing digunakan, mis. g. koneksi TCP/IP dibuat saat mysql 2 ditentukan
Jika beberapa atau tidak ada properti koneksi ditentukan melalui baris perintah, maka hal berikut akan terjadi
Linux/Unix
- Jika mysql _3 tidak ditentukan atau mysql 3 adalah mysql 5, maka soket Unix digunakan
- Dalam kasus lain (mysql _3 diberikan dan bukan mysql 5) maka koneksi TCP/IP melalui opsi mysql 8 digunakan
Perhatikan bahwa mysql _5 adalah nilai khusus. Menggunakan 127. 0. 0. 1 bukanlah hal yang sama. Yang terakhir akan terhubung ke server mysqld melalui TCP/IP
Windows
- Jika shell> mysql test Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 10 Server version: 10.2.2-MariaDB-valgrind-max-debug Source distribution Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [test]> status; -------------- mysql Ver 15.1 Distrib 10.0.25-MariaDB, for Linux (x86_64) using readline 5.2 Connection id: 10 Current database: test Current user: monty@localhost ... Connection: Localhost via UNIX socket ... UNIX socket: /tmp/mysql-dbug.sock _0 ditentukan dan mysql 3 tidak ditentukan atau mysql 3 adalah mysql 5, maka koneksi akan terjadi melalui memori bersama
- Jika shell> mysql test Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 10 Server version: 10.2.2-MariaDB-valgrind-max-debug Source distribution Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [test]> status; -------------- mysql Ver 15.1 Distrib 10.0.25-MariaDB, for Linux (x86_64) using readline 5.2 Connection id: 10 Current database: test Current user: monty@localhost ... Connection: Localhost via UNIX socket ... UNIX socket: /tmp/mysql-dbug.sock _0 tidak ditentukan dan mysql 3 tidak ditentukan atau mysql 3 adalah mysql 5, maka koneksi akan terjadi melalui jendela bernama pipa
- Pipa bernama juga akan digunakan jika pustaka klien shell> mysql test Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 10 Server version: 10.2.2-MariaDB-valgrind-max-debug Source distribution Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [test]> status; -------------- mysql Ver 15.1 Distrib 10.0.25-MariaDB, for Linux (x86_64) using readline 5.2 Connection id: 10 Current database: test Current user: monty@localhost ... Connection: Localhost via UNIX socket ... UNIX socket: /tmp/mysql-dbug.sock 8 / shell> mysql test Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 10 Server version: 10.2.2-MariaDB-valgrind-max-debug Source distribution Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [test]> status; -------------- mysql Ver 15.1 Distrib 10.0.25-MariaDB, for Linux (x86_64) using readline 5.2 Connection id: 10 Current database: test Current user: monty@localhost ... Connection: Localhost via UNIX socket ... UNIX socket: /tmp/mysql-dbug.sock 9 mendeteksi bahwa klien tidak mendukung TCP/IP
- Dalam kasus lain, koneksi TCP/IP melalui opsi mysql 8 digunakan
Cara Menguji Protokol Yang Digunakan
Perintah shell> ln -s /dev/null $HOME/.mysql_history _1 menampilkan informasi tentang protokol mana yang digunakan
shell> mysql test Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 10 Server version: 10.2.2-MariaDB-valgrind-max-debug Source distribution Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [test]> status; -------------- mysql Ver 15.1 Distrib 10.0.25-MariaDB, for Linux (x86_64) using readline 5.2 Connection id: 10 Current database: test Current user: monty@localhost ... Connection: Localhost via UNIX socket ... UNIX socket: /tmp/mysql-dbug.sockPerintah mysql
Ada juga sejumlah perintah yang dapat dijalankan di dalam klien. Perhatikan bahwa semua perintah teks harus di baris pertama dan diakhiri dengan ';'
File mysql_history
Di Unix, klien mysql menulis catatan pernyataan yang dieksekusi ke file riwayat. Secara default, file ini bernama shell> ln -s /dev/null $HOME/.mysql_history 2 dan dibuat di direktori home Anda. Untuk menentukan file yang berbeda, setel nilai variabel lingkungan MYSQL_HISTFILE
Itu. file mysql_history harus dilindungi dengan mode akses restriktif karena informasi sensitif mungkin dituliskan padanya, seperti teks pernyataan SQL yang berisi kata sandi
Jika Anda tidak ingin mempertahankan file riwayat, hapus terlebih dahulu. mysql_history jika ada, lalu gunakan salah satu teknik berikut
- Setel variabel MYSQL_HISTFILE ke /dev/null. Agar pengaturan ini berlaku setiap kali Anda masuk, letakkan pengaturan di salah satu file startup shell Anda
- Membuat. mysql_history sebagai tautan simbolis ke /dev/null
Anda perlu melakukan ini hanya sekali
perintah cepat
Perintah prompt mengkonfigurasi ulang prompt default shell> ln -s /dev/null $HOME/.mysql_history 3. String untuk menentukan prompt dapat berisi urutan khusus berikut
Tips mysql
Bagian ini menjelaskan beberapa teknik yang dapat membantu Anda menggunakan shell> ln -s /dev/null $HOME/.mysql_history 4 secara lebih efektif
Menampilkan Hasil Query Secara Vertikal
Beberapa hasil kueri jauh lebih mudah dibaca saat ditampilkan secara vertikal, bukan dalam format tabel horizontal biasa. Kueri dapat ditampilkan secara vertikal dengan mengakhiri kueri dengan \G alih-alih titik koma. Misalnya, nilai teks yang lebih panjang yang menyertakan baris baru seringkali lebih mudah dibaca dengan output vertikal
mysql> SELECT * FROM mails WHERE LENGTH(txt) < 300 LIMIT 300,1\G *************************** 1. row *************************** msg_nro: 3068 date: 2000-03-01 23:29:50 time_zone: +0200 mail_from: Monty reply: monty@no.spam.com mail_to: "Thimble Smith" sbj: UTF-8 txt: >>>>> "Thimble" == Thimble Smith writes: Thimble> Hi. I think this is a good idea. Is anyone familiar Thimble> with UTF-8 or Unicode? Otherwise, I´ll put this on my Thimble> TODO list and see what happens. Yes, please do that. Regards, Monty file: inbox-jani-1 hash: 190402944 1 row in set (0.09 sec)Untuk pemula, opsi startup yang berguna adalah shell> ln -s /dev/null $HOME/.mysql_history 5 (atau shell> ln -s /dev/null $HOME/.mysql_history 6, yang memiliki efek yang sama). Akan berguna untuk kasus-kasus ketika Anda mungkin telah mengeluarkan pernyataan shell> ln -s /dev/null $HOME/.mysql_history 7 tetapi melupakan klausa shell> ln -s /dev/null $HOME/.mysql_history 8. Biasanya, pernyataan seperti itu menghapus semua baris dari tabel. Dengan shell> ln -s /dev/null $HOME/.mysql_history _5, Anda dapat menghapus baris hanya dengan menentukan nilai kunci yang mengidentifikasinya. Ini membantu mencegah kecelakaan
Saat Anda menggunakan opsi shell> ln -s /dev/null $HOME/.mysql_history _5, mysql mengeluarkan pernyataan berikut saat terhubung ke server MariaDB
SET sql_safe_updates=1, sql_select_limit=1000, sql_max_join_size=1000000;Pernyataan SET memiliki efek sebagai berikut
- Anda tidak diizinkan untuk mengeksekusi pernyataan UPDATE atau DELETE kecuali Anda menentukan batasan kunci dalam klausa WHERE atau memberikan klausa LIMIT (atau keduanya). Sebagai contoh
- Server membatasi semua hasilmysql> SELECT * FROM mails WHERE LENGTH(txt) < 300 LIMIT 300,1\G *************************** 1. row *************************** msg_nro: 3068 date: 2000-03-01 23:29:50 time_zone: +0200 mail_from: Monty reply: monty@no.spam.com mail_to: "Thimble Smith" sbj: UTF-8 txt: >>>>> "Thimble" == Thimble Smith writes: Thimble> Hi. I think this is a good idea. Is anyone familiar Thimble> with UTF-8 or Unicode? Otherwise, I´ll put this on my Thimble> TODO list and see what happens. Yes, please do that. Regards, Monty file: inbox-jani-1 hash: 190402944 1 row in set (0.09 sec) 1 besar menjadi 1.000 baris kecuali pernyataan tersebut menyertakan klausa mysql> SELECT * FROM mails WHERE LENGTH(txt) < 300 LIMIT 300,1\G *************************** 1. row *************************** msg_nro: 3068 date: 2000-03-01 23:29:50 time_zone: +0200 mail_from: Monty reply: monty@no.spam.com mail_to: "Thimble Smith" sbj: UTF-8 txt: >>>>> "Thimble" == Thimble Smith writes: Thimble> Hi. I think this is a good idea. Is anyone familiar Thimble> with UTF-8 or Unicode? Otherwise, I´ll put this on my Thimble> TODO list and see what happens. Yes, please do that. Regards, Monty file: inbox-jani-1 hash: 190402944 1 row in set (0.09 sec) 2
- Server membatalkan beberapa tabel mysql> SELECT * FROM mails WHERE LENGTH(txt) < 300 LIMIT 300,1\G *************************** 1. row *************************** msg_nro: 3068 date: 2000-03-01 23:29:50 time_zone: +0200 mail_from: Monty reply: monty@no.spam.com mail_to: "Thimble Smith" sbj: UTF-8 txt: >>>>> "Thimble" == Thimble Smith writes: Thimble> Hi. I think this is a good idea. Is anyone familiar Thimble> with UTF-8 or Unicode? Otherwise, I´ll put this on my Thimble> TODO list and see what happens. Yes, please do that. Regards, Monty file: inbox-jani-1 hash: 190402944 1 row in set (0.09 sec) 1 pernyataan yang mungkin perlu memeriksa lebih dari 1.000.000 kombinasi baris
Untuk menentukan batas yang berbeda dari 1.000 dan 1.000.000, Anda dapat mengganti default dengan menggunakan opsi mysql> SELECT * FROM mails WHERE LENGTH(txt) < 300 LIMIT 300,1\G *************************** 1. row *************************** msg_nro: 3068 date: 2000-03-01 23:29:50 time_zone: +0200 mail_from: Monty reply: monty@no.spam.com mail_to: "Thimble Smith" sbj: UTF-8 txt: >>>>> "Thimble" == Thimble Smith writes: Thimble> Hi. I think this is a good idea. Is anyone familiar Thimble> with UTF-8 or Unicode? Otherwise, I´ll put this on my Thimble> TODO list and see what happens. Yes, please do that. Regards, Monty file: inbox-jani-1 hash: 190402944 1 row in set (0.09 sec) 4 dan mysql> SELECT * FROM mails WHERE LENGTH(txt) < 300 LIMIT 300,1\G *************************** 1. row *************************** msg_nro: 3068 date: 2000-03-01 23:29:50 time_zone: +0200 mail_from: Monty reply: monty@no.spam.com mail_to: "Thimble Smith" sbj: UTF-8 txt: >>>>> "Thimble" == Thimble Smith writes: Thimble> Hi. I think this is a good idea. Is anyone familiar Thimble> with UTF-8 or Unicode? Otherwise, I´ll put this on my Thimble> TODO list and see what happens. Yes, please do that. Regards, Monty file: inbox-jani-1 hash: 190402944 1 row in set (0.09 sec) 5
mysql --safe-updates --select_limit=500 --max_join_size=10000Menonaktifkan koneksi ulang otomatis mysql
Jika klien mysql kehilangan koneksi ke server saat mengirim pernyataan, segera dan secara otomatis mencoba menyambung kembali ke server dan mengirim pernyataan itu lagi. Namun, meskipun mysql berhasil menyambungkan kembali, koneksi pertama Anda telah berakhir dan semua objek dan pengaturan sesi sebelumnya hilang. tabel sementara, mode autocommit, dan variabel yang ditentukan pengguna dan sesi. Juga, setiap transaksi saat ini dibatalkan. Perilaku ini mungkin berbahaya bagi Anda, seperti dalam contoh berikut di mana server dimatikan dan dimulai ulang antara pernyataan pertama dan kedua tanpa Anda sadari
mysql --user=user_name --password=your_password db_name 0Variabel @a user telah hilang dengan koneksi, dan setelah koneksi ulang itu tidak terdefinisi. Jika penting untuk mengakhiri mysql dengan kesalahan jika koneksi terputus, Anda dapat memulai klien mysql dengan opsi mysql> SELECT * FROM mails WHERE LENGTH(txt) < 300 LIMIT 300,1\G *************************** 1. row *************************** msg_nro: 3068 date: 2000-03-01 23:29:50 time_zone: +0200 mail_from: Monty reply: monty@no.spam.com mail_to: "Thimble Smith" sbj: UTF-8 txt: >>>>> "Thimble" == Thimble Smith writes: Thimble> Hi. I think this is a good idea. Is anyone familiar Thimble> with UTF-8 or Unicode? Otherwise, I´ll put this on my Thimble> TODO list and see what happens. Yes, please do that. Regards, Monty file: inbox-jani-1 hash: 190402944 1 row in set (0.09 sec) 6