Come convertire tutte le tabelle da MyISAM in InnoDB?


264

So di poter emettere individualmente una tabella alter per cambiare la memoria della tabella da MyISAM a InnoDB.

Mi chiedo se c'è un modo per cambiarli rapidamente in InnoDB?


1
Suggerimenti sulla conversione.
Rick James,

Risposte:


173
<?php
    // connect your database here first 
    // 

    // Actual code starts here 

    $sql = "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
        WHERE TABLE_SCHEMA = 'your_database_name' 
        AND ENGINE = 'MyISAM'";

    $rs = mysql_query($sql);

    while($row = mysql_fetch_array($rs))
    {
        $tbl = $row[0];
        $sql = "ALTER TABLE `$tbl` ENGINE=INNODB";
        mysql_query($sql);
    }
?>

5
Probabilmente sarebbe meglio limitare questo al database su cui ti stai concentrando. Aggiungi un "AND TABLE_SCHEMA = 'dbname', altrimenti questo può / cambierà anche tutte le tabelle MySQL di Internet in innodb (quando alcune di esse dovrebbero essere memoria)
Noodles,

7
L' mysql_*interfaccia di PHP è obsoleta e rimossa dalla versione 7. Non utilizzare questo codice così com'è.
Rick James,

4
@GajendraBang - Sì, la risposta è valida quando presentata. Ma per i nuovi arrivati, non è più valido. Il mio intento era di mettere in guardia dall'usarlo così com'è .
Rick James,

1
La domanda non menziona affatto PHP
phil294

1
In che modo la modifica più recente non viene contrassegnata? La parte MySQL è una copia diretta della risposta di Will Jones. Guarda ogni cronologia delle modifiche per scoprire che la risposta di Will è apparsa nel 2013 mentre questa risposta è apparsa nel 2019. Di conseguenza, l'integrità di questa domanda è stata compromessa.
rmutalik,

549

Eseguire questa istruzione SQL (nel client MySQL, phpMyAdmin o ovunque) per recuperare tutte le tabelle MyISAM nel database.

Sostituisci il valore della name_of_your_dbvariabile con il nome del tuo database.

SET @DATABASE_NAME = 'name_of_your_db';

SELECT  CONCAT('ALTER TABLE `', table_name, '` ENGINE=InnoDB;') AS sql_statements
FROM    information_schema.tables AS tb
WHERE   table_schema = @DATABASE_NAME
AND     `ENGINE` = 'MyISAM'
AND     `TABLE_TYPE` = 'BASE TABLE'
ORDER BY table_name DESC;

Quindi, copia l'output ed eseguilo come una nuova query SQL.


4
Funzionava bene! L'ho inserito in un esempio di shell script qui: shrubbery.mynetgear.net/c/display/W/…
Joshua Davis,

4
"# 1267 mix illegale di regole di confronto ..." Ricevo questo errore, non funziona
Rápli András

1
Solo per curiosità, che senso ha l'ordinamento discendente esplicito? ( ORDER BY table_name DESC)
rinogo

12
Se hai a che fare con più database e non vuoi cambiare il database ogni volta, CONCAT('ALTER TABLE ', table_name, ' ENGINE=InnoDB;')passa aCONCAT('ALTER TABLE ',@DATABASE_NAME,'.', table_name, ' ENGINE=InnoDB;')
ub3rst4r

1
Se si desidera ottenere le istruzioni per tutti i database (tranne i database di sistema MySQL): SELECT CONCAT('ALTER TABLE `', table_schema, '`.`', table_name, '` ENGINE=InnoDB;') AS sql_statements FROM information_schema.tables WHERE table_schema NOT IN ('information_schema', 'performance_schema', 'mysql') AND engine = 'MyISAM' AND table_type = 'BASE TABLE' ORDER BY table_schema,table_name
dr fu manchu

61
SELECT CONCAT('ALTER TABLE ',TABLE_NAME,' ENGINE=InnoDB;') 
FROM INFORMATION_SCHEMA.TABLES
WHERE ENGINE='MyISAM'
AND table_schema = 'mydatabase';

Funziona come un fascino.

Questo ti darà un elenco di tutte le tabelle con le query di modifica che puoi eseguire in un batch


5
Dopo averlo eseguito, devi prima eseguire la seguente query: USE databasename; Quindi è possibile utilizzare le query fornite dallo script sopra.
gijs007,

