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
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?
Para cambiar todas las tablas de BD:
SELECT CONCAT(‘ALTER TABLE ‘, tbl.TABLE_SCHEMA, ‘.’, tbl.TABLE_NAME, ‘ ENGINE=INNODB;’) FROM information_schema.TABLES tbl WHERE tbl.TABLE_SCHEMA = ‘tu_base_de_datos’
esto en un Query genera un listado y el listado lo ejecutas