Antes en MySQL el mecanismo de almacenamiento predeterminado esta MyISAM, hasta que cambio a INNODB. ¿Cual es mejor? ¿Debería migrar mis bases de datos a INNODB? a la primera pregunta diría que es bastante mejor INNODB y si deberíamos o no migrar las bases de datos, pues en casos será conveniente y en otros no, pero si creamos bases de datos desde cero es conveniente establecer el mecanismo como INNODB.
Como cambiar de MyISAM a INNODB
ALTER TABLE nombre_tabla ENGINE=INNODB;
No existe un comando que nos permita cambiar todas las tablas de una base de datos de MyISAM a INNODB, y para hacerlo tenemos que cambiar una a una.
Para facilitar las cosas siempre podemos crearnos un script que acceda a nuestra base de datos, tenga permisos ALTER y hacerlo todo de una vez.
He desarrollado un script en PHP que lo hace
<?php | |
/** | |
* Created by Ruben Lacasa Mas | |
* User: Ruben Lacasa Mas <ruben@rubenlacasa.es> | |
* Date: 18/10/13 | |
* Time: 12:18 | |
*/ | |
$dbhost = 'hostname'; | |
$dbname = 'dbname'; | |
$dbuser = 'dbuser'; | |
$dbpass = 'dbpassword'; | |
$dsn = 'mysql:dbname='.$dbname.';host='.$dbhost; | |
try { | |
$dbh = new PDO($dsn, $dbuser, $dbpass); | |
} catch (PDOException $e) { | |
echo 'Connection failed: ' . $e->getMessage(); | |
} | |
$sql = "SHOW TABLES"; | |
$query = $dbh->prepare($sql); | |
$query->execute(); | |
$tables = $query->fetchAll(PDO::FETCH_CLASS); | |
foreach ($tables as $table) { | |
$sqlAlter = "ALTER TABLE ".$table->Tables_in_dbname." ENGINE=INNODB;"; | |
$dbh->exec($sqlAlter); | |
} |
Mas información: http://dev.mysql.com/doc/refman/5.0/es/converting-tables-to-innodb.html http://es.wikipedia.org/wiki/InnoDB