Saturday, October 8, 2016

Convert MyISAM to InnoDB Drupal

Convert MyISAM to InnoDB Drupal


Convert Drupal MySQL engine from MyISAM to InnoDB using Drush:
drush updatedb -y && drush sql-query "SELECT ENGINE AS Engine Before: FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME=node;" && ($(drush sql-connect | sed -e s/^mysql/mysqldump --no-data/ | sed -e s/--database=/--databases /) | sed s/ENGINE=MyISAM/ENGINE=InnoDB/ | sed s/varchar(256)/varchar(255)/ > ~/schema.sql) && drush sql-dump -q --data-only --result-file=~/data.sql && drush sql-dump -y --result-file=~/backup.sql && drush sql-drop -y && ($(drush sql-connect) < ~/schema.sql) && ($(drush sql-connect) < ~/data.sql) && rm ~/schema.sql && rm ~/data.sql && drush sql-query "SELECT ENGINE AS Engine After: FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME=node;" && drush cc all && echo "Remember to delete ~/backup.sql after verifying the site still works."

Credits:
  • http://stackoverflow.com/a/23393131
  • http://stackoverflow.com/a/16820166

P.S. This is safer and faster and causes much less strain on your database server than a lot of ALTER statements on the live database (especially for cluster solutions, like Percona)


Go to link download