June 26, 2015

Hướng dẫn chuyển storage engine của MySQL từ MyISAM sang InnoDB và ngược lại

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:

Post a Comment