Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tạo tập lệnh bash giám sát truy vấn MySQL

Trong bài viết này, chúng tôi sẽ thảo luận về cách bạn có thể định cấu hình một tập lệnh bash đơn giản để kiểm tra hoạt động truy vấn MySQL của bạn nhằm đảm bảo rằng các truy vấn dài không bị treo trên máy chủ của bạn. Tập lệnh này cũng sẽ có thể gửi thông báo qua e-mail cho bạn khi nó gặp phải một truy vấn đang chạy dài.

Trong hầu hết các trường hợp, một truy vấn cơ sở dữ liệu MySQL sẽ có thể thực thi trong vòng vài giây, nếu vì lý do nào đó mà phải mất nhiều thời gian hơn thế, có thể có một truy vấn MySQL đang chạy lâu sẽ sao lưu hàng đợi cơ sở dữ liệu đó và dẫn đến máy chủ của bạn chậm lại và có thể trở nên không ổn định.

Để biết thêm thông tin về các loại sự cố sử dụng MySQL, bạn có thể đọc về hoạt động MySQL quá mức.

Tập lệnh này chỉ có thể được thiết lập trên VPS hoặc gói lưu trữ máy chủ chuyên dụng mà bạn có quyền truy cập root.

Tạo tập lệnh giám sát truy vấn MySQL

  1. Tùy thuộc vào độ phức tạp của cơ sở dữ liệu của bạn, số lượng trang web bạn chạy và lượng lưu lượng truy cập bạn nhận được, lượng thời gian tối đa mà bạn muốn cho phép truy vấn chạy có thể khác nhau. Tôi khuyên bạn nên bắt đầu với một cái gì đó thận trọng trong khoảng 120 giây hoặc 2 phút và nếu bạn đang đăng nhập vào máy chủ của mình sau khi được cảnh báo và có vẻ như nó vẫn đang chạy ổn định, bạn có thể có thể tăng mức kích hoạt lên cao hơn. một tệp mới cho tập lệnh cảnh báo truy vấn MySQL bash, trong trường hợp này, tôi sẽ sử dụng vim trình soạn thảo văn bản và tạo tệp mới có tên MySQLMon trong thư mục chính của người dùng của tôi bằng lệnh sau:vim /home/userna1/MySQLMon Sau đó, bạn sẽ muốn nhấn i để nhập Chèn chế độ sau khi vim được tải lên và nhập mã sau:
    #!/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

    Đoạn mã này thoạt nhìn có thể hơi choáng ngợp, nhưng chia nhỏ ra thì nó thực sự khá đơn giản. Đầu tiên, chúng tôi khai báo một trình kích hoạt biến và đặt thành 120 giây. Sau đó, chúng tôi đang đặt ActiveQcount về cơ bản giữ bất kỳ truy vấn nào dài hơn trình kích hoạt của chúng tôi giá trị.

    Sau đó, chúng tôi sử dụng bash if tuyên bố để kiểm tra xem activeQcount của chúng tôi giá trị trên 0, cho thấy rằng có những truy vấn chạy lâu hơn giá trị trình kích hoạt đã đặt của chúng tôi giá trị. Tiếp theo, chúng tôi chỉ cần bắt đầu echo’ing văn bản vào tệp trình giữ chỗ có tên / tmp / MySQLMon , rồi cuối cùng chúng tôi mèo tệp trình giữ chỗ đó chỉ đọc nó ra và sau đó chúng tôi chuyển nó thành | tới thư theo sau là chủ đề chúng tôi muốn sử dụng, địa chỉ của người nhận, sau đó bạn có thể nhập - -r tiếp theo là địa chỉ email mà bạn muốn gửi tin nhắn đến.

  2. Khi bạn nhận được một cảnh báo qua e-mail, nó sẽ giống như ví dụ sau:

    ======================================================================================
    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)
    =====================================================================================

Thiết lập cron job để chạy tập lệnh MySQLMon

  1. Bây giờ bạn sẽ có thiết lập tập lệnh bash giám sát truy vấn MySQL của mình, tiếp theo, bạn sẽ muốn tạo một công việc cron để chạy tác vụ này. Nếu bạn không quen với cron job, bạn có thể đọc về cách chạy cron job. Bạn có thể sử dụng trình đơn cPanel thả xuống cứ sau 5 phút, sẽ làm cho cron job cuối cùng trông giống như sau:*/5 * * * * bash /home/userna1/MySQLMon

Bây giờ bạn đã thiết lập thành công một tập lệnh bash để theo dõi các truy vấn MySQL của mình để phát hiện bất kỳ truy vấn nào đang chạy lâu và thông báo cho bạn qua e-mail khi bắt được bất kỳ truy vấn nào. Bạn cũng nên biết cách thiết lập một công việc cron để chạy tập lệnh đó trong một khoảng thời gian đã định để nó sẽ liên tục chạy mà không cần thêm sự can thiệp thủ công từ chính bạn.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách lấy ngày và giờ hiện tại trong MySQL

  2. Sử dụng Jquery Ajax để lấy dữ liệu từ Mysql

  3. MySQL CHỌN THÍCH hoặc ĐĂNG KÝ để khớp nhiều từ trong một bản ghi

  4. Cách hàm LEFT () hoạt động trong MySQL

  5. MySQL - Làm cho một trường hiện có trở thành duy nhất