Tips

TIP #29: Chuyển MyISAM sang InnoDB

Tip hôm nay sẽ chia sẻ với các bạn cách chuyển table sử dụng engine MyISAM sang InnoDB. Trước khi tiến hành, ta cần xác định lại engine của table đang sử dụng:

1. Chuyển MyISAM sang InnoDB sử dụng phpMyAdmin

  • Login vào phpMyAdmin.
  • Chọn Database chứa table cần chuyển.
  • Chọn Table cần chuyển sang InnoDB > “Operation“.
  • Phần “Store Engine” chọn “InnoDB
  • Go

2. Sử dụng Command Line

Login vào MySQL Console, chọn database chứa table cần chuyển và thực thi query alter table

[root@blog.vietnix.vn ~]# mysql -uroot -p
MariaDB [(none)]> use blog_vietnix;
MariaDB [blog_vietnix]> alter table wp_users engine=InnoDB;

3. Chuyển toàn bộ Table của một Database từ MyISAM sang InnoDB

Trường hợp muốn chuyển toàn bộ database của một table sang InnoDB, có thể dump database ra file sau đó sửa Engine và import vào lại hoặc sử dụng oneliner command:

  • Dump Database ra file
$ mysqldump --opt blog_vietnix > blog_vietnix.sql
  • Sửa file vừa dump, thay “ENGINE=MyISAM” thành “ENGINE=InnoDB”
$ sed -i 's/ENGINE=MyISAM/ENGINE=InnoDB/g' blog_vietnix.sql
  • Import lại file dump đã được chỉnh sửa
$ mysql blog_vietnix < blog_vietnix.sql

Hoặc dùng Oneliner command dựa theo TIP #1: Xử lý File/Output của command trực tiếp từng dòng trên shell

[root@blog.vietnix.vn ~]# dbname="blog_vietnix" ; dbuser="root"; dbpass='xxxxxxx' ; mysql -u$dbuser -p$dbpass --column-names=false -e "show tables" $dbname | while read table ; do echo "Table: $table" ; mysql -u$dbuser -p$dbpass -e "alter table $table engine=InnoDB" $dbname ; done
  • Thay dbname, dbuser, dbpass bằng thông tin tương ứng.

Hãy tham Group Telegram của chúng tôi để giao lưu với các Sysadmin khác.