I. Giới thiệu: - MyISAM và InnoDB là các storage engine (cơ chế lưu trữ) của MySQL. Mỗi cơ chế sẽ lưu dữ liệu trên ổ cứng theo mỗi cách khác nhau và có ưu nhược điểm riêng. Một số tính năng của từng loại cơ chế: a. MyISAM: + Chỉ có thể đọc table đồng thời mà không thể ghi đồng thời + Tự sữa chữa và phục hồi dữ liệu tốt sau khi hệ thống bị crash. + Hỗ trợ tìm kiếm full-text index. + Tăng tốc độ ghi nhờ không ghi dữ liệu vào ổ cứng ngay mà ghi vào buffer trên RAM trước, sau một khoảng thời gian mới ghi vào ổ cứng + Hỗ trợ nén dữ liệu giúp tăng tốc độ đọc dữ liệu nhưng dữ liệu sau khi nén không thể cập nhật được. b. InnoDB:
+ Có khả năng phục hồi, sửa chữa tốt
+ Là engine phức tạp nhất trong các engine của MySQL
+ Hỗ trợ MVCC (Multiversion Concurrency Control) do đó table có thể đọc và ghi đồng thời
+ Sử dụng clustered index do đó hiệu năng tìm kiếm theo primakey rất cao.
+ Lưu dữ liệu trên 1 file (thuật ngữ gọi là tablespace).
+ Hỗ trợ transactions
II. Cách chuyển MyISAM sang InnoDB và ngược lại
- Sử dụng cú pháp MySQL sau để chuyển từng table MyISAM sang InnoDB: ALTER TABLE table_name ENGINE = MyISAM;
- Sử dụng cú pháp MySQL sau để chuyển từng table InnoDB sang InnoDB: ALTER TABLE table_name ENGINE = InnoDB;
- Hướng dẫn chuyển tất cả table của một database từ MyISAM sang InnoDB:
+ Tạo file script: "vi script"
+ Thêm nội dung sau vào file script
#!/bin/sh
DBNAME="your-database"
DBUSER="your-username"
DBPWD="your-password"for t in $(mysql -u$DBUSER -p$DBPWD --batch --column-names=false-e "show tables" $DBNAME);do
echo "Converting table $t"
mysql -u$DBUSER -p$DBPWD -e "alter table $t engine=InnoDB" $DBNAME;done
Trong đó "your-database" là database cần chuyển, "your-username" là user name của được gán quyền cho database, "your-password" là password của user.
+ Thêm quyền thực thi cho file script: "chmod +x script
+ Chạy file script: ./script
- Khách hàng có thể sử dụng script trên để chuyển InnoDB sang MyISAM với script trên bằng cách sửa dòng "mysql -u$DBUSER -p$DBPWD -e "alter table $t engine=InnoDB" $DBNAME;done" thành "mysql -u$DBUSER -p$DBPWD -e "alter table $t engine=MyISAM" $DBNAME;done"
0 Comments