Quản Trị MySQL Trên CentOS: Nhập Xuất Dữ Liệu, Chuẩn Hóa Encoding Và Giám Sát Hiệu Suất

Quản Lý Dữ Liệu Và Di Chuyển Database

Trong môi trường máy chủ Linux, việc sao lưu và khôi phục dữ liệu MySQL thường được thực hiện trực tiếp qua dòng lệnh để đảm bảo tính ổn định và bảo mật, đặc biệt khi không thể truy cập từ bên ngoài. Dưới đây là các phương thức thực hiện phổ biến.

1. Khôi phục dữ liệu từ file SQL

Có hai cách chính để nhập dữ liệu vào database: thực thi trực tiếp từ shell của Linux hoặc thông qua command line của MySQL.

Thực thi từ Linux Shell:

Phương pháp này yêu cầu đường dẫn tuyệt đối đến file backup. Khi lệnh được chạy, hệ thống sẽ yêu cầu xác thực mật khẩu trước khi tiến hành nạp dữ liệu.

## Thay thế tên database và đường dẫn file backup
mysql -u admin -p target_db < /opt/backups/data_dump.sql

Thực thi từ MySQL Shell:

Trước tiên cần đăng nhập vào MySQL, chọn database đích và sử dụng lệnh source để trỏ đến file cần khôi phục.

## Chọn database cần khôi phục
use app_core;

## Trỏ đến file SQL cần nhập
source /opt/backups/data_dump.sql;

2. Sao lưu dữ liệu ra file SQL

Công cụ mysqldump cho phép xuất dữ liệu linh hoạt tùy theo nhu cầu: toàn bộ database, chỉ cấu trúc bảng hoặc từng bảng cụ thể.

Xuất toàn bộ dữ liệu và cấu trúc:

## Thay thế thông tin database và đường dẫn lưu trữ
mysqldump -u admin -p source_db > /opt/backups/full_backup.sql

Chỉ xuất cấu trúc bảng (không lấy dữ liệu):

## Sử dụng flag --no-data hoặc -d
mysqldump -u admin -p --no-data source_db > /opt/backups/schema_only.sql

Xuất riêng một bảng dữ liệu:

## Chỉ định tên bảng cụ thể
mysqldump -u admin -p source_db users > /opt/backups/users_table.sql

Các Lệnh Quản Trị Và Tối Ưu Hóa Nâng Cao

Ngoài việc sao lưu, quản trị viên cần nắm vững các truy vấn để kiểm soát dung lượng, chuẩn hóa định dạng ký tự và xử lý các sự cố hiệu năng.

1. Xác định các bảng chiếm dụng dung lượng lớn nhất

Truy vấn vào information_schema giúp liệt kê các bảng có số lượng record hoặc dung lượng lưu trữ lớn nhất, hỗ trợ việc lên kế hoạch tối ưu hóa.

SELECT 
    table_schema AS 'Database_Name', 
    table_name AS 'Table_Name',
    table_rows AS 'Row_Count',
    data_length AS 'Data_Size'
FROM information_schema.tables
-- Có thể lọc theo schema cụ thể
-- WHERE table_schema = 'finance_db'
ORDER BY data_length DESC
LIMIT 10;

2. Chuyển đổi đồng loạt encoding sang utf8mb4

Để hỗ trợ đầy đủ các ký tự emoji và ngôn ngữ đa dạng, việc chuyển đổi charset sang utf8mb4 là cần thiết. Truy vấn dưới đây sẽ sinh ra các lệnh ALTER để thực hiện việc này cho toàn bộ bảng trong một database.

SELECT CONCAT('ALTER TABLE `', table_name, '` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;') AS sql_command
FROM information_schema.TABLES
WHERE table_schema = 'core_system';

Lưu ý rằng MySQL 8.0 mặc định sử dụng collation utf8mb4_0900_ai_ci, tuy nhiên utf8mb4_unicode_ci vẫn tương thích và phổ biến trong nhiều hệ thống cũ.

3. Mở rộng cấu trúc bảng và tạo chỉ mục

Khi cần thêm trường mới và đánh chỉ mục để tăng tốc độ truy vấn, có thể thực hiện qua các lệnh DDL sau:

## Thêm cột mới vào bảng
ALTER TABLE `iot_sensor_data` ADD COLUMN `hardware_serial` varchar(64) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT 'Serial phần cứng';

## Tạo index cho cột vừa thêm
CREATE INDEX `idx_hardware_serial` ON `iot_sensor_data`(`hardware_serial`) COMMENT 'Index tìm kiếm theo serial';

4. Giám sát tiến trình và xử lý sự cố CPU cao

Khi database gặp tình trạng tải cao hoặc CPU tăng đột biến, việc kiểm tra các thread đang chạy là bước đầu tiên để xác định nguyên nhân. Lệnh SHOW FULL PROCESSLIST hiển thị các truy vấn đang thực thi.

## Xem danh sách các tiến trình đang chạy
SHOW FULL PROCESSLIST;

## Nếu phát hiện truy vấn treo hoặc耗时 quá lâu, có thể终止 bằng ID
kill 952301;

## Kiểm tra các chỉ số trạng thái toàn cục liên quan đến kết nối và truy vấn
SHOW GLOBAL STATUS LIKE 'Threads%';
SHOW GLOBAL STATUS LIKE 'Connections';
SHOW GLOBAL STATUS LIKE 'Queries';
SHOW GLOBAL STATUS LIKE 'Slow_queries';

Việc phân tích kết quả từ các lệnh trên giúp xác định xem sự cố do số lượng kết nối đồng thời quá lớn hay do các truy vấn chưa được tối ưu hóa gây tắc nghẽn tài nguyên.

Thẻ: mysql CentOS database administration SQL Optimization utf8mb4

Đăng vào ngày 30 tháng 6 lúc 18:51