Ett enkelt PHP kommandoradsverktyg för att konvertera MySQL-tabeller från MyISAM till InnoDB i specificerad databas
MySQL MyISAM-databasmotorn har avskrivits i den senaste versionen sedan 5.5.1. MyISAM är tabelllåsande medan InnoDB (nu standarddatabasmotorn för MySQL sedan 5.5.1) använder gungning på radnivå. InnoDB bör vara den föredragna och rekommenderade databasmotorn om du vill skapa nya applikationer/tabeller. En brist med MyISAM-tabeller är att de inte stöder transaktioner. Både InnoDB och MyISAM stöder Full Text Search Index.
Du kan använda ALTER TABLE-tabellen ENGINE=INNODB för att ändra en tabell till InnoDB men om du har många tabeller i en databas, t.ex. WordPress, blir det tråkigt att leta efter MyISAM-tabeller och konvertera en efter en.
Lyckligtvis kan följande PHP köras på kommandoraden, och det tar parametrar för databasnamn – som du kan skicka många databaser, och det kommer att leta efter de tabellerna i dessa databaser som för närvarande är MyISAM-motor och utfärda kommandot ALTER TABLE för varje.
<?php
// <a class="vglnk" target="_blank" href="https://helloacm.com/a-simple-php-command-line-tool-to-convert-mysql-tables-from-myisam-to-innodb-in-specified-database/" rel="nofollow"><span>https</span><span>://</span><span>helloacm</span><span>.</span><span>com</span><span>/</span><span>a</span><span>-</span><span>simple</span><span>-</span><span>php</span><span>-</span><span>command</span><span>-</span><span>line</span><span>-</span><span>tool</span><span>-</span><span>to</span><span>-</span><span>convert</span><span>-</span><span>mysql</span><span>-</span><span>tables</span><span>-</span><span>from</span><span>-</span><span>myisam</span><span>-</span><span>to</span><span>-</span><span>innodb</span><span>-</span><span>in</span><span>-</span><span>specified</span><span>-</span><span>database</span><span>/</span></a>
function ConvertAllTablesToInnoDB($database) {
define("DB_HOST", "localhost");
define("DB_USER", "root");
define("DB_PASSWORD", "password");
$conn = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, $database);
if (!$conn) {
echo "Error: Unable to connect to MySQL.". PHP_EOL;
echo "Debugging errno: ". mysqli_connect_errno(). PHP_EOL;
echo "Debugging error: ". mysqli_connect_error(). PHP_EOL;
exit;
}
$sql = "SELECT TABLE_NAME FROM
INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = '$database'
AND ENGINE = 'MyISAM'
";
$rs = mysqli_query($conn, $sql);
while ($row = mysqli_fetch_array($rs)) {
$tbl = $row[0];
$sql = "ALTER TABLE `$tbl` ENGINE=INNODB";
echo $sql. "n";
mysqli_query($conn, $sql);
}
}
if ($argc < 2) {
exit( "Usage: php $argv[0] database1 database2 ...n" );
}
for ($i = 1; $i < $argc; ++ $i) {
echo "ConvertAllTablesToInnoDB ". $argv[$i]. "... n";
ConvertAllTablesToInnoDB($argv[$i]);
}
Exempel på användning:
# php convert_to_innodb.php wordpress
ConvertAllTablesToInnoDB wordpress...
ALTER TABLE `wp_commentmeta` ENGINE=INNODB
ALTER TABLE `wp_comments` ENGINE=INNODB
ALTER TABLE `wp_icl_string_translations` ENGINE=INNODB
ALTER TABLE `wp_imagify_files` ENGINE=INNODB
ALTER TABLE `wp_imagify_folders` ENGINE=INNODB
ALTER TABLE `wp_itsec_lockouts` ENGINE=INNODB
ALTER TABLE `wp_itsec_log` ENGINE=INNODB
ALTER TABLE `wp_itsec_temp` ENGINE=INNODB
ALTER TABLE `wp_links` ENGINE=INNODB
ALTER TABLE `wp_options` ENGINE=INNODB
ALTER TABLE `wp_postmeta` ENGINE=INNODB
ALTER TABLE `wp_posts` ENGINE=INNODB
ALTER TABLE `wp_term_relationships` ENGINE=INNODB
ALTER TABLE `wp_term_taxonomy` ENGINE=INNODB
ALTER TABLE `wp_termmeta` ENGINE=INNODB
ALTER TABLE `wp_terms` ENGINE=INNODB
ALTER TABLE `wp_usermeta` ENGINE=INNODB
ALTER TABLE `wp_users` ENGINE=INNODB
ALTER TABLE `wp_wc_download_log` ENGINE=INNODB
ALTER TABLE `wp_wc_webhooks` ENGINE=INNODB
ALTER TABLE `wp_woocommerce_api_keys` ENGINE=INNODB
ALTER TABLE `wp_woocommerce_attribute_taxonomies` ENGINE=INNODB
ALTER TABLE `wp_woocommerce_downloadable_product_permissions` ENGINE=INNODB
ALTER TABLE `wp_woocommerce_log` ENGINE=INNODB
ALTER TABLE `wp_woocommerce_order_itemmeta` ENGINE=INNODB
ALTER TABLE `wp_woocommerce_order_items` ENGINE=INNODB
ALTER TABLE `wp_woocommerce_payment_tokenmeta` ENGINE=INNODB
ALTER TABLE `wp_woocommerce_payment_tokens` ENGINE=INNODB
ALTER TABLE `wp_woocommerce_sessions` ENGINE=INNODB
ALTER TABLE `wp_woocommerce_shipping_zone_locations` ENGINE=INNODB
ALTER TABLE `wp_woocommerce_shipping_zone_methods` ENGINE=INNODB
ALTER TABLE `wp_woocommerce_shipping_zones` ENGINE=INNODB
ALTER TABLE `wp_woocommerce_tax_rate_locations` ENGINE=INNODB
ALTER TABLE `wp_woocommerce_tax_rates` ENGINE=INNODB
ALTER TABLE `wp_wpio_images` ENGINE=INNODB
ALTER TABLE `wp_yith_ywpar_points_log` ENGINE=INNODB
Det finns några databaser som tillhör MySQL t.ex. sys, mysql – dessa tabeller har motortyper som minne, csv – vänligen konvertera dem inte till InnoDB.
MySQL
Du kanske också gillar: PHP-gadget för att konvertera MyISAM-tabeller i MySQL till InnoDB