MySQL

Como cambiar de MyISAM a INNODB – MySQL Tips

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);
}

view raw

alterEngine.php

hosted with ❤ by GitHub

Mas información: http://dev.mysql.com/doc/refman/5.0/es/converting-tables-to-innodb.html http://es.wikipedia.org/wiki/InnoDB

3 comentarios en “Como cambiar de MyISAM a INNODB – MySQL Tips”

  1. 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,

  2. 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?

  3. 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

Deja un comentario