Để sử dụng hiệu quả các công cụ hỗ trợ dưới đây, bước đầu tiên là cần cấu hình thư mục thực thi của MySQL vào biến môi trường hệ thống.
# Chỉnh sửa tệp cấu hình hệ thống
$ vi /etc/profile
# Thêm các dòng sau (thay đổi đường dẫn phù hợp với cài đặt của bạn)
export MYSQL_HOME=/usr/local/mysql
export PATH=$PATH:$MYSQL_HOME/bin
# Cập nhật thay đổi
$ source /etc/profile
1. MySQLTuner (mysqltuner.pl)
Đây là một tập lệnh Perl phổ biến giúp kiểm tra cấu hình MySQL và đưa ra các khuyến nghị để tăng hiệu suất cũng như tính ổn định. MySQLTuner phân tích các thông số về bộ nhớ, tệp nhật ký, công cụ lưu trữ (storage engine) và các lỗ hổng bảo mật tiềm ẩn.
Công cụ này hỗ trợ hàng trăm chỉ số khác nhau cho các hệ quản trị như MySQL, MariaDB và Percona Server.
Cài đặt và thực thi
# Tải tập lệnh về máy
$ curl -L https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl -o mysqltuner.pl
# Cấp quyền thực thi và chạy công cụ
$ chmod +x mysqltuner.pl
$ ./mysqltuner.pl --socket /var/lib/mysql/mysql.sock
Đọc báo cáo kết quả
- Ký hiệu [!!]: Đây là các cảnh báo quan trọng cần xử lý ngay. Ví dụ:
[!!] Maximum possible memory usage: 8G (150% of installed RAM)cảnh báo rằng MySQL có thể ngốn hết RAM vật lý và gây treo hệ thống. - Phần Recommendations: Tập hợp các gợi ý thay đổi thông số trong tệp
my.cnfđể tối ưu hệ thống.
2. MySQL Tuning Primer (tuning-primer.sh)
Tương tự như MySQLTuner, Tuning Primer là một tập lệnh shell giúp "thăm khám" sức khỏe tổng quát cho database. Nó so sánh các giá trị biến trạng thái hiện tại với các thiết lập cấu hình để đưa ra lời khuyên chỉnh sửa.
Thiết lập ban đầu
Để chạy script thuận tiện, hãy tạo tệp cấu hình truy cập tự động trong thư mục người dùng:
$ vi ~/.my.cnf
# Nội dung cấu hình mẫu
[client]
user=db_admin
password=secure_password
socket=/var/lib/mysql/mysql.sock
Sử dụng công cụ
$ wget https://launchpad.net/mysql-tuning-primer/trunk/1.6-r1/+download/tuning-primer.sh
$ chmod +x tuning-primer.sh
$ ./tuning-primer.sh
Hãy tập trung vào các mục hiển thị màu đỏ hoặc các cảnh báo vượt ngưỡng an toàn để điều chỉnh tham số buffer_pool_size, query_cache_size, v.v.
3. Bộ công cụ Percona Toolkit
Percona Toolkit (pt-tools) là tập hợp các công cụ nâng cao dành cho quản trị viên cơ sở dữ liệu (DBA). Nó không chỉ dừng lại ở việc gợi ý cấu hình mà còn hỗ trợ các tác vụ phức tạp như kiểm tra tính nhất quán dữ liệu, xử lý trùng lặp index, và thay đổi cấu trúc bảng trực tuyến (Online DDL).
Cài đặt trên CentOS/RHEL
$ sudo yum install perl-DBI perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL
$ wget https://www.percona.com/downloads/percona-toolkit/3.3.1/binary/redhat/7/x86_64/percona-toolkit-3.3.1-1.el7.x86_64.rpm
$ rpm -ivh percona-toolkit-3.3.1-1.el7.x86_64.rpm
Các công cụ quan trọng trong bộ Toolkit
| Nhóm | Công cụ | Chức năng chính |
|---|---|---|
| Phát triển | pt-online-schema-change | Thay đổi cấu trúc bảng mà không gây khóa (lock) bảng. |
| Hiệu suất | pt-query-digest | Phân tích Slow Query Log và tạo báo cáo chi tiết. |
| Cấu hình | pt-config-diff | So sánh sự khác biệt giữa các tệp cấu hình hoặc các instance MySQL. |
| Giám sát | pt-deadlock-logger | Ghi lại các thông tin về lỗi Deadlock trong MySQL. |
| Dữ liệu | pt-table-checksum | Kiểm tra sai lệch dữ liệu giữa Master và Slave. |
| Tiện ích | pt-kill | Tự động ngắt các truy vấn chạy quá lâu hoặc gây nghẽn. |
Ứng dụng thực tế với pt-query-digest
Đây là công cụ mạnh mẽ nhất để tìm ra các "truy vấn rác" hoặc các truy vấn gây tốn tài nguyên nhất.
# 1. Phân tích toàn bộ tệp nhật ký chậm
pt-query-digest /var/log/mysql/mysql-slow.log > summary_report.txt
# 2. Phân tích dữ liệu trong vòng 2 giờ qua
pt-query-digest --since=2h /var/log/mysql/mysql-slow.log
# 3. Lọc các truy vấn SELECT có thời gian thực thi dài
pt-query-digest --filter '$event->{fingerprint} =~ m/^select/i' /var/log/mysql/mysql-slow.log
# 4. Tìm các truy vấn thực hiện Full Table Scan (quét toàn bộ bảng)
pt-query-digest --filter '(($event->{Full_scan} || "") eq "yes")' /var/log/mysql/mysql-slow.log
Giải thích báo cáo từ pt-query-digest
- Overall: Thống kê tổng quan về thời gian (Time range), số lượng truy vấn duy nhất (unique), và tổng số lần thực thi.
- Rank: Xếp hạng các truy vấn dựa trên tổng thời gian phản hồi (Response time). Các truy vấn đứng đầu thường là đối tượng cần tối ưu trước.
- Query Detail: Cung cấp ID truy vấn, biểu đồ phân bổ thời gian thực thi, và danh sách các bảng liên quan để hỗ trợ việc
EXPLAINSQL.