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
Gracias por compartir este script, lo probaré en local a ver que tal.
aunque yo lo haré al revés para cambiar de imnodb a mysam, así poder usar un mysqlcheck con autorepair y optimize,
has brindado muy buena información. Quisiera decir que además estoy buscando quien sepa como hacer que por defecto aparezca un cotejamiento distinto al que ofrece phpmyadmin y no he encontrado ni un puto comentario al respecto, será que a nadie le importa cada vez que creamos una base de datos haya que cambiar a mano siempre esa mierda?