✅ WEB і WordPress новини, теми, плагіни. Тут ми ділимося порадами і кращими рішеннями для сайтів.

Простий інструмент командного рядка PHP для перетворення таблиць MySQL із MyISAM на InnoDB у вказаній базі даних

22

Механізм баз даних MySQL MyISAM застарів в останній версії з 5.5.1. MyISAM блокує таблицю, тоді як InnoDB (тепер механізм бази даних за замовчуванням для MySQL з 5.5.1) використовує розгойдування на рівні рядків. Якщо ви хочете створювати нові додатки/таблиці, бажаним і рекомендованим двигуном бази даних має бути InnoDB. Одним із недоліків таблиць MyISAM є те, що вони не підтримують транзакції. І InnoDB, і MyISAM підтримують індекс повного текстового пошуку.

Ви можете використати ALTER TABLE table ENGINE=INNODB, щоб змінити таблицю на InnoDB, але якщо у вас є багато таблиць у базі даних, наприклад WordPress, це буде втомливо шукати таблиці MyISAM і перетворювати одну за одною.

На щастя, наступний PHP можна запустити в командному рядку, і він приймає параметри імен баз даних, які ви можете передати багатьом базам даних, і він шукатиме ті таблиці в цих базах даних, які наразі є системою MyISAM, і видасть команду ALTER TABLE для кожен з них.

<?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]);
}

Приклад використання:

# 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

Є деякі бази даних, які належать до MySQL, наприклад sys, mysql – ці таблиці мають такі типи механізмів, як пам’ять, csv – будь ласка, не перетворюйте їх на InnoDB.

MySQL

Вам також може сподобатися: гаджет PHP для перетворення таблиць MyISAM у MySQL на InnoDB

Джерело запису: helloacm.com

Цей веб -сайт використовує файли cookie, щоб покращити ваш досвід. Ми припустимо, що з цим все гаразд, але ви можете відмовитися, якщо захочете. Прийняти Читати далі