Konvertiranje Mysql baze iz MyISAM u InnoDB

 

Od verzije MySQL 5.5 InnoDB postaje default engine za stvaranje MySQL baze podataka, prije toga je bio MyISAM. InnoDB ima dosta prednosti, mogućnost transakcije, vanjskih ključeva (foreign keys), kod ažuriranja tabele ne zaključava cijelu tabelu kao MyISAM nego samo red koji se ažurira, tako da veća tabela sa više simultanih upita radi bitno brže i efikasnije. Sad, ako ažuriramo neku bazu na hostingu, kao npr. Drupal, kod instalacije je zadan engine MyISAM pa možemo prebaciti cijelu bazu u InnoDB. Pojedinačna tabela se konvertira jednostavnom naredbom:

 ALTER table tabela ENGINE=InnoDB; 

Naravno, konvertiranje svake tabele pojedinačno je dosadno, pa je bolje napraviti jednostavnu skriptu u bilo kojem jeziku koja će pokrenuti Mysql naredbu SHOW TABLES, i unutar petlje napraviti ovu konverziju. Treba li uopće naglasiti da je korisno napraviti mysql backup prije pokretanja ove radnje. Primjer za php:

// connection string, staviti svoje podatke za spajanje na bazu
$db = new mysqli($dbhost, $dbuser, $dbpass,$dbname);

// prikaz svih tabela na spojenoj bazi
$sql = $db->query("SHOW TABLES");

// konverzija u InnoDB:
while ($row = $sql->fetch_row()) {
    $sql2 = $db->query("ALTER TABLE $row[0] ENGINE=InnoDB");
    
    if($sql2 == TRUE) {
        echo "<br> Tabela $row[0] konvertirana ";
    }
    else {
        echo "Neuspjela konverzija: ".$db->error;
        exit;
    }
}