L ỜI CAM ĐOAN
2.4.2. Một số thao tác cơ bản
Trong MySQL, các storage engine có thể được xây dựng theo 2 cách: luôn luôn
được dịch cùng với máy chủ MySQL (ví dụ như InnoDB, MyISAM, …), hay được
dịch sau khi máy chủ đã được cài đặt và phải được cài đặt sau đó bằng câu lệnh
INSTALL PLUGIN trước khi được sử dụng. Mỗi phiên bản MySQL khác nhau tích hợp sẵn các storage engine khác nhau. Để kiểm tra các storage engine được hỗ trợ
trong một phiên bản nào đó sử dụng câu lệnh SHOW ENGINES hoặc SHOW STORAGE ENGINES.
Các storage engine được bổ sung sau khi đã cài đặt máy chủ MySQL yêu cầu thực
hiện một số thao tác trước khi sử dụng. Trước tiên, cần biên dịch các storage engine này cùng với máy chủ MySQL bằng cách dịch lại mã nguồn với lựa chọn: CMake – DWITH_<Tên_storage_engine>_STORAGE_ENGINE=1 (nếu sử dụng CMake – từ
phiên bản 5.5 trở đi) hoặc ./cofigure –with_<tên_storage_engine>_storage_engine
make install để xây dựng và cài đặt lại máy chủ MySQL đã tích hợp storage engine được lựa chọn.
Nếu quá trình biên dịch thành công, một thư viện chia sẻ của storage engine sẽ được tạo ra có tên là ha_<tên_storage_engine>.so nằm trong thư mục plugin (vị trí lưu trữ được chỉ định trong biến plugin_dir).
Để sử dụng, thư viện chia sẻ của storage engine phải được được tải vào máy chủ MySQL đang chạy trước khi sử dụng hoặc gỡ bỏ ra khỏi máy chủ khi không sử dụng
nữa.
Gắn (plugging in) một storage engine vào máy chủ: tải thư viện chia sẻ của
storage engine vào trong máy chủ MySQL sử dụng câu lệnh INSTALL PLUGIN có cú
pháp như sau:
Mysql>INSTALL PLUGIN <tên engine> SONAME <tên thư viện chia sẻ>;
Giả sử nếu engine có tên là example và thư viện chia sẻ có tên là ha_example.so thì câu lệnh tải plugin như sau:
Mysql>INSTALL PLUGIN example SONAME ‘ha_example.so’;
Câu lệnh INSTALL PLUGIN sẽ đăng kí storage engine vào bảng mysql.plugin để
máy chủ có thể tải nó. Do đó, người dùng đưa ra lệnh INSTALL PLUGIN phải có
quyền INSERT vào bảng mysql.plugin.
Khi khởi động, máy chủ MySQL sẽ tải và khởi tạo các plugin có trong bảng
mysql.plugin. Do đó, một storage engine chỉ cần được cài đặt một lần duy nhất mà không cần cài đặt mỗi lần khởi động máy chủ.
Gỡ bỏ một storage engine (Unplugging): sử dụng câu lệnh UNINSTALL
PLUGIN có cấu trúc như sau:Mysql> UNINSTALL PLUGIN <tên engine>;
Chẳng hạn để gỡ bỏ storage engine có tên example trong ví dụ trên, sử dụng câu
lệnh:Mysql> UNINSTALL PLUGIN example;
Khi gỡ bỏ một storage engine đã được cài đặt, nó sẽ yêu cầu xóa quyền trong bảng mysql.plugin. Khi đó, máy chủ sẽ không tải và khởi động storage engine nhưng nó
không xóa tệp thư viện chia sẻ của storage engine đó. Do đó, nếu muốn sử dụng lại thì không cần phải biên dịch lại storage engine nữa.
Nếu gỡ bỏ một storage engine đang được sử dụng trong một bảng đang tồn tại, các bảng này sẽ không thể truy cập được nhưng vẫn được thể hiện trên đĩa. Do đó, cần đảm bảo không có bất kì bảng nào đang sử dụng storage engine trước khi gỡ bỏ nó.
Các storage engine được biên dịch tĩnh (luôn luôn được biên dịch cùng với máy
sau khi đã được tra lắp vào máy chủ MySQL thì đều có thể được sử dụng. Các khai báo sử dụng storage engine được sử dụng trong các câu lệnh:
Tạo bảng với câu lệnh:
CREATE TABLE …. ENGINE = <tên storage engine>;
Nếu không chỉ định rõ tên engine khi tạo bảng thì bảng mới được tạo ra có kiểu là kiểu bảng của storage engine mặc định (InnoDB cho các phiên bản từ 5.5.5 trở lên và MyISAM cho các phiên bản cũ hơn).
Sửa đổi bảng với câu lệnh:
ALTER TABLE <tên bảng> ENGINE = <tên storage engine khác>;
Chẳng hạn nếu CSDL có tạo một bảng Mytable với lựa chọn ENGINE = MyISAM trước đó, thì sau đó có thể đổi storage engine cho bảng bằng lệnh sau:
ALTER TABLE Mytable ENGINE = InnoDB;
Tuy nhiên, việc đổi kiểu bảng này có rất nhiều vấn đề rất phức tạp, nếu không thực
sự cần và chắc chắn thì không nên thay đổi kiểu của một bảng.
Trong một ứng dụng có thể sử dụng nhiều storage engine khác nhau. Tuy nhiên, theo các chuyên gia thì không nên sử dụng nhiều loại bảng cho một ứng dụng cơ sở dữ
liệu.
Kết luận chương 2: Kiến trúc pluggable storage engine của MySQL đã đem lại
cho MySQL một sự linh hoạt vượt trội hơn hẳn các hệ QTCSDL khác. Các storage engine đang được phát triển hiện nay là vô cùng phong phú và hứa hẹn nhiều bước tiến
mới lớn hơn trong tương lai. Với tính tra lắp được, bên cạnh rất nhiều storage engine
được MySQL phát triển như là InnoDB, MyISAM, Federate, Memory, NDB
Cluster,… MySQL cũng tạo môi trường thuận lợi để những nhà phát triển trên khắp
thế giới có thể tham gia xây dựng nhiều storage engine hơn phục vụ nhiều nhu cầu của người dùng hơn trong nhiều hoàn cảnh. Sự phát triển mạnh mẽ của các storage engine
tạo nên một bức tranh phong phú cho sự đa dạng, tính linh hoạt trong triển khaicác cơ
chế truy cập tệp trong nhiều hoàn cảnh và môi trường khác nhau. Có lẽ đó là một trong
những nguyên nhân chính của sự thành công vượt trội của MySQL với tư cách là một
CHƯƠNG 3. XÂY DỰNG STORAGE ENGINE
Kiến trúc pluggable storage engine không những cho phép lựa chọn các storage engine đã có phù hợp nhất với ứng dụng người dùng mà còn cung cấp khả năng bổ
sung mới các storage engine tự phát triển cho một ứng dụng riêng. Có rất nhiều
nguyên nhân khi xây dựng mới một storage engine. Đó có thể là do không có storage
engine đã có nào thỏa mãn nhu cầu của miền ứng dụng cần xây dựng, hay đơn giản là muốn xây dựng một ứng dụng mới trên MySQL nhưng đồng thời vẫn muốn khai thác ứng dụng trên nền tảng cũ – khi đó, có thể xây dựng một storage engine cho phép đọc
và ghi dữ liệu từ ứng dụng cũ mà không phải thực hiện bất kì chuyển đổi dữ liệu từ định dạng cũ sang định dạng mới nào và quan trọng nhất là, các pluggable storage engine có thể được sử dụng để kết nối với các dữ liệu không thường xuyên kết nối với
hệ cơ sở dữ liệu – nghĩa là, các storage engine có thể đọc các dòng dữ liệu (ví dụ ,
BLOB trong PBMS), hay các dữ liệu phi truyền thống (ví dụ như NoSQL), các dữ liệu không lưu trữ trên đĩa. Dù mục đích là gì, MySQL cũng thật sự thỏa mãn được yêu cầu
của bất kì người phát triển nào thông qua khả năng xây dựng mới một storage engine chuyên biệt hiệu quả đáp ứng tốt nhất với nhu cầu của ứng dụng cần xây dựng.