Come si esegue un batch?
Marc Alexander,

La query sopra ti fornirà query di modifica della tabella. selezionali tutti ed eseguili insieme. o dividerli in gruppi di 50 query ed eseguirli se ci sono troppe tabelle nel set di risultati
Omkar Kulkarni,

2
Funziona anche sul 2018 e su Percona Cluster. Se lo usi da PHPMyAdmin, otterrai solo circa 20 nomi, quindi "..." o un simbolo di impaginazione >>. Ciò significa che devi fare clic e continuare a copiare tutte le pagine successive in modo da non perdere nessuna tabella. Se lo dimentichi, puoi applicare nuovamente la query sopra in modo sicuro e ti fornirà le successive tabelle MyISAM da convertire.
Dario Fumagalli,

23

Negli script seguenti, sostituisci <nomeutente>, <password> e <schema> con i tuoi dati specifici.

Per mostrare le istruzioni che è possibile copiare e incollare in una sessione client mysql digitare quanto segue:

echo 'SHOW TABLES;' \
 | mysql -u <username> --password=<password> -D <schema> \
 | awk '!/^Tables_in_/ {print "ALTER TABLE `"$0"` ENGINE = InnoDB;"}' \
 | column -t \

Per eseguire semplicemente la modifica, utilizzare questo:

echo 'SHOW TABLES;' \
 | mysql -u <username> --password=<password> -D <schema> \
 | awk '!/^Tables_in_/ {print "ALTER TABLE `"$0"` ENGINE = InnoDB;"}' \
 | column -t \
 | mysql -u <username> --password=<password> -D <schema>

CREDITO: Questa è una variante di ciò che è stato delineato in questo articolo .


23

Una linea:

 mysql -u root -p dbName -e 
 "show table status where Engine='MyISAM';" | awk 
 'NR>1 {print "ALTER TABLE "$1" ENGINE = InnoDB;"}'  | 
  mysql -u root -p dbName

1
La risposta MIGLIORE e INTELLIGENTE!
biniam,

Quando eseguo questo in uno script bash, interpreta $ 1 come una variabile di script bash sovrascrivendo la definizione NR. Qualche modo per aggirare questo?
Lavora per vivere il

@WorksforaLiving racchiude i backtick "$1"in questo modo: `"$1"`simile a quello che c'è nella mia risposta.
Vijay Varadan,

20

Usalo come query sql nel tuo phpMyAdmin

SELECT CONCAT('ALTER TABLE ',table_schema,'.',table_name,' engine=InnoDB;') 
FROM information_schema.tables 
WHERE engine = 'MyISAM';

3
Questo non sembra effettivamente convertire le tabelle in InnoDB.
Charlie Schliesser,

3
Questo genera uno script che viene quindi eseguito per convertire le tabelle: sono due passaggi. Tenta di convertire le tabelle INFORMATION_SCHEMA, tuttavia, è una cosa negativa. È necessario limitarlo al database corretto.
Brilliand,

1
Dovrai filtrare le nostre tabelle mysql interne - secondo i documenti "Non convertire le tabelle di sistema MySQL nel database mysql (come utente o host) nel tipo InnoDB. Questa è un'operazione non supportata. Le tabelle di sistema devono essere sempre del tipo MyISAM. " link
eug

Senza modificare per incorporare il commento di @eug in questa risposta, penso che meriti un voto negativo, sebbene sia altrimenti elegante come una qualsiasi delle varianti di questa pagina.
MC0e,

Hmm. Anche @ charlie-s è corretto e questo non produce SQL funzionante. Mi sembra giustificato un voto negativo.
MC0e,

18

È possibile eseguire questa istruzione nello strumento da riga di comando mysql:

echo "SELECT concat('ALTER TABLE `',TABLE_NAME,'` ENGINE=InnoDB;')
FROM Information_schema.TABLES 
WHERE ENGINE != 'InnoDB' AND TABLE_TYPE='BASE TABLE' 
AND TABLE_SCHEMA='name-of-database'" | mysql > convert.sql

Potrebbe essere necessario specificare nome utente e password utilizzando: mysql -u username -p Il risultato è uno script sql che è possibile reindirizzare a mysql:

mysql name-of-database < convert.sql

