✅ Noticias, temas, complementos de WEB y WordPress. Aquí compartimos consejos y las mejores soluciones para sitios web.

Una herramienta de línea de comandos PHP simple para convertir tablas MySQL de MyISAM a InnoDB en una base de datos especificada

25

El motor de base de datos MySQL MyISAM se depreció en la última versión desde 5.5.1. MyISAM es el bloqueo de tablas, mientras que InnoDB (ahora el motor de base de datos predeterminado para MySQL desde 5.5.1) emplea el balanceo de nivel de fila. InnoDB debería ser el motor de base de datos preferido y recomendado si desea crear nuevas aplicaciones/tablas. Una deficiencia de las tablas MyISAM es que no admiten transacciones. Tanto InnoDB como MyISAM admiten el índice de búsqueda de texto completo.

Puede usar ALTER TABLE table ENGINE=INNODB para cambiar una tabla a InnoDB, pero si tiene muchas tablas en una base de datos, por ejemplo, WordPress, será tedioso buscar tablas MyISAM y convertirlas una por una.

Afortunadamente, el siguiente PHP se puede ejecutar en la línea de comandos y toma parámetros de nombres de bases de datos, que puede pasar a muchas bases de datos, y buscará esas tablas en estas bases de datos que actualmente son el motor MyISAM y emitirá un comando de ALTER TABLE para cada uno de ellos.

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

Ejemplo de uso:

# 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

Hay algunas bases de datos que pertenecen a MySQL, por ejemplo, sys, mysql; estas tablas tienen tipos de motor, como memoria, csv; no las convierta a InnoDB.

mysql

También te puede interesar: Gadget PHP para convertir tablas MyISAM en MySQL a InnoDB

Fuente de grabación: helloacm.com

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More