Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Buat skrip bash pemantauan kueri MySQL

Dalam artikel ini kita akan membahas bagaimana Anda dapat mengonfigurasi skrip bash sederhana untuk memeriksa aktivitas kueri MySQL Anda untuk memastikan bahwa kueri panjang tidak tergantung di server Anda. Skrip ini juga dapat mengirimkan pemberitahuan melalui email kepada Anda saat menemukan kueri yang berjalan lama.

Dalam kebanyakan kasus, kueri basis data MySQL harus dapat dijalankan dalam beberapa detik, jika karena alasan tertentu diperlukan waktu lebih lama dari itu, mungkin ada kemungkinan kueri MySQL yang berjalan lama mencadangkan antrian basis data tersebut dan menyebabkan server Anda melambat , dan mungkin menjadi tidak stabil.

Untuk informasi lebih lanjut tentang jenis masalah penggunaan MySQL, Anda dapat membaca tentang aktivitas MySQL yang berlebihan.

Skrip ini hanya dapat disiapkan pada paket hosting VPS atau server khusus yang akses rootnya Anda miliki.

Buat skrip pemantauan kueri MySQL

  1. Bergantung pada kompleksitas database Anda, berapa banyak situs web yang Anda jalankan, dan berapa banyak lalu lintas yang Anda dapatkan, jumlah waktu maksimum yang Anda inginkan untuk mengizinkan kueri dijalankan bisa jadi berbeda. Saya akan merekomendasikan memulai dengan sesuatu yang konservatif sekitar 120 detik atau 2 menit, dan jika Anda masuk ke server Anda setelah diberi tahu dan tampaknya masih berjalan stabil, Anda mungkin dapat meningkatkan level pemicu ke sesuatu yang lebih tinggi.Mulai mengedit file baru untuk skrip peringatan kueri MySQL bash, dalam hal ini saya akan menggunakan vim editor teks dan membuat file baru bernama MySQLMon di direktori home pengguna saya dengan perintah berikut:vim /home/userna1/MySQLMon Maka Anda ingin menekan i untuk memasukkan Sisipkan mode setelah vim dimuat dan masukkan kode berikut:
    #!/bin/bash trigger=120 activeQcount=`mysql -e "show full processlist;" |
    egrep -v "leechprotect|root|Time" | awk -v T=$trigger '{ if ( $6 > T ) print $0}' |
    wc -l` if [ $activeQcount -gt 0 ] then echo
    "=====================================================================================" >
    /tmp/MySQLMon echo "= MySQLMon has found a new query running for longer than 120 seconds (2 mins)"
    >> /tmp/MySQLMon echo
    "=====================================================================================" >>
    /tmp/MySQLMon date >> /tmp/MySQLMon echo "" >> /tmp/MySQLMon mysql -e "show full processlist;"
    >> /tmp/MySQLMon echo
    "=====================================================================================">>
    /tmp/MySQLMon cat /tmp/MySQLMon | awk -v T=$trigger '{ if ( $6 > T ) print $0}' |
    mail -s"Caught query running longer than $trigger seconds" [email protected] -- -r
    "[email protected]" fi

    Kode ini mungkin terlihat sedikit berlebihan pada awalnya, tetapi jika dipecah menjadi sangat sederhana. Pertama kita mendeklarasikan pemicu variabel dan menyetelnya ke 120 detik. Kemudian kita menyetel activeQcount variabel untuk menampung kueri apa pun yang lebih panjang dari pemicu kami nilai.

    Kami kemudian menggunakan bash jika pernyataan untuk memeriksa apakah activeQcount our kami nilainya di atas nol, menunjukkan bahwa ada kueri yang berjalan lebih lama dari pemicu yang kami tetapkan nilai. Selanjutnya kita cukup memulai menggema teks ke dalam file placeholder bernama /tmp/MySQLMon , lalu akhirnya kita kucing file placeholder yang baru saja membacanya dan kemudian kami menyalurkannya | ke email fungsi diikuti oleh subjek yang ingin kami gunakan, alamat penerima, lalu Anda dapat memasukkan — -r diikuti dengan alamat email yang Anda inginkan untuk menerima pesan.

  2. Saat Anda menerima peringatan email, tampilannya akan seperti contoh berikut:

    ======================================================================================
    MySQLMon has found a new query running for longer than 120 seconds (2 mins)
    =====================================================================================
    Tue Dec 4 15:07:42 EST 2012 40901 userna1_phpb1 localhost userna1_phpb1 Query 342
    Sending data
    INSERT INTO users (userID, name, base64_decode)
    =====================================================================================

Siapkan tugas cron untuk menjalankan skrip MySQLMon

  1. Sekarang Anda harus memiliki pengaturan skrip bash pemantauan kueri MySQL, selanjutnya Anda ingin membuat tugas cron untuk menjalankan tugas ini. Jika Anda tidak terbiasa dengan tugas cron, Anda dapat membaca tentang cara menjalankan tugas cron. Anda dapat menggunakan drop-down cPanel setiap 5 menit, yang akan membuat tugas akhir cron terlihat seperti:*/5 * * * * bash /home/userna1/MySQLMon

Anda sekarang seharusnya telah berhasil mengatur skrip bash untuk memantau kueri MySQL Anda untuk menangkap yang berjalan lama, dan untuk mengingatkan Anda melalui email ketika menangkapnya. Anda juga harus mengetahui cara menyiapkan tugas cron untuk menjalankan skrip tersebut pada interval yang ditetapkan sehingga skrip akan terus berjalan tanpa intervensi manual lebih lanjut dari Anda.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL mengonversi string tanggal ke cap waktu Unix

  2. Cara mengunci satu baris

  3. Menambahkan nol di depan ke beberapa nilai di kolom di MySQL

  4. DATE_FORMAT() Contoh – MySQL

  5. Kesalahan MySQL 1449:Pengguna yang ditentukan sebagai penentu tidak ada