Hướng dẫn chuyển storage engine của MySQL từ 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;doneTrong đó "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"
Powered by WHMCompleteSolution