WordPress - Convert MyISAM To InnoDB
WordPress - Convert MyISAM To InnoDB
WordPress - Convert MyISAM To InnoDB
wp_posts
table were
getting blocked because MyISAM do not support row-level locking. There might be more logic to it but I am no database expert to
comment on it.
Anyway, below is how we moved our WordPress sites. You may nd process useful.
Important: Backup rst, proceed later!
wp_posts
CREATETABLEwp_posts_BAKLIKEwp_posts;
INSERTwp_posts_BAKSELECT*FROMwp_posts;
CREATETABLEwp_postmeta_BAKLIKEwp_postmeta;
INSERTwp_postmeta_BAKSELECT*FROMwp_postmeta;
and
wp_postmeta
tables.
db_wordpress.
mysqle"SELECTconcat('ALTERTABLE',TABLE_NAME,'DROPINDEX',index_name,';')
FROMinformation_Schema.STATISTICS
WHEREtable_schema='db_wordpress'
ANDindex_type='FULLTEXT'ORDERBYindex_name"|tailn+2>drop.sql
drop.sql
drop.sql
If all looks good, run following to drop all fulltext indexes in one go:
mysqlfdb_wordpress<drop.sql
MyISAM to InnoDB
Below is a syntax to change storage engine of
wp_posts
and
wp_postmeta
tables to InnoDB.
ALTERTABLEwp_postsENGINE=InnoDB;
ALTERTABLEwp_postmetaENGINE=InnoDB;
db_wordpress
mysqle"SELECTconcat('ALTERTABLE',TABLE_NAME,'ENGINE=InnoDB;')
FROMInformation_schema.TABLES
WHERETABLE_SCHEMA='db_wordpress'ANDENGINE='MyISAM'ANDTABLE_TYPE='BASETABLE'"|tailn+2>alter.sql
alter.sql
alter.sql
Troubleshooting:
Most likely you will not need to troubleshoot anything. Still, if you get following error:
ERROR 1071 (42000) at line 1: Speci ed key was too long; max key length is 767 bytes InnoDB doesnt allow primary key wider than 767
bytes
Then you need to change primary key column for that mysql table. Most likely you did not speci ed any primary key and by default
InnoDB picks rst column as primary-key. You can add an auto increment column and set it as primary-key and then retry running
MyISAM to InnoDB conversion.