Chuyển storage engine MyISAM sang InnoDB và ngược lại

Bài viết này sẽ hướng dẫn chuyển storage engine của MySQL từ MyISAM sang InnoDB và ngược lại.

1. 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.

2. 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”

Đánh giá bài viết
Was this article helpful?
Đánh giá
Đánh giá bài viết
Đăng ký nhận tin

Để không bỏ sót bất kỳ tin tức hoặc chương trình khuyến mãi từ Vinahost

    Bài viết liên quan
    Bình luận
    Theo dõi
    Thông báo của
    guest
    0 Góp ý
    Cũ nhất
    Mới nhất Được bỏ phiếu nhiều nhất
    Phản hồi nội tuyến
    Xem tất cả bình luận