Đây là plugin với 1 tính năng duy nhất là chuyển MyISAM sang InnoDB, sau khi cài đặt Simple MyISAM to InnoDB bạn vào Simple MyISAM to InnoDB, chọn các bảng sử dụng MyISAM và chuyển sang InnoDB với 1 cú submit
Bạn nên sử dụng Simple MyISAM to InnoDB để việc chuyển đổi nhanh hơn, không phải tốn công ngồi click như Servebolt Optimizer phía dưới
2. Servebolt Optimizer
Servebolt Optimizer có nhiều tính năng mở rộng hơn là chuyển đổi chỉ chuyển đổi MyISAM sang InnoDB, bạn có thể cài đặt Servebolt Optimizer sau đó truy cập vào Performance optimizer để tiến hành chuyển MyISAM sang InnoDB.
3. Index WP MySQL For Speed
Đây cũng là một công cụ hay giúp chuyển đổi database tables sang InnoDB với 1 cú click đúng nghĩa, sau khi bạn cài xong Index WP MySQL For Speed bạn truy cập vào Tools > Index MySQL
Backup lại cơ sở dữ liệu để phòng bất trắc chọn I have made a backup sau đó nhấn Upgrade Storage Engine Now để nâng cấp các bảng cơ sở dữ liệu lên InnoDB, công cụ lưu trữ mới nhất của MySQL.
Sử dụng phpMyAdmin
Ngoài cách sử dụng plugin để chuyển MyISAM sang InnoDB thì bạn có thể truy cập vào phpMyAdmin để chuyển đổi.
Đăng nhập vào phpMyAdmin. Sau đó chọn Table cần chuyển => Thao tác => Phần Store Engine chọn InnoDB
Sử dụng bash script
Ngoài sử dụng các cách ở trên, nếu bạn sử dụng VPS và có quyền truy cập SSH bạn có thể sử dụng bash script để chuyển đổi nhé. Lưu code dưới với tên convert.sh sau đó chmod +x /home/convert.sh
#!/bin/bash
# Converts all MyISAM tables in all databases to InnoDB
DATABASES="db1 db2" # Convert databases db1 and db2 only
#DATABASES="ALL" # Convert all databases
MYSQL_USER=root
# Uncomment if you're not using ~/.my.cnf file (will receive "Warning: Using a password on the command line interface can be insecure" warnings)
#MYSQL_PASS='some-secret-password'
MYSQL_HOST=localhost
### no need to change anything below
# bail out on undefined variables
set -u
# mysql command we will use
MYSQL_COMMAND="mysql -s -u "$MYSQL_USER" -h $MYSQL_HOST"
# Uncomment if you're not using ~/.my.cnf file (will receive "Warning: Using a password on the command line interface can be insecure" warnings)
#MYSQL_COMMAND="mysql -s -u "$MYSQL_USER" --password="$MYSQL_PASS" -h $MYSQL_HOST"
# get a list of databases if we want to convert all databases
if [ "$DATABASES" == "ALL" ] ; then
DATABASES=$(echo "SHOW DATABASES" | $MYSQL_COMMAND | egrep -v '(performance_schema|information_schema|mysql)')
fi
for DATABASE in $DATABASES ; do
echo Converting $DATABASE
# Check if the table is MyISAM (we don't want to convert InnoDB tables over and over again)
TABLES=$(echo "SELECT TABLE_NAME FROM information_schema.TABLES where TABLE_SCHEMA = '$DATABASE' and ENGINE = 'MyISAM'" | $MYSQL_COMMAND)
for TABLE in $TABLES ; do
echo Converting MyISAM $TABLE to InnoDB
echo "ALTER TABLE $TABLE ENGINE = INNODB" | $MYSQL_COMMAND $DATABASE
done
if [ "x$TABLES" = "x" ] ; then
echo No MyISAM tables found in $DATABASE database
fi
echo
done
Sử dụng wp cli
Về cách sử dụng wp cli bạn có thể đọc chi tiết tại bài viết Cài đặt WP CLI và quản lý WordPress bằng câu lệnh WP CLI
Trong bài này mình hướng dẫn nhanh cách chuyển đổi MyISAM sang InnoDB
Đi đến thư mục gốc chứa website với câu lệnh cd
cd /home/vutruso.com/public_html
Xem thử có bảng nào có MyISAM
wp db query "SHOW TABLE STATUS WHERE Engine = 'MyISAM'" --allow-root
Backup dữ liệu trước khi làm gì đó
wp db export vutruso.sql --allow-root
Chuyển đổi MyISAM sang InnoDB với lệnh wp cli dưới đây, quăng cả vào ssh để chạy hoặc bạn tạo 1 file .sh tương tự như bash scipt mình giới thiệu ở trên.
# create array of MyISAM tables
WPTABLES=($(wp db query "SHOW TABLE STATUS WHERE Engine = 'MyISAM'" --allow-root --silent --skip-column-names | awk '{ print $1}'))
# loop through array and alter tables
for WPTABLE in ${WPTABLES[@]}
do
echo "Converting ${WPTABLE} to InnoDB"
wp db query "ALTER TABLE ${WPTABLE} ENGINE=InnoDB" --allow-root
echo "Converted ${WPTABLE} to InnoDB"
done
Ngoài cách này bạn có thể nâng cấp script để tự động chuyển toàn bộ MyISAM sang InnoDB trên toàn bộ website đang có trên VPS bằng cách tạo vòng lặp qua toàn bộ thư mục và chạy wp cli như trên.
Để đơn giản và nhanh nhất mình khuyến nghị sử dụng plugin Simple MyISAM to InnoDB.