Sostituisci "nome-database" nell'istruzione e nella riga di comando sopra.


@itsraja, "echo" è un comando supportato sia da sh su linux / unix che da cmd su sistemi Microsoft, il risultato viene reindirizzato come input allo strumento mysql.
Hendrik Brummermann,

2
giusto. Ma hai menzionato come "strumento da riga di comando mysql"
itsraja,

1
Inoltre, echo "SELECT concat (concat ('ALTER TRABLE', TABLE_NAME), 'ENGINE = InnoDB;') DA TABLES DOVE ENGINE! = 'InnoDB' AND TABLE_TYPE = 'BASE TABLE' AND TABLE_SCHEMA = 'testinno'" | mysql -u root --sock = / opt / lampp / var / mysql / mysql.sock --database = testinno> convert.sql ERRORE 1146 (42S02) alla riga 1: la tabella 'testinno.TABLES' non esiste
itsraja

Ho inserito questo in uno script di shell di esempio qui: shrubbery.mynetgear.net/c/display/W/…
Joshua Davis,

1
Come possiamo sfuggire correttamente all'istruzione sql come stringa? Come è ora, ottengo-bash: ,TABLE_NAME,: command not found
arjan il

10

È molto semplice, ci sono solo DUE passaggi, basta copiare e incollare:

passo 1.

  SET @DATABASE_NAME = 'name_of_your_db';
  SELECT  CONCAT('ALTER TABLE `', table_name, '` ENGINE=InnoDB;') AS  sql_statements FROM information_schema.tables AS tb WHERE   table_schema = @DATABASE_NAME AND `ENGINE` = 'MyISAM' AND `TABLE_TYPE` = 'BASE TABLE' ORDER BY table_name DESC;

(copia e incolla tutti i risultati nella scheda sql)

passaggio 2: (copia tutto il risultato nella scheda sql) e incolla sotto nella riga

INIZIA L'OPERAZIONE;

COMMETTERE;

per esempio. INIZIA L'OPERAZIONE;

ALTER TABLE admin_files ENGINE = InnoDB;

COMMETTERE;


10

Per generare istruzioni ALTER per tutte le tabelle in tutti gli schemi non di sistema, ordinati da tali schemi / tabelle, eseguire quanto segue:

SELECT  CONCAT('ALTER TABLE ',TABLE_SCHEMA,'.', table_name, ' ENGINE=InnoDB;') AS sql_statements
FROM    information_schema.tables
WHERE   TABLE_SCHEMA NOT IN ('mysql', 'information_schema', 'performance_schema', 'innodb', 'sys', 'tmp')
AND     `ENGINE` = 'MyISAM'
AND     `TABLE_TYPE` = 'BASE TABLE'
ORDER BY TABLE_SCHEMA, table_name DESC;

Successivamente, esegui quelle query tramite un client per eseguire l'alterazione.

  • La risposta si basa sulle risposte precedenti, ma migliora la gestione dello schema.

8

Non è ancora stato menzionato, quindi lo scriverò per i posteri:

Se stai migrando tra i server DB (o hai un altro motivo per scaricare e ricaricare il tuo dta), puoi semplicemente modificare l'output da mysqldump:

mysqldump --no-data DBNAME | sed 's/ENGINE=MyISAM/ENGINE=InnoDB/' > my_schema.sql;
mysqldump --no-create-info DBNAME > my_data.sql;

Quindi caricarlo di nuovo:

mysql DBNAME < my_schema.sql && mysql DBNAME < my_data.sql

(Inoltre, nella mia esperienza limitata, questo può essere un processo molto più veloce rispetto alla modifica delle tabelle "live". Probabilmente dipende dal tipo di dati e indici.)


ty! esattamente quello che stavo cercando. Lo proverò tra qualche giorno.
Rainer,

7

Ecco un modo per farlo per gli utenti di Django:

from django.core.management.base import BaseCommand
from django.db import connections


class Command(BaseCommand):

    def handle(self, database="default", *args, **options):

        cursor = connections[database].cursor()

        cursor.execute("SHOW TABLE STATUS");

        for row in cursor.fetchall():
            if row[1] != "InnoDB":
                print "Converting %s" % row[0],
                result = cursor.execute("ALTER TABLE %s ENGINE=INNODB" % row[0])
                print result

