9

CiviCRM 4.7.10 --- WordPress 4.6

The following warning message appeared in CiviCRM System Status:

Your database is configured to use the MyISAM database engine. CiviCRM requires InnoDB. You will need to convert any MyISAM tables in your database to InnoDB. Using MyISAM tables will result in data integrity issues.

This message appeared 5 days after upgrading to 4.7.10 from 4.7.8. The table with the MyISAM engine was: civicrm_task_action_temp%. I corrected it in MySQL using:

ALTER TABLE civicrm_task_action_temp% ENGINE=InnoDB;

On inspecting the code, I found the following in civicrm\civicrm\CRM\Contact\Form\Task.php on line 145

$sql = "CREATE TABLE {$form->_componentTable} ( contact_id int primary key) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci";

and civicrm\civicrm\CRM\Export\BAO\Export.php on line 1494

CREATE TABLE {$exportTempTable} ( ... ) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

All other MyISAM tables are defined as TEMPORARY.

Prior to performing the upgrade, I cleaned the caches using CiviCRM/System Settings/Cleanup Caches and Update Paths. Hence the reason civicrm_task_action_temp% was recreated.

Hopefully, this fix can be included in the next update.

6
  • It also happened to me after 4.7.10 upgrade on Joomla! 3.6.2. Ty.
    – diegov
    Commented Aug 18, 2016 at 5:46
  • There's an old issue in JIRA that looks like it's related to this. I've seen this error pop up recently, but I'm trying to remember if I was working on a 4.7 site or a 4.6 one. It might be worth reopening the issue or creating an new one and flagging it related. issues.civicrm.org/jira/browse/CRM-15601 Commented Aug 19, 2016 at 11:48
  • Happened on upgrade to 4.7.10 with Drupal as well.
    – Laryn
    Commented Aug 23, 2016 at 16:58
  • Also on upgrade to 4.7.11 with Joomla.
    – Jern
    Commented Aug 24, 2016 at 8:04
  • I mean 4.7.10 of course
    – Jern
    Commented Aug 24, 2016 at 8:16

1 Answer 1

2

Based on Dan's pointer to https://issues.civicrm.org/jira/browse/CRM-15601 , it seems like this used to work. It probably regressed with https://github.com/civicrm/civicrm-core/commit/3fa9688a5 which introduced a very subtle change to how it ignores temp tables. Compare:

  • (Old) strpos($dao->Name, '_temp') !== FALSE
  • (New) TABLE_NAME NOT LIKE '%temp'

Proposed fix: https://github.com/civicrm/civicrm-core/pull/8930

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.