Par Catageek, samedi 2 septembre 2006 à la maison :: Sécurité informatique :: Lien permanent
mysql-rotate est un script shell qui archive les tables MySQL à la manière de logrotate. les tables archivées sont renommées, compressées et ne seront accessibles qu'en lecture (ceci étant réversible). Ainsi, vous éviterez de gonfler vos tables de logs (firewall,...) ou de forums et/ou blog. Je l'utilise pour archiver mensuellement les logs Nulog ou NuFW.
Il fonctionne de manière automatique avec Cron.
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

Commentaires
Aucun commentaire pour le moment.
S'abonner au fil rss des commentaires de ce billet
Ajouter un commentaire