Aggiungilo alla tua app sotto le cartelle gestione / comandi / Quindi puoi convertire tutte le tue tabelle con un comando manage.py:

python manage.py convert_to_innodb

5

Dall'interno di mysql, è possibile utilizzare la ricerca / sostituzione utilizzando un editor di testo:

SELECT table_schema, table_name FROM INFORMATION_SCHEMA.TABLES WHERE engine = 'myisam';

Nota: probabilmente dovresti ignorare information_schema e mysql perché "I database mysql e information_schema, che implementano alcuni interni di MySQL, usano ancora MyISAM. In particolare, non puoi cambiare le tabelle delle sovvenzioni per usare InnoDB." ( http://dev.mysql.com/doc/refman/5.5/en/innodb-default-se.html )

In ogni caso, notare le tabelle da ignorare ed eseguire:

SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE engine = 'myisam';

Ora copia / incolla quell'elenco nel tuo editor di testo e cerca / sostituisci "|" con "ALTER TABLE" ecc.

Avrai quindi un elenco come questo che puoi semplicemente incollare nel tuo terminale mysql:

ALTER TABLE arth_commentmeta           ENGINE=Innodb;
ALTER TABLE arth_comments              ENGINE=Innodb;
ALTER TABLE arth_links                 ENGINE=Innodb;
ALTER TABLE arth_options               ENGINE=Innodb;
ALTER TABLE arth_postmeta              ENGINE=Innodb;
ALTER TABLE arth_posts                 ENGINE=Innodb;
ALTER TABLE arth_term_relationships    ENGINE=Innodb;
ALTER TABLE arth_term_taxonomy         ENGINE=Innodb;
ALTER TABLE arth_terms                 ENGINE=Innodb;
ALTER TABLE arth_usermeta              ENGINE=Innodb;

Se il tuo editor di testo non può farlo facilmente, ecco un'altra soluzione per ottenere un elenco simile (che puoi incollare in mysql) per un solo prefisso del tuo database, dal terminale Linux:

mysql -u [username] -p[password] -B -N -e 'show tables like "arth_%"' [database name] | xargs -I '{}' echo "ALTER TABLE {} ENGINE=INNODB;"

5

Una semplice versione di MySQL.

Puoi semplicemente avviare eseguibile mysql, utilizzare il database e copiare e incollare la query.

Ciò convertirà tutte le tabelle MyISAM nel database corrente in tabelle INNODB.

DROP PROCEDURE IF EXISTS convertToInnodb;
DELIMITER //
CREATE PROCEDURE convertToInnodb()
BEGIN
mainloop: LOOP
  SELECT TABLE_NAME INTO @convertTable FROM information_schema.TABLES
  WHERE `TABLE_SCHEMA` LIKE DATABASE()
  AND `ENGINE` LIKE 'MyISAM' ORDER BY TABLE_NAME LIMIT 1;
  IF @convertTable IS NULL THEN 
    LEAVE mainloop;
  END IF;
  SET @sqltext := CONCAT('ALTER TABLE `', DATABASE(), '`.`', @convertTable, '` ENGINE = INNODB');
  PREPARE convertTables FROM @sqltext;
  EXECUTE convertTables;
  DEALLOCATE PREPARE convertTables;
  SET @convertTable = NULL;
END LOOP mainloop;

END//
DELIMITER ;

CALL convertToInnodb();
DROP PROCEDURE IF EXISTS convertToInnodb;

Sono sorpreso che non esistessero più soluzioni basate su procedure memorizzate!
FrustratedWithFormsDesigner

Perché scrivere e testare le procedure in MySQL è doloroso ;-) il commento non ha nulla a che fare con la domanda.
Harald Leithner,

3

utilizzare questa riga per modificare il motore di database per singola tabella.

  ALTER TABLE table_name ENGINE = INNODB;

3

Sono un principiante e ho dovuto trovare la mia soluzione perché i comandi mysql sul web sono solitamente pieni di errori ortografici che creano un vero incubo per le persone che hanno appena iniziato. Ecco la mia soluzione ....

Invece di in 1 comando per tabella, ho preparato dozzine di comandi (pronti per essere copiati e incollati) contemporaneamente usando Excel.

