Convertir vos tables MySQL MyISAM vers le moteur InnoDB

Scripts bash pour convertir rapidement toutes vos tables MyISAM vers le moteur InnoDB.

Pour toutes les tables de toutes les bases

Version séquentielle

La conversion de la table suivante ne sera faite que si la précédente est finie (ignorez les erreurs pour les tables déjà en InnoDB 😉).

##!/usr/bin/env bash
for db in `mysql --batch --skip-column-names -e "show databases;" | egrep -v "mysql|information_schema|performance_schema|lost"`; do
 echo "# "$db
 for table in `echo "show tables" | mysql --batch --skip-column-names $db`; do
  echo "-- "$table
  mysql $db -e "ALTER TABLE $table ENGINE = InnoDB;"
 done
done

" Version " Bourrin

##!/usr/bin/env bash
for db in `mysql --batch --skip-column-names -e "show databases;" | egrep -v "mysql|information_schema|performance_schema|lost"`; do
 echo "# "$db
 for table in `echo "show tables" | mysql --batch --skip-column-names $db`; do
  echo "-- "$table
  mysql $db -e "ALTER TABLE $table ENGINE = InnoDB;" &
 done
done

Pour toutes les tables d’une base

Vous pouvez le faire de manière soft (Table par table)

##!/bin/bash
DATABASENAME="votrebdd"

for i in `echo "show tables" | mysql --batch --skip-column-names $DATABASENAME`; do
mysql $DATABASENAME -e "ALTER TABLE `$i` ENGINE = InnoDB;"
done

Ou en version “Multithread” (Bourrin)

##!/bin/bash
DATABASENAME="votrebdd"

for i in `echo "show tables" | mysql --batch --skip-column-names $DATABASENAME`; do
mysql $DATABASENAME -e "ALTER TABLE `$i` ENGINE = InnoDB;" &
done
Catégories : Linux 
Tags: Astuce MySQL 

Suggestions de lecture :