Cấu hình storage engine trong MySQL

Khi chúng ta tạo 1 bảng mới, chúng ta có thể chỉ rõ storage engine nào sẽ dùng bằng cách thêm tùy chọn ENGINE vào khai báo CREATE TABLE như sau:

mysql> CREATE TABLE t (i INT) ENGINE = INNODB;

Nếu chúng ta bỏ qua tùy chọn ENGINE, storage engine mặc định sẽ được dùng. Thông thường, storage engine mặc định sẽ là MyISAM, nhưng chúng ta có thể thay đổi nó bằng cách sử dụng tùy chọn –default-storage-engine khi khởi động máy chủ:

#  mysqld --default-storage-engine=innodb -u root -p &

hay thiết lập tùy chọn default-storage-engine trong tập tin cấu hình my.cnf

# vi /etc/my.cnf
default-storage-engine = INNODB
# /etc/init.d/mysqld restart

Chúng ta có thể thiết lập storage engine mặc định sẽ được dùng trong suốt phiên kết nối hiện tại bằng việc thiết lập biến storage_engine:

mysql> SET storage_engine=INNODB;

Để chuyển đổi 1 bảng từ 1 engine này sang engine khác, sử dụng khai báo ALTER TABLE để chỉ định engine mới:

mysql> ALTER TABLE t ENGINE = INNODB;

Để kiểm tra storage engine đang dùng và storage engine mặc định trong MySQL, chúng ta sử dụng cách sau:

mysql> show variables like '%engine%';
+----------------------------+--------+
| Variable_name              | Value  |
+----------------------------+--------+
| default_storage_engine     | InnoDB |
| default_tmp_storage_engine | InnoDB |
| storage_engine             | InnoDB |
+----------------------------+--------+
3 rows in set (0.00 sec)

Nếu chúng ta cố gắng sử dụng 1 storage engine chưa được biên dịch hoặc được biên dịch nhưng chưa kích hoạt, MySQL thay vào đó sẽ tạo bảng sử dụng engine mặc định. Hành vi này thuận tiện khi chúng ta muốn sao chép nhiều bảng giữa các máy chủ MySQL hỗ trợ nhiều storage engine khác nhau. Ví dụ, trong cấu hình replicate,  máy chủ master của chúng ta sẽ sử dụng các storage engine hỗ trợ giao dịch để tăng độ an toàn, nhưng các máy chủ slave chỉ sử dụng các storage engine không hỗ trợ giao dịch để tăng tốc độ.

Việc thay thế storage engine mặc định cho các engine không được cài đặt có thể gây bối rối cho các người dùng MySQL mới. 1 cảnh báo sẽ được tạo ra khi 1 storage engine được tự động thay đổi. Để ngăn việc này xảy ra nếu engine mong muốn không có, kích hoạt chế độ SQL NO_ENGINE_SUBSTITUTION. Trong trường hợp này, 1 lỗi sẽ xảy ra thay cho 1 cảnh báo và bảng kia sẽ được được tạo hoặc thay đổi nếu engine mong muốn không có.

Với các bảng mới, MySQL luôn tạo 1 tập tin .frm để giữ các định nghĩa bảng và cột. Chỉ mục của bảng có thể được lưu trữ trong 1 hoặc nhiều tập tin khác, dựa trên storage engine. Máy chủ tạo tập tin .frm trên cấp storage engine. Các storage engine cụ thể sẽ tạo các tập tin bổ sung cần thiết cho các bảng mà chúng quản lý. Nếu tên của bảng chứa ký tự đặc biệt, tên cho tập tin của bảng chứa phiên bản mã hóa cho các ký tự này.

1 CSDL có thể chứa nhiều bảng với loại khác nhau. Vì vậy, các bảng không cần phải tạo với cùng 1 storage engine.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.