Bài 13: Database cơ bản cho SysAdmin
Bài này giúp anh kiểm tra trạng thái database, kết nối, port, log và backup cơ bản ở vai trò SysAdmin.
- SysAdmin cần biết gì về database.
- Kiểm tra MySQL/MariaDB/PostgreSQL service.
- Kiểm tra port, log và kết nối.
- Backup/restore cơ bản.
Chốt ý nhanh
| Chủ đề | Điểm cần nhớ |
|---|---|
| Vai trò SysAdmin | Không cần thành DBA, nhưng phải biết service DB sống hay chết và vì sao app không kết nối được. |
| Rủi ro lớn | DB đầy disk, mở public sai cách, không backup hoặc không test restore. |
| Phản xạ đúng | Kiểm tra service, port, user, log, disk trước khi động vào dữ liệu. |
1. SysAdmin có cần biết database không?
Có. Không cần thành DBA ngay, nhưng cần biết service DB có chạy không, disk có đầy không, app có kết nối được không, backup có restore được không.
2. Kiểm tra service và port
systemctl status mysql || systemctl status mariadb systemctl status postgresql ss -tulpn | grep -E '3306|5432'
3. Kết nối MySQL/MariaDB
mysql -u root -p SHOW DATABASES; SELECT USER, HOST FROM mysql.user; EXIT;
4. Kết nối PostgreSQL
sudo -u postgres psql \l \du \q
5. Đọc log database
journalctl -u mysql --since "1 hour ago" || journalctl -u mariadb --since "1 hour ago" journalctl -u postgresql --since "1 hour ago"
6. Backup cơ bản
mysqldump -u root -p database_name > database_name.sql pg_dump database_name > database_name.sql
Backup xong cần kiểm tra file có dung lượng hợp lý và nên test restore.
7. Tình huống thực tế
8. Lỗi thường gặp
- Mở database public ra Internet.
- Không test restore.
- Backup nằm cùng server production duy nhất.
- Không theo dõi disk khiến DB dừng ghi.
9. Checklist database
- Service active.
- Port listen đúng interface.
- Disk còn đủ.
- Backup có lịch và có test restore.
- User app có quyền tối thiểu cần thiết.
10. Bài tập
- Kiểm tra service database trên máy lab.
- Liệt kê database/user.
- Tạo một file dump test.
- Viết checklist xử lý app không kết nối DB.
Phần thực hành mở rộng: database theo góc nhìn vận hành hạ tầng
Database là thành phần mà chỉ cần một lỗi nhỏ cũng có thể làm ứng dụng dừng toàn bộ. Vì vậy bài này nên tập trung vào cách quan sát an toàn, không sa đà vào tối ưu sâu như DBA.
Lab 1: Kiểm tra DB service và cổng mạng
systemctl status mysql || systemctl status mariadb
systemctl status postgresql
ss -tulpn | grep -E '3306|5432'
Mục tiêu là xác định DB có đang chạy không, có listen đúng cổng không, và đang bind trên interface nào.
Lab 2: Kiểm tra kết nối nội bộ
mysql -u root -p -e 'SHOW DATABASES;'
sudo -u postgres psql -c '\l'
Nếu kết nối local còn lỗi, chưa cần nghĩ tới firewall ngoài; hãy xử lý service, socket, credential hoặc permission trước.
Lab 3: Backup dump nhỏ và kiểm tra file output
mysqldump -u root -p database_name > /tmp/database_name.sql
ls -lh /tmp/database_name.sql
head -20 /tmp/database_name.sql
Hoặc với PostgreSQL:
pg_dump database_name > /tmp/database_name.sql
ls -lh /tmp/database_name.sql
Một file dump có dung lượng 0 byte hoặc nhỏ bất thường là tín hiệu phải kiểm tra lại ngay.
Lab 4: Đọc log khi app không nối DB được
journalctl -u mysql --since "1 hour ago" --no-pager || journalctl -u mariadb --since "1 hour ago" --no-pager
journalctl -u postgresql --since "1 hour ago" --no-pager
Kết hợp thêm log ứng dụng để phân biệt lỗi credential, timeout, connection refused hay too many connections.
Tình huống thực tế
Một ứng dụng báo “database connection failed”. Đôi khi lỗi nằm ở DB service down, đôi khi là disk đầy khiến DB không ghi được, đôi khi là app deploy sai biến môi trường. Người vận hành tốt phải kiểm từng lớp, không đoán mò.
Lỗi phổ biến
- Mở MySQL/PostgreSQL public ra Internet không kiểm soát.
- Có backup nhưng chưa từng test restore.
- Backup nằm ngay trên cùng máy production.
- Động vào dữ liệu khi chưa backup hoặc chưa hiểu impact.
Kết bài
Sau bài này, anh chưa cần trở thành DBA, nhưng đã có đủ khung để chăm một database dưới góc nhìn SysAdmin: biết nó có chạy không, app có nối được không, log đang nói gì và backup có đáng tin không. Bài kế tiếp sẽ nối thẳng sang một kỹ năng sống còn của vận hành: backup và restore.
