گاهی اوقات لازم می بینید که موتور(Engine) جداول دیتابیس را از InnoDB به MyISAM یا برعکس تبدیل کنید.

مخصوصا طراحان سایت سیستم مدیریت محتوای دروپال(Drupal) خیلی با این مسئله درگیر می شوند. چون به طور پیش فرض این سیستم مدیریت محتوا جداول خود را با سیستم InnoDB ایجاد می کند و در برخی موارد لازم است یا ترجیح داده می شود که دیتابیس با سیستم MyISAM کار کند.

برای تبدیل یک جدول از یک سیستم به سیستم دیگر از این دستور Mysql استفاده می شود:

ALTER TABLE `TABLE_NAME` ENGINE=MyISAM; // OR InnoDB

اما اجرای آن برای تک تک جداول کاری مشکل است. لذا یک اسکریپت php برای این کار نوشتم که در زیر ارائه می شود:
در کد زیر:
- سیستمی که شما می خواهید جداول به آن تبدیل شوند را در متغیر to_system قرار بدهید.
- اگر جداول چندین دیتابیس در یک سرور را که یوزر و پسوورد مشترک دارند را می خواهید تغییر دهید را در آرایه database مثل نمونه درج کنید. اگر یک دیتابیس دارید تنها یک محتوا را در این متغیر باقی بگذارید.
- اطلاعات اتصال دیتابیس را در متغیرهای servername و username و password درج کنید.
- جداول مورد نظر برای تغییر را در آرایه tablearray مثل نمونه درج کنید.

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
$to_system = "MyISAM";  // OR  InnoDB
$databases =array(
        'DATABAS_NAME1',                //دیتابیس 1
       // 'DATABAS_NAME2',                //دیتابیس 2
        //'DATABAS_NAME3',                //دیتابیس 3
        );
foreach($databases as $dbname){
    $servername = "localhost";
    $username = "DATABASE_USER_NAME";
    $password = "DATABASE_USER_PASS";

    // Create connection
    $conn = new mysqli($servername, $username, $password, $dbname);
    // Check connection
    if ($conn->connect_error) {
        echo "Connection failed: " . $conn->connect_error.'</br>';
        continue;
    }
    
$tablearray = array(
                            'TABLE_NAME1',
                            'TABLE_NAME2',
                            'TABLE_NAME3',
                            'TABLE_NAME4',
                            'TABLE_NAME5',
);
    foreach($tablearray as $table){
        $result = $conn->query("ALTER TABLE `$dbname`.`$table` ENGINE=$to_system;");
         if($result) $results[] =  "$dbname.$table successfully changed!"; else $results[] =  "$dbname.$table has not changed!";
    }
    $conn->close();
}

    echo '<pre>';
    print_r($results);
    echo '</pre>';
?>

 

تعداد امتیازدهندگان: 13761
مسیر کوتاه: rangine.ir/node/1151