Come? espandere la finestra del mastice e inserire mysql, quindi eseguire il comando "MOSTRA STATO TABELLA;" e copia / incolla l'output su microsoft excel. Vai alla scheda Dati e usa la funzione "testo in colonne" per delimitare le colonne con una chiave spaziale. Quindi ordina le colonne in base alla colonna che mostra i tipi di tabella ed elimina tutte le righe che sono già in formato InnoDb (poiché non è necessario eseguire comandi contro di esse, sono già state eseguite). Quindi aggiungi 2 colonne a sinistra della colonna delle tabelle e 2 colonne a destra. Quindi incolla la prima parte del comando nella colonna 1 (vedi sotto). La colonna 2 dovrebbe contenere solo uno spazio. La colonna 3 è la colonna delle tue tabelle. La colonna 4 dovrebbe contenere solo uno spazio. La colonna 5 è l'ultima parte del tuo comando. Dovrebbe sembrare come questo:

column-1        column-2            column-3         column-4     column-5
ALTER TABLE     t_lade_tr           ENGINE=InnoDB;
ALTER TABLE     t_foro_detail_ms    ENGINE=InnoDB;
ALTER TABLE     t_ljk_ms            ENGINE=InnoDB;

Quindi copia e incolla circa 5 righe alla volta in mysql. Questo convertirà circa 5 contemporaneamente. Ho notato che se avessi fatto più di quello in una volta, i comandi sarebbero falliti.


3

Nel mio caso, stavo migrando da un'istanza MySQL con un'impostazione predefinita di MyISAM, a un'istanza MariaDB con DEFAULT di InnoDB.

Per MariaDB Migration Doc's.

Sulla vecchia esecuzione del server:

mysqldump -u root -p --skip-create-options --all-databases > migration.sql

--Skip-create-options assicura che il server di database utilizzi il motore di archiviazione predefinito durante il caricamento dei dati, anziché MyISAM.

mysql -u root -p < migration.sql

Questo ha generato un errore per quanto riguarda la creazione di mysql.db, ma ora tutto funziona alla grande :)


3

Ho appena provato un altro modo (semplice?) E ha funzionato per me.

Esporta semplicemente il tuo DB come file .sql, modificalo con gedit o notepad;

Sostituisci ENGINE=MyISAMcon ENGINE=INNODBe salva il file modificato

Il numero o la sostituzione effettuata dovrebbe essere il numero delle tue tabelle

Importalo su MySQL (phpMyAdmin o riga di comando)

E voilà!


2

Puoi scrivere uno script per farlo nel tuo linguaggio di scripting preferito. Lo script farebbe quanto segue:

  1. Problema SHOW FULL TABLES.
  2. Per ogni riga restituita, controlla che la seconda colonna indichi 'BASE TABLE'e non 'VIEW'.
  3. In caso contrario 'VIEW', emettere il ALTER TABLEcomando appropriato .

2

Prova questo script di shell

DBENGINE='InnoDB' ;
DBUSER='your_db_user' ;
DBNAME='your_db_name' ;
DBHOST='your_db_host'
DBPASS='your_db_pass' ;
mysqldump --add-drop-table -h$DBHOST -u$DBUSER -p$DBPASS $DBNAME > mtest.sql; mysql -h$DBHOST -u$DBUSER -p$DBPASS $DBNAME -Nse "SHOW TABLES;" | while read TABLE ; do mysql -h$DBHOST -u$DBUSER -p$DBPASS $DBNAME -Nse "ALTER TABLE $TABLE ENGINE=$DBENGINE;" ; done

2

Alcune correzioni a questo script util

SET @DATABASE_NAME = 'Integradb';

SELECT  CONCAT('ALTER TABLE ', table_schema, '.', table_name, ' ENGINE=InnoDB;') AS sql_statements
FROM    information_schema.tables AS tb
WHERE   table_schema = @DATABASE_NAME
AND     `ENGINE` = 'MyISAM'
AND     `TABLE_TYPE` = 'BASE TABLE'
ORDER BY table_name DESC;

1
<?php

  // connect your database here first

  mysql_connect('host', 'user', 'pass');

  $databases = mysql_query('SHOW databases');

  while($db = mysql_fetch_array($databases)) {
    echo "database => {$db[0]}\n";
    mysql_select_db($db[0]);

    $tables = mysql_query('SHOW tables');

    while($tbl = mysql_fetch_array($tables)) {
      echo "table => {$tbl[0]}\n";
      mysql_query("ALTER TABLE {$tbl[0]} ENGINE=MyISAM");
    }
  }

