New command in dbstructure.php to convert all tables from MyISAM to InnoDB
This commit is contained in:
parent
0f67934e05
commit
aaa558f7ea
|
@ -7,6 +7,31 @@ require_once("include/text.php");
|
||||||
|
|
||||||
define('NEW_UPDATE_ROUTINE_VERSION', 1170);
|
define('NEW_UPDATE_ROUTINE_VERSION', 1170);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Converts all tables from MyISAM to InnoDB
|
||||||
|
*/
|
||||||
|
function convert_to_innodb() {
|
||||||
|
global $db;
|
||||||
|
|
||||||
|
$r = q("SELECT `TABLE_NAME` FROM `information_schema`.`tables` WHERE `engine` = 'MyISAM' AND `table_schema` = '%s'",
|
||||||
|
dbesc($db->database_name()));
|
||||||
|
|
||||||
|
if (!dbm::is_result($r)) {
|
||||||
|
echo t('There are no tables on MyISAM.')."\n";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($r AS $table) {
|
||||||
|
$sql = sprintf("ALTER TABLE `%s` engine=InnoDB;", dbesc($table['TABLE_NAME']));
|
||||||
|
echo $sql."\n";
|
||||||
|
|
||||||
|
$result = @$db->q($sql);
|
||||||
|
if (!dbm::is_result($result)) {
|
||||||
|
print_update_error($db, $sql);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* send the email and do what is needed to do on update fails
|
* send the email and do what is needed to do on update fails
|
||||||
*
|
*
|
||||||
|
@ -95,10 +120,6 @@ function table_structure($table) {
|
||||||
|
|
||||||
if (dbm::is_result($indexes))
|
if (dbm::is_result($indexes))
|
||||||
foreach ($indexes AS $index) {
|
foreach ($indexes AS $index) {
|
||||||
if ($index["Index_type"] == "FULLTEXT") {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($index['Key_name'] != 'PRIMARY' && $index['Non_unique'] == '0' && !isset($indexdata[$index["Key_name"]])) {
|
if ($index['Key_name'] != 'PRIMARY' && $index['Non_unique'] == '0' && !isset($indexdata[$index["Key_name"]])) {
|
||||||
$indexdata[$index["Key_name"]] = array('UNIQUE');
|
$indexdata[$index["Key_name"]] = array('UNIQUE');
|
||||||
}
|
}
|
||||||
|
@ -1730,6 +1751,9 @@ function dbstructure_run(&$argv, &$argc) {
|
||||||
case "dumpsql":
|
case "dumpsql":
|
||||||
print_structure(db_definition());
|
print_structure(db_definition());
|
||||||
return;
|
return;
|
||||||
|
case "innodb":
|
||||||
|
convert_to_innodb();
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1741,6 +1765,7 @@ function dbstructure_run(&$argv, &$argc) {
|
||||||
echo "dryrun show database update schema queries without running them\n";
|
echo "dryrun show database update schema queries without running them\n";
|
||||||
echo "update update database schema\n";
|
echo "update update database schema\n";
|
||||||
echo "dumpsql dump database schema\n";
|
echo "dumpsql dump database schema\n";
|
||||||
|
echo "innodb convert all tables from MyISAM to InnoDB\n";
|
||||||
return;
|
return;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -447,7 +447,7 @@ function admin_page_summary(App $a) {
|
||||||
$warningtext = array();
|
$warningtext = array();
|
||||||
if (dbm::is_result($r)) {
|
if (dbm::is_result($r)) {
|
||||||
$showwarning = true;
|
$showwarning = true;
|
||||||
$warningtext[] = sprintf(t('Your DB still runs with MyISAM tables. You should change the engine type to InnoDB. As Friendica will use InnoDB only features in the future, you should change this! See <a href="%s">here</a> for a guide that may be helpful converting the table engines. You may also use the <tt>convert_innodb.sql</tt> in the <tt>/util</tt> directory of your Friendica installation.<br />'), 'https://dev.mysql.com/doc/refman/5.7/en/converting-tables-to-innodb.html');
|
$warningtext[] = sprintf(t('Your DB still runs with MyISAM tables. You should change the engine type to InnoDB. As Friendica will use InnoDB only features in the future, you should change this! See <a href="%s">here</a> for a guide that may be helpful converting the table engines. You may also use the command <tt>php include/dbstructure.php innodb</tt> of your Friendica installation for an automatic conversion.<br />'), 'https://dev.mysql.com/doc/refman/5.7/en/converting-tables-to-innodb.html');
|
||||||
}
|
}
|
||||||
// MySQL >= 5.7.4 doesn't support the IGNORE keyword in ALTER TABLE statements
|
// MySQL >= 5.7.4 doesn't support the IGNORE keyword in ALTER TABLE statements
|
||||||
if ((version_compare($db->server_info(), '5.7.4') >= 0) AND
|
if ((version_compare($db->server_info(), '5.7.4') >= 0) AND
|
||||||
|
|
Loading…
Reference in a new issue