Pour utiliser ce script, vous devez être "root" et placer le script mysql-rotate sur la machine où se trouve le serveur MySQL.

Lorsqu'il sera exécuté pour la première fois, le script renommera chaque table table figurant dans la liste TABNAME en table_2, et créera une nouvelle table table. A la deuxième exécution, il renommera table_2 en table_3, et table en table_2, et ainsi de suite

Il sera conservé jusqu'à TABNUMBER tables. Au-delà, les tables seront supprimées.

Pour décompresser une table archivée et annuler la lecture seule, vous devez exécuter myisamchk --unpack /var/lib/mysql/my_db/my_table.MYI.

Voici le script mysql-rotate :

#!/bin/bash
MYSQL_HISTFILE=/dev/null
SQL_USER=""
SQL_PASS=""
SQL_DB=""
TABNAME=""

SQLCMD="mysql ${SQL_DB} --batch -u ${SQL_USER} -p${SQL_PASS}";
declare -i TABNUMBER=12;

for t in ${TABNAME}; do
	# create table 0
	echo "CREATE TABLE IF NOT EXISTS ${t}_0 LIKE ${t};" | $SQLCMD;

	# delete table 12
	echo "DROP TABLE IF EXISTS ${t}_$TABNUMBER;" | $SQLCMD;
	
	# move table from 2 to 11
	FLUSH=""
	STRING=""
	
	for TABLE in $(seq 2 $((${TABNUMBER}-1))); do 
		# teste si la table existe
		if echo "DESCRIBE ${t}_${TABLE};" | ${SQLCMD} >/dev/null 2>&1;
		then
			FLUSH="${t}_${TABLE}, ${FLUSH}"
			STRING="${t}_${TABLE} TO ${t}_$((${TABLE}+1)),\
${STRING}";
		fi
	done

	# move table from 0 and 1
	FLUSH="${FLUSH}${t}"
	STRING="${STRING}${t} TO ${t}_2, ${t}_0 TO ${t}"
	
	# atomic
	echo "FLUSH TABLES ${FLUSH}; RENAME TABLE ${STRING};" | ${SQLCMD}  >/dev/null 2>&1


	#compress 2
	cd /var/lib/mysql/${SQL_DB}/
	echo "FLUSH TABLE ${t}_2;" | $SQLCMD
	myisampack -s "${t}_2.MYI"
	myisamchk -s -rq --sort-index --analyze "${t}_2.MYI"
	echo "FLUSH TABLE ${t}_2" | $SQLCMD
done