viernes, 19 de febrero de 2016

Convertir desde InnoDB a MyISAM

Debido al alto uso de RAM me vi obligado a reducir a un solo motor de MySQL, pero al intentar lo que muchos usuarios han hecho, me arroja:
Cannot delete or update a parent row: a foreign key constraint fails
Esto es porque MyISAM no soporta foreign keys. Existen soluciones para una sola base de datos, pero modifiqué los scripts para todas.

Acá eliminaré todas las foreign keys:
DELETE_SCRIPT=Delete_Foreign_Keys.sql
mysql -p -AN -e"SELECT concat('USE ',table_schema ,'; ALTER TABLE ',TABLE_NAME,' DROP FOREIGN KEY ',constraint_name,';') FROM information_schema.table_constraints WHERE constraint_type='FOREIGN KEY';" >  ${DELETE_SCRIPT}
mysql -p -A < ${DELETE_SCRIPT}
Y acá migro todas las tablas a MyISAM:


CONVERT_SCRIPT=Convert_InnoDB_to_MyISAM.sql
mysql -p -AN -e"SELECT CONCAT('ALTER TABLE ',table_schema,'.',table_name,' ENGINE=MyISAM;') FROM information_schema.tables WHERE engine ='InnoDB';" > ${CONVERT_SCRIPT}
mysql -p -A < ${CONVERT_SCRIPT}

* Nota: Estoy ejecutando desde root, chequear comillas, que el blog las cambia