1

Questo è un semplice script php.

<?php
    @error_reporting(E_ALL | E_STRICT);
    @ini_set('display_errors', '1');


    $con = mysql_connect('server', 'user', 'pass');
    $dbName = 'moodle2014';

    $sql = "SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '".$dbName."';";
    $rs = mysql_query($sql, $con);

    $count = 0;
    $ok = 0;
    while($row = mysql_fetch_array($rs)){
            $count ++;
            $tbl = $row[0];
            $sql = "ALTER TABLE ".$dbName.".".$tbl." ENGINE=INNODB;";
            $resultado = mysql_query($sql);
            if ($resultado){
                    $ok ++;
                    echo $sql."<hr/>";
            }
    }
    if ($count == $ok){
            echo '<div style="color: green"><b>ALL OK</b></div>';
    }else{
            echo '<div style="color: red"><b>ERRORS</b>Total tables: '.$count.', updated tables:'.$ok.'</div>';
    }

1
<?php

// Convert all MyISAM tables to INNODB tables in all non-special databases.
// Note: With MySQL less than 5.6, tables with a fulltext search index cannot be converted to INNODB and will be skipped.

if($argc < 4)
    exit("Usage: {$argv[0]} <host> <username> <password>\n");
$host = $argv[1];
$username = $argv[2];
$password = $argv[3];

// Connect to the database.
if(!mysql_connect($host, $username, $password))
    exit("Error opening database. " . mysql_error() . "\n");

// Get all databases except special ones that shouldn't be converted.
$databases = mysql_query("SHOW databases WHERE `Database` NOT IN ('mysql', 'information_schema', 'performance_schema')");
if($databases === false)
    exit("Error showing databases. " . mysql_error() . "\n");

while($db = mysql_fetch_array($databases))
{
    // Select the database.
    if(!mysql_select_db($db[0]))
        exit("Error selecting database: {$db[0]}. " . mysql_error() . "\n");
    printf("Database: %s\n", $db[0]);

    // Get all MyISAM tables in the database.
    $tables = mysql_query("SHOW table status WHERE Engine = 'MyISAM'");
    if($tables === false)
        exit("Error showing tables. " . mysql_error() . "\n");

    while($tbl = mysql_fetch_array($tables))
    {
        // Convert the table to INNODB.
        printf("--- Converting %s\n", $tbl[0]);
        if(mysql_query("ALTER TABLE `{$tbl[0]}` ENGINE = INNODB") === false)
            printf("--- --- Error altering table: {$tbl[0]}. " . mysql_error() . "\n");
    }
}

mysql_close();

?>

1

per mysqli connect;

<?php

$host       = "host";
$user       = "user";
$pass       = "pss";
$database   = "db_name";


$connect = new mysqli($host, $user, $pass, $database);  

// Actual code starts here Dont forget to change db_name !!
$sql = "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_SCHEMA = 'db_name' 
    AND ENGINE = 'MyISAM'";

$rs = $connect->query($sql);

while($row = $rs->fetch_array())
{
    $tbl = $row[0];
    $sql = "ALTER TABLE `$tbl` ENGINE=INNODB";
    $connect->query($sql);
} ?>

0

Ancora un'altra opzione ... Ecco come farlo in ansible. Presuppone che sia presente il nome del database dbnamee che tu abbia già configurato l'accesso.

- name: Get list of DB tables that need converting to InnoDB
  command: >
    mysql --batch --skip-column-names --execute="SELECT TABLE_NAME
    FROM information_schema.TABLES
    WHERE TABLE_SCHEMA = '{{ dbname }}' AND ENGINE = 'MyISAM';"
  register: converttables
  check_mode: no
  changed_when: False

- name: Convert any unconverted tables
  command: >
    mysql --batch --skip-column-names --execute="ALTER TABLE `{{ dbname }}`.`{{ item }}` ENGINE = InnoDB;"
  with_items: "{{ converttables.stdout_lines }}"

-1

cd / var / lib / mysql / DBNAME

ls | grep ".frm" | cut -d "." -f1 | xargs -I {} -n1 mysql -D DBNAME -e "alter table {} ENGINE = INNODB;" -uroot -pXXXXX

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.