สำหรับฐานข้อมูลที่มีตารางเยอะๆ และ Engine ของตารางไม่เหมือนกัน หรือต้องการจะเปลี่ยนกลับไปกลับมา ระหว่าง MyISAM และ InnoDB สามารถทำได้ด้วยการใช้ PHP เข้ามาช่วย โดยคำสั่งนี้
<?php // connect your database here first // $db_host = "localhost"; $db_user = "user"; $db_pass = "pass"; $db_name = "dbname"; mysql_connect($db_host, $db_user, $db_pass); mysql_select_db($db_name); // Actual code starts here $sql = "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '{$db_name}' AND ENGINE = 'MyISAM'"; $rs = mysql_query($sql); while($row = mysql_fetch_array($rs)) { $tbl = $row[0]; $sql = "ALTER TABLE `$tbl` ENGINE=InnoDB;"; echo $sql, '<br>'; mysql_query($sql); } ?>
จากด้านบน จะเป็นการ Query ตาราง InnoDBแล้วแก้ไขเป็น MyISAM หากต้องการทำกลับกัน ให้สลับตำแหน่งของ InnoDB และ MyISAM นะครับ
Update: เวอร์ชั่นที่ต้องการเปลี่ยน DB Engine ทุก Database ครับ
<?php // connect your database here first $skip = array('sys', 'mysql', 'information_schema', 'performance_schema', 'da_roundcube'); // $db_host = "localhost"; $db_user = "db_user"; $db_pass = "db_pass"; //$db_name = "dbname"; $db = new mysqli($db_host, $db_user, $db_pass); // Check connection if ($db -> connect_errno) { echo "Failed to connect to MySQL: " . $db -> connect_error; exit(); } $Query_DB = $db->query("SHOW DATABASES"); while($db_single = $Query_DB->fetch_object()){ // Skip for none user _ if(in_array($db_single->Database, $skip) ) continue; echo "# " . $db_single->Database . "<br>"; $db->select_db($db_single->Database); // Actual code starts here $sql = "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '{$db_single->Database}' AND ENGINE = 'MyISAM'"; $rs = $db->query($sql); while($row = $rs->fetch_array()) { $tbl = $row[0]; $sql = "ALTER TABLE `$tbl` ENGINE=InnoDB;"; echo $sql, '<br>'; $db->query($sql); } echo "<br><br>"; } ?>
สำหรับ mysqli
<?php // connect your database here first $skip = array('sys', 'mysql', 'information_schema', 'performance_schema', 'da_roundcube'); // $db_host = "localhost"; $db_user = "db_user"; $db_pass = "db_pass"; //$db_name = "dbname"; $db = new mysqli($db_host, $db_user, $db_pass); // Check connection if ($db -> connect_errno) { echo "Failed to connect to MySQL: " . $db -> connect_error; exit(); } $Query_DB = $db->query("SHOW DATABASES"); while($db_single = $Query_DB->fetch_object()){ // Skip for none user _ if(in_array($db_single->Database, $skip) ) continue; echo "# " . $db_single->Database . "<br>"; $db->select_db($db_single->Database); // Actual code starts here $sql = "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '{$db_single->Database}' AND ENGINE = 'MyISAM'"; $rs = $db->query($sql); while($row = $rs->fetch_array()) { $tbl = $row[0]; $sql = "ALTER TABLE `$tbl` ENGINE=InnoDB;"; echo $sql, '<br>'; $db->query($sql); } echo "<br><br>"; } ?>
ในส่วนของตัวแปร $skip ก็ใส่ DB ที่ไม่ต้องการเปลี่ยน เช่น DB ของระบบ เป็นต้นครับ
Blog ส่วนตัว ที่จะแชร์เรื่องร่าวต่างๆที่พบเจอมา จากประสบการณ์จริง เพื่อเป็นประโยชน์ต่อสังคมและผู้ที่กำลังศึกษาหาความรู้เรื่องต่างๆ ไม่ว่าจะเป็น Server, Network, Security, ทำเว็บไซต์, เขียนโปรแกรม, ฯลฯ ขอบคุณทุกๆการติดตามครับ 😉
★ บริการ Cloud Server ★