Cấu hình và lưu trữ

“Trục quản trị CẤU HÌNH & LƯU TRỮ” – nhưng vẫn kết hợp Function, Procedure, Trigger, Transaction để tự động hóa, giám sát và đảm bảo vận hành ổn định.

Đây chính là phần cốt lõi trong đào tạo DBA chuyên nghiệp (tương đương Module Database Infrastructure Management của Oracle hay SQL Server).

🎯 MỤC TIÊU CHUNG BUỔI THỰC HÀNH (6 GIỜ)

Sau buổi học, học viên:

  1. Hiểu rõ cấu trúc vật lý – logic của hệ thống MySQL (data, log, buffer, temp).
  2. Biết cấu hình và kiểm soát các tham số chính trong my.ini (hoặc my.cnf).
  3. Biết dùng hàm, thủ tục, trigger, transaction để kiểm tra – ghi nhận – tự động xử lý lỗi cấu hình và lưu trữ.
  4. Vận hành hoàn chỉnh một case study thực tế mô phỏng hệ thống Kho bạc có log, backup, và giám sát dung lượng tự động.

🧩 PHẦN 1 – KIẾN TRÚC LƯU TRỮ VÀ CẤU HÌNH MYSQL (1 GIỜ)

🎯 Mục tiêu

  • Xem và hiểu cấu trúc vật lý sau cài đặt MySQL.
  • Làm quen các tham số trong file my.ini.
  • Thiết lập thư mục lưu trữ riêng (data directory).

🧱 Cấu trúc vật lý cơ bản

C:\ProgramData\MySQL\MySQL Server 8.0\
 ├── data\
 ├── bin\
 ├── my.ini
 ├── logs\
 ├── tmp\

⚙️ Các tham số quan trọng trong my.ini

Tham số Chức năng
datadir Đường dẫn lưu dữ liệu
innodb_buffer_pool_size Dung lượng RAM cấp cho caching
log_error Vị trí lưu log lỗi
innodb_log_file_size Kích thước file log InnoDB
tmpdir Thư mục xử lý tạm
max_connections Giới hạn kết nối đồng thời

🧰 Thực hành 1.1 – Kiểm tra cấu hình

SHOW VARIABLES LIKE 'datadir';
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
SHOW VARIABLES LIKE 'log_error';

🧰 Thực hành 1.2 – Kiểm tra quyền ghi thư mục lưu trữ

Trong Workbench:

SELECT @@datadir;

→ Mở thư mục thực tế trên máy chủ và kiểm tra quyền truy cập (Windows hoặc Linux).

⚙️ PHẦN 2 – KIỂM TRA & GHI LOG CẤU HÌNH BẰNG THỦ TỤC / HÀM (1 GIỜ)

🎯 Mục tiêu

Tạo bộ công cụ kiểm tra cấu hình định kỳ tự động bằng hàm & thủ tục.

🧩 Bài 2.1 – Tạo bảng log cấu hình

CREATE TABLE log_cau_hinh (
  id INT AUTO_INCREMENT PRIMARY KEY,
  ten_bien VARCHAR(100),
  gia_tri TEXT,
  thoi_gian DATETIME DEFAULT NOW()
);

🧩 Bài 2.2 – Viết thủ tục ghi lại cấu hình hệ thống

DELIMITER //
CREATE PROCEDURE ghi_nhat_ky_cau_hinh()
BEGIN
  INSERT INTO log_cau_hinh (ten_bien, gia_tri)
  SELECT VARIABLE_NAME, VARIABLE_VALUE
  FROM performance_schema.global_variables
  WHERE VARIABLE_NAME IN ('datadir', 'innodb_buffer_pool_size', 'log_error');
END //
DELIMITER ;

👉 Gọi thử:

CALL ghi_nhat_ky_cau_hinh();
SELECT * FROM log_cau_hinh;

🧩 Bài 2.3 – Tạo hàm kiểm tra sai lệch cấu hình

DELIMITER //
CREATE FUNCTION kiem_tra_buffer()
RETURNS VARCHAR(100)
DETERMINISTIC
BEGIN
  DECLARE buf BIGINT;
  SELECT VARIABLE_VALUE INTO buf
  FROM performance_schema.global_variables
  WHERE VARIABLE_NAME = 'innodb_buffer_pool_size';
  IF buf < 134217728 THEN
    RETURN 'CẢNH BÁO: Bộ nhớ đệm quá thấp!';
  ELSE
    RETURN 'Ổn định.';
  END IF;
END //
DELIMITER ;

→ Thực hành:

SELECT kiem_tra_buffer();

🔔 PHẦN 3 – TRIGGER CẢNH BÁO LƯU TRỮ TỰ ĐỘNG (1.5 GIỜ)

🎯 Mục tiêu

Tự động ghi log khi dung lượng lưu trữ vượt ngưỡng hoặc lỗi ghi dữ liệu.

🧩 Bài 3.1 – Bảng theo dõi dung lượng

CREATE TABLE thong_tin_luu_tru (
  id INT AUTO_INCREMENT PRIMARY KEY,
  thu_muc VARCHAR(255),
  dung_luong BIGINT,
  thoi_gian DATETIME DEFAULT NOW()
);

🧩 Bài 3.2 – Thủ tục cập nhật dung lượng thư mục

(Sử dụng trong Workbench / Python script)

DELIMITER //
CREATE PROCEDURE cap_nhat_dung_luong(IN p_thu_muc VARCHAR(255), IN p_dung_luong BIGINT)
BEGIN
  INSERT INTO thong_tin_luu_tru(thu_muc, dung_luong)
  VALUES (p_thu_muc, p_dung_luong);
END //
DELIMITER ;

🧩 Bài 3.3 – Trigger cảnh báo lưu trữ

DELIMITER //
CREATE TRIGGER trg_canh_bao_dung_luong
AFTER INSERT ON thong_tin_luu_tru
FOR EACH ROW
BEGIN
  IF NEW.dung_luong > 8000000 THEN
    INSERT INTO log_cau_hinh(ten_bien, gia_tri)
    VALUES ('CẢNH BÁO DUNG LƯỢNG', CONCAT('Thư mục ', NEW.thu_muc, ' vượt ngưỡng 8GB.'));
  END IF;
END //
DELIMITER ;

🔄 PHẦN 4 – GIAO DỊCH PHỤC HỒI CẤU HÌNH (1.5 GIỜ)

🎯 Mục tiêu

Sử dụng transaction để rollback thay đổi cấu hình hoặc log sai.

🧩 Bài 4.1 – Giao dịch mô phỏng lỗi cấu hình

START TRANSACTION;

INSERT INTO log_cau_hinh(ten_bien, gia_tri)
VALUES ('innodb_buffer_pool_size', '0'); -- lỗi cố tình

ROLLBACK;

→ Kiểm tra log, đảm bảo không có bản ghi “sai lệch”.

🧩 Bài 4.2 – Thủ tục phục hồi cấu hình từ bản log gần nhất

DELIMITER //
CREATE PROCEDURE phuc_hoi_cau_hinh()
BEGIN
  DECLARE last_dir VARCHAR(255);
  SELECT gia_tri INTO last_dir
  FROM log_cau_hinh
  WHERE ten_bien='datadir'
  ORDER BY thoi_gian DESC
  LIMIT 1;

  INSERT INTO log_cau_hinh(ten_bien, gia_tri)
  VALUES ('Phục hồi datadir', last_dir);
END //
DELIMITER ;

🧠 PHẦN 5 – CASE STUDY TỔNG HỢP (1 GIỜ)

🏦 Tình huống: “Giám sát cấu hình hệ thống lưu trữ MySQL của Kho bạc”

Mô tả:
Ban CNTT muốn:

  • Theo dõi tự động cấu hình chính (datadir, innodb_buffer_pool_size).
  • Ghi log thay đổi mỗi 6 giờ.
  • Tự động cảnh báo khi dung lượng ổ đĩa gần đầy.
  • Cho phép rollback cấu hình cũ.

🧰 Bước 1 – Tạo thủ tục tổng hợp “kiem_tra_he_thong

DELIMITER //
CREATE PROCEDURE kiem_tra_he_thong()
BEGIN
  CALL ghi_nhat_ky_cau_hinh();
  SET @thong_bao = kiem_tra_buffer();
  INSERT INTO log_cau_hinh(ten_bien, gia_tri)
  VALUES ('Kết quả kiểm tra', @thong_bao);
END //
DELIMITER ;

🧰 Bước 2 – Tạo EVENT tự động chạy định kỳ

SET GLOBAL event_scheduler = ON;

CREATE EVENT evt_kiem_tra_cau_hinh
ON SCHEDULE EVERY 6 HOUR
DO
  CALL kiem_tra_he_thong();

🧰 Bước 3 – Giao dịch xử lý lỗi tự động

DELIMITER //
CREATE PROCEDURE xu_ly_loi_cau_hinh()
BEGIN
  DECLARE EXIT HANDLER FOR SQLEXCEPTION
  BEGIN
    ROLLBACK;
    INSERT INTO log_cau_hinh(ten_bien, gia_tri)
    VALUES ('Lỗi cấu hình', 'Rollback thành công');
  END;
  START TRANSACTION;
  -- giả lập thay đổi nguy hiểm
  INSERT INTO log_cau_hinh(ten_bien, gia_tri)
  VALUES ('innodb_buffer_pool_size', '-1');
  COMMIT;
END //
DELIMITER ;

📊 TỔNG KẾT 

Nhóm kỹ năng Kết quả đạt được
Cấu hình & my.ini Hiểu 10+ tham số cốt lõi
Hàm & Thủ tục Tạo được module kiểm tra cấu hình
Trigger Tự động cảnh báo dung lượng
Transaction Rollback lỗi cấu hình
Event Lập lịch kiểm tra tự động
Case study Hệ thống giám sát lưu trữ tự động

💡 GỢI Ý NÂNG CAO

  • Tích hợp AI Copilot:
    Tạo hàm sử dụng API Python hoặc Node.js gọi GPT để gợi ý tham số tối ưu innodb_buffer_pool_size theo dung lượng RAM.
  • Kết hợp Power BI / Grafana:
    Kéo dữ liệu từ log_cau_hinh → hiển thị dashboard theo thời gian thực.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *