MySQL die và cách khắc phục

Lê Trung

MySQL die là một trường hợp diễn ra không phải là hiếm, đặc biệt khi server hạn chế về dung lượng RAM. Một cách khắc phục mà hầu hết mọi người khi search google sẽ thấy đó là sử dụng swap. Tuy nhiên một vấn đề vô cùng nhức nhối với các startup nhỏ đó là khi sử dụng các máy chủ với chi phí thấp thì thường không sử dụng được swap. Nên enable swap thường tăng chi phí, một điều các server administrator thường không phải lúc nào cũng có thể đáp ứng.

Nếu bạn đang là server administrator và đang phải đau đầu trong việc tìm ra giải pháp cắt giảm chi phí cho server mà vẫn đảm bảo rằng MySQL không bị die thì bài viết này dành cho bạn. Trong bài viết này mình sẽ chia sẻ cách mà mình khắc phục tình huống MySQL die mà không cần phải setup quá phức tạp cũng như tăng chi phí cho server.

[Bài viết này xin được viết dành tặng cho tất cả các chị em phụ nữ làm trong ngành lập trình nhân ngày 08/03, chúc các chị em luôn yêu nghề, gắn bó với công việc và hạnh phúc trong cuộc sống!]

Bước 1: Secure MySQL

MySQL thường sử dụng cổng 3306, bước đầu tiên bạn cần làm là hạn chế truy cập vào cổng này, thông thường thì mình chỉ cho phép việc kết nối tới MySQL từ các kết nối trực tiếp trên server cài MySQL. Ngoài ra bạn cũng nên chạy mysql_secure_installation để chắc chắn rằng server của bạn tránh được các lỗ hổng bảo mật cơ bản.

Bước 2: Tạo Job Với Crontab

Sau khi đã thực hiện các bước setup cơ bản thì bước tiếp theo đó là sử dụng crontab để đảm bảo server của bạn tự động restart. Crontab là một chương trình giúp tự động hoá các công việc (job) trên server, ví dự như tự động gửi email cho khách hàng 1 tuần 1 lần, tự động xoá files trên server...

Bây giờ chúng ta sẽ tạo một job tự động được chạy liên tục mỗi 1 phút để kiểm tra trạng thái của MySQL server. Nếu MySQL die thì job này sẽ khởi động lại nó. Để tạo 1 job với crontab bạn sử dụng câu lệnh sau:

$ sudo crontab -e

Bạn sẽ thấy Shell hiển thị một cửa sổ để bạn cài đặt các job, bạn nhập vào thông số sau (bạn lưu ý: crontab sử dụng VIM để chỉnh sửa văn bản):

*/1 * * * * /usr/local/sbin/auto_restart_mysql.sh

Câu lệnh trên dùng để cài đặt một job được khai báo trong file /usr/local/sbin/auto_restart_mysql.sh (chúng ta sẽ tạo file này sau) và chạy 1 phút 1 lần.

Tiếp theo bạn tạo file /usr/local/sbin/auto_restart_mysql.sh với nội dung sau:

#!/bin/bash
if [[ ! "$(/sbin/service mysqld status)" =~ "start/running" ]]
then
    /sbin/service mysqld start
fi

Đoạn câu lệnh bash trên sẽ kiểm tra trạng thái của MySQL nếu database bị die chúng ta sẽ khởi động lại nó. Tiếp theo bạn cần chạy câu lệnh sau để file trên có thể được thực thi (execute):

$ sudo chmod u+x /usr/local/sbin/auto_restart_mysql.sh

Bây giờ bạn thử stop MySQL server và kiểm tra lại để chắc chắn rằng job bạn tạo ra đang được hoạt động.

Thêm Phản Hồi