Xử lý lỗi Permission Denied lúc nửa đêm
2 giờ sáng, điện thoại rung liên hồi. Hệ thống giám sát báo database sập. Bạn cuống cuồng SSH vào con Fedora Server mới dựng, check log và thấy hàng loạt lỗi ‘Permission Denied’. Dù bạn đã thử chmod 777 cả thư mục data, lỗi vẫn trơ ra đó. Đây là kịch bản kinh điển khi bạn chưa làm chủ được SELinux trên Fedora.
Fedora không “dễ dãi” như Ubuntu. Hệ điều hành này ép bạn phải tuân thủ nghiêm ngặt các quy tắc bảo mật ngay từ đầu. Mình đã dùng Fedora làm môi trường chính hơn 2 năm. Kinh nghiệm rút ra là: Đừng cố tắt bảo mật, hãy học cách sống chung với nó. Dưới đây là quy trình thiết lập MySQL 8 giúp bạn tránh khỏi những đêm thức trắng.
Cài đặt MySQL 8: Nhanh nhưng phải chuẩn
Nếu bạn chỉ cần một database chạy local để test code, cụm lệnh dưới đây là đủ. Tuy nhiên, nếu định đưa lên production, hãy đọc kỹ phần cấu hình bảo mật ở mục sau.
# Cập nhật hệ thống lên bản mới nhất
sudo dnf update -y
# Cài đặt MySQL Community Server
sudo dnf install community-mysql-server -y
# Kích hoạt service chạy cùng hệ thống
sudo systemctl enable --now mysqld
Sau khi cài xong, hãy chạy ngay lệnh bảo mật hóa. Lệnh này giúp bạn xóa các database mẫu và chặn login root từ xa:
sudo mysql_secure_installation
Cấu hình Database cho môi trường thực tế
Việc gõ lệnh cài đặt chỉ mất 5 phút. 95% giá trị của một SysAdmin nằm ở việc tối ưu để hệ thống chịu được tải 1.000+ user cùng lúc và không bị hacker ghé thăm.
1. Firewalld: Chỉ mở những gì cần thiết
Mặc định, Fedora sẽ chặn toàn bộ kết nối đến port 3306. Tuyệt đối không tắt Firewall. Thay vào đó, hãy chỉ cho phép IP của Application Server truy cập để giảm thiểu rủi ro bị tấn công Brute-force.
# Mở port cho một subnet cụ thể (Ví dụ: 192.168.1.0/24)
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="3306" accept'
# Reload lại cấu hình
sudo firewall-cmd --reload
2. SELinux: Vượt qua rào cản Permission
Đây là phần khó nhằn nhất. SELinux mặc định chỉ cho phép MySQL ghi dữ liệu vào /var/lib/mysql. Nếu bạn gắn thêm ổ cứng SSD thứ hai vào /data/mysql để tăng tốc độ I/O, MySQL sẽ bị chặn đứng ngay lập tức.
Thay vì tắt SELinux (một hành động cực kỳ rủi ro), hãy gán nhãn (label) đúng cho thư mục mới:
# Cài đặt công cụ hỗ trợ
sudo dnf install policycoreutils-python-utils -y
# Đăng ký context cho thư mục data mới
sudo semanage fcontext -a -t mysqld_db_t "/data/mysql(/.*)?"
# Áp dụng thay đổi ngay lập tức
sudo restorecon -Rv /data/mysql
Chỉ với 2 lệnh này, bạn đã giải quyết triệt để lỗi Permission mà không làm yếu đi hàng rào bảo mật của hệ thống.
Tối ưu hiệu suất cho Server RAM lớn
MySQL 8 có các thông số mặc định khá khiêm tốn, thường chỉ phù hợp cho máy ảo 1GB RAM. Nếu server của bạn có 16GB hoặc 32GB RAM, hãy chỉnh sửa file /etc/my.cnf.d/mysql-server.cnf để tận dụng tối đa phần cứng.
Cấu hình InnoDB Buffer Pool
Quy tắc vàng là dành khoảng 60-70% RAM cho Buffer Pool nếu server chỉ chạy mỗi database. Ví dụ với server 8GB RAM:
[mysqld]
# Tăng bộ nhớ đệm để giảm đọc ghi ổ cứng
innodb_buffer_pool_size = 5G
innodb_log_file_size = 1G
innodb_flush_method = O_DIRECT
max_connections = 800
Sau khi lưu file, hãy restart service để áp dụng: sudo systemctl restart mysqld.
Quản lý User theo cơ chế mới
Từ bản 8.0, MySQL sử dụng caching_sha2_password làm mặc định. Nếu ứng dụng của bạn (như PHP cũ hoặc một số tool cũ) không kết nối được, hãy chuyển về plugin cũ nhưng vẫn đảm bảo an toàn:
CREATE USER 'web_app'@'192.168.1.10' IDENTIFIED WITH mysql_native_password BY 'MatKhauSieuCap_2024';
GRANT SELECT, INSERT, UPDATE ON my_database.* TO 'web_app'@'192.168.1.10';
Lưu ý sống còn khi vận hành
- Đừng tin vào may mắn: Hãy thiết lập Cronjob để dump database mỗi ngày. Một lệnh
mysqldumpđơn giản có thể cứu cả sự nghiệp của bạn khi ổ cứng hỏng. - Theo dõi Log thực tế: Thay vì đoán lỗi, hãy dùng
tail -f /var/log/mysql/mysqld.logđể xem chuyện gì đang xảy ra trong thời gian thực. - Cẩn thận khi dnf update: Fedora thường xuyên cập nhật kernel và package mới. Hãy luôn snapshot server trước khi thực hiện nâng cấp hệ thống lớn.
Làm chủ MySQL trên Fedora không chỉ là cài xong rồi để đó. Đó là sự kết hợp giữa việc hiểu cấu hình phần mềm và các cơ chế bảo mật tầng sâu của hệ điều hành. Chúc anh em triển khai hệ thống ổn định, ít phải nhận cuộc gọi lúc 2 giờ sáng!
