From 267aa870d32fe7e104052f10eba019690a56b3d3 Mon Sep 17 00:00:00 2001 From: Leon Stringer Date: Wed, 19 May 2021 08:27:19 +0100 Subject: [PATCH] MDL-71476 core_cli: Remove MyISAM migration Remove support for migrating MySQL databases using the old MyISAM storage engine to the InnoDB storage engine. MyISAM was supported up to Moodle 2.8 (dropped in 2.9: MDL-46064). Beyond Moodle 3.3 -- the highest version that can upgrade from 2.8 -- this functionality was no longer applicable. --- admin/cli/mysql_engine.php | 180 ------------------------------------- 1 file changed, 180 deletions(-) delete mode 100644 admin/cli/mysql_engine.php diff --git a/admin/cli/mysql_engine.php b/admin/cli/mysql_engine.php deleted file mode 100644 index d392b0b6f71..00000000000 --- a/admin/cli/mysql_engine.php +++ /dev/null @@ -1,180 +0,0 @@ -. - -/** - * MySQL engine conversion tool. - * - * @package core - * @subpackage cli - * @copyright 2009 Petr Skoda (http://skodak.org) - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ - -define('CLI_SCRIPT', true); - -require(__DIR__.'/../../config.php'); -require_once($CFG->libdir.'/clilib.php'); // cli only functions - -if ($DB->get_dbfamily() !== 'mysql') { - cli_error('This function is designed for MySQL databases only!'); -} - -// now get cli options -list($options, $unrecognized) = cli_get_params(array('help'=>false, 'list'=>false, 'engine'=>false, 'available'=>false), - array('h'=>'help', 'l'=>'list', 'a'=>'available')); - -if ($unrecognized) { - $unrecognized = implode("\n ", $unrecognized); - cli_error(get_string('cliunknowoption', 'admin', $unrecognized)); -} - -$help = -"MySQL engine conversions script. - -It is recommended to stop the web server before the conversion. -Do not use MyISAM if possible, because it is not ACID compliant -and does not support transactions. - -Options: ---engine=ENGINE Convert MySQL tables to different engine --l, --list Show table information --a, --available Show list of available engines --h, --help Print out this help - -Example: -\$sudo -u www-data /usr/bin/php admin/cli/mysql_engine.php --engine=InnoDB -"; - -if (!empty($options['engine'])) { - $engines = mysql_get_engines(); - $engine = clean_param($options['engine'], PARAM_ALPHA); - if (!isset($engines[strtoupper($engine)])) { - cli_error("Error: engine '$engine' is not available on this server!"); - } - - echo "Converting tables to '$engine' for $CFG->wwwroot:\n"; - $prefix = $DB->get_prefix(); - $prefix = str_replace('_', '\\_', $prefix); - $sql = "SHOW TABLE STATUS WHERE Name LIKE BINARY '$prefix%'"; - $rs = $DB->get_recordset_sql($sql); - $converted = 0; - $skipped = 0; - $errors = 0; - foreach ($rs as $table) { - if (strtoupper($table->engine) === strtoupper($engine)) { - $newengine = mysql_get_table_engine($table->name); - echo str_pad($table->name, 40). " - NO CONVERSION NEEDED ($newengine)\n"; - $skipped++; - continue; - } - echo str_pad($table->name, 40). " - "; - - try { - $DB->change_database_structure("ALTER TABLE {$table->name} ENGINE = $engine"); - $newengine = mysql_get_table_engine($table->name); - if (strtoupper($newengine) !== strtoupper($engine)) { - echo "ERROR ($newengine)\n"; - $errors++; - continue; - } - echo "DONE ($newengine)\n"; - $converted++; - } catch (moodle_exception $e) { - echo $e->getMessage()."\n"; - $errors++; - continue; - } - } - $rs->close(); - echo "Converted: $converted, skipped: $skipped, errors: $errors\n"; - exit(0); // success - -} else if (!empty($options['list'])) { - echo "List of tables for $CFG->wwwroot:\n"; - $prefix = $DB->get_prefix(); - $prefix = str_replace('_', '\\_', $prefix); - $sql = "SHOW TABLE STATUS WHERE Name LIKE BINARY '$prefix%'"; - $rs = $DB->get_recordset_sql($sql); - $counts = array(); - foreach ($rs as $table) { - if (isset($counts[$table->engine])) { - $counts[$table->engine]++; - } else { - $counts[$table->engine] = 1; - } - echo str_pad($table->engine, 10); - echo $table->name . "\n"; - } - $rs->close(); - - echo "\n"; - echo "Table engines summary for $CFG->wwwroot:\n"; - foreach ($counts as $engine => $count) { - echo "$engine: $count\n"; - } - exit(0); // success - -} else if (!empty($options['available'])) { - echo "List of available MySQL engines for $CFG->wwwroot:\n"; - $engines = mysql_get_engines(); - foreach ($engines as $engine) { - echo " $engine\n"; - } - die; - -} else { - echo $help; - die; -} - - - -// ========== Some functions ============== - -function mysql_get_engines() { - global $DB; - - $sql = "SHOW Engines"; - $rs = $DB->get_recordset_sql($sql); - $engines = array(); - foreach ($rs as $engine) { - if (strtoupper($engine->support) !== 'YES' and strtoupper($engine->support) !== 'DEFAULT') { - continue; - } - $engines[strtoupper($engine->engine)] = $engine->engine; - if (strtoupper($engine->support) === 'DEFAULT') { - $engines[strtoupper($engine->engine)] .= ' (default)'; - } - } - $rs->close(); - - return $engines; -} - -function mysql_get_table_engine($tablename) { - global $DB; - - $engine = null; - $sql = "SHOW TABLE STATUS WHERE Name = '$tablename'"; // no special chars expected here - $rs = $DB->get_recordset_sql($sql); - if ($rs->valid()) { - $record = $rs->current(); - $engine = $record->engine; - } - $rs->close(); - return $engine; -}