Wie komprimiert man mehrere InnoDB Tabellen auf einmal?

Mein Problem ist folgendes, ich habe mehrere 100 MySQL Datenbanken mit einem gemischten Satz an InnoDB, MyISAM, Memory, … Tabellen und möchte jetzt alle InnoDB Tabellen ändern. Um genau zu sein möchte ich das Zeilen Format umstellen auf COMPRESSED.

Also muss ich für jede Tabelle folgenden SQL Befehl ausführen:
ALTER TABLE $table ENGINE = INNODB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8;
Bei der Anzahl an Tabellen würde das händisch eine Ewigkeit dauern, deswegen habe ich ein kleines Shellscript geschrieben welches mir die Arbeit abnimmt:
#!/bin/bash

IFS="
"

dbid=
socket=/var/run/mysqld/mysqld${dbid}.sock
user=root
password=

dbs=`echo "show databases" | mysql --socket=${socket} -u ${user} --password=${password} -B`
for db in $dbs; do
echo "Convert database $db";
tables=`echo "SELECT TABLE_NAME AS ' ' FROM TABLES WHERE TABLE_SCHEMA LIKE '${db}' and ENGINE like 'InnoDB' and CREATE_OPTIONS not like '%COMPRESSED%' " | mysql --socket=${socket} -u ${user} --password=${password} -D information_schema -B`
for table in $tables; do
echo "Rewrite Table ${table}"
echo "ALTER TABLE \`$table\` ENGINE = INNODB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8" | mysql --socket=${socket} -u ${user} --password=${password} -D $db
done
echo "Convert database $db finished"
done
Script Download

Wichtig: Bevor das funktioniert muss das Dateiformat in der my.cnf Datei auf barracuda geändert werden. Einfach folgenden Eintrag in der my.cnf Datei ändern oder ergänzen:
innodb_file_format=barracuda

Notice: This work is licensed under a BY-NC-SA. Permalink: Wie komprimiert man mehrere InnoDB Tabellen auf einmal?

Comments are closed.

Mastodon