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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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