usage
exit 1
;;
esac
done
#
# Variables et verifications
#
# Verification des parametres choisis
if [[ $# -eq 0 || -z $serveur || -z $user || -z $auth || -z $bases || -z $folder ]] ; then
usage
exit 1
fi
# Verification du dossier de sauvegarde
if [ ! -d $folder ] ; then
echo "ERREUR - Le dossier cense accueillir les dumps est introuvable"
exit 1
fi
# Verification de l'authentification choisi
if [ $auth == "file" ] ; then
if [ ! -f ~/.my.cnf ] ; then
echo " ERREUR - Le fichier .my.cnf est introuvable"
# exit 1
else
if [ $(stat -c %a ~/.my.cnf) != 600 ] ; then
echo "Warning - Votre fichier ~/.my.cnf n'a pas les droits recommandes"
fi
fi
elif [ ! $auth == "password" ] ; then
usage
exit 1
fi
# Date du jour
date=`date +%m-%d-%Y`
host=`hostname`
res="\n"
#
# Au boulot
#
# Pour chaque base
for base in $(echo $bases | sed "s/,/ /g") ; do
dump="$folder/dump-$base-$date.sql"
if [[ $auth == "file" ]] ; then
mysqldump -u $user $base > $dump
else
mysqldump -u $user -p $base > $dump
fi
gzip $dump
if [ -n $dest ] ; then
echo "" | mutt -s "[Save-SQL] Dump base $base du $date" -a ""$dump".gz" -- $dest
fi
done
]]>
usage
exit 1
;;
esac
done
#
# Variables et verifications
#
# Verification des parametres choisis
if [[ $# -eq 0 || -z $serveur || -z $user || -z $auth ]] ; then
usage
exit 1
fi
# Verification de l'authentification choisi
if [ $auth == "file" ] ; then
if [ ! -f ~/.my.cnf ] ; then
echo " ERREUR - Le fichier .my.cnf est introuvable"
exit 1
else
if [ $(stat -c %a ~/.my.cnf) != 600 ] ; then
echo "Warning - Votre fichier ~/.my.cnf n'a pas les droits recommandes"
fi
fi
elif [ ! $auth == "password" ] ; then
usage
exit 1
fi
host=`hostname`
res="\n"
# Fichier de sortie temporaire
tmp="/tmp/mysql_db_sized.tmp"
#
# Au boulot
#
# On extrait dans un fichier toutes les bases du serveurs
if [ $auth == "file" ] ; then
mysql -h $serveur -u $user -B --exec="SELECT table_schema, round(sum(data_length+index_length)/1024/1024,4) AS 'Size (MB)' FROM information_schema.tables GROUP BY table_schema;" > $tmp
else
mysql -h $serveur -u $user -p -B --exec="SELECT table_schema, round(sum(data_length+index_length)/1024/1024,4) AS 'Size (MB)' FROM information_schema.tables GROUP BY table_schema;" > $tmp
fi
# On supprime la premières ligne du fichier comprenant les titres ainsi que la base schema
sed -i '1d' $tmp
sed -i '/information_schema/d' $tmp
# Pour chaque base
while read line ; do
# On recupere son nom et sa taille
nom=`echo $line | cut -f1 -d ' '`
taille=`echo $line | cut -f2 -d ' '`
# On l'ajoute au resultat si on veut toutes les bases ou si elle fait partie des bases choisies
if [ -z $bases ] && ( echo $bases | grep -wq $nom ) ; then
res+="$nom : $taille Mo\n"
elif [ -n $bases ] && ( echo $bases | grep -wq $nom ) ; then
res+="$nom : $taille Mo\n"
fi
done < $tmp
# On redige et on envoi l'email si demande
if [ ! -z $dest ] ; then
corps="Bonjour,\n\nVoici les informations concernant la taille de ma/mes base(s) de données :\n\n$res\n\nnCordialement,\n\n$host"
echo -e $corps | mail -s "Infos : Taille base MySQL" $dest
# Sinon on affiche le resultat dans le terminal
else
echo -e $res
fi
# On supprime le fichier de sortie temporaire
rm -f $tmp
]]>use DBI();
$database="nom_base";
$hostname="hostname";
$login = "login";
$mdp = "password";
$dsn = "DBI:mysql:database=$database;host=$hostname";
$dbh = DBI->connect($dsn, $login, $mdp) or die "Echec connexion";
$requete = "REQUETE SQL";
$sth = $dbh->prepare($requete);
$sth->execute();
while(my @row = $sth->fetchrow_array)
{
$var1=$row['0'];
$var2=$row['1'];
}
$sth -> finish;
$dbh -> disconnect;
]]>log=/var/log/mysql/mysql.log
Puis après un petit redemarrage de MySQL le fichier contiendra toutes les opérations effectuées sur la base (cela peut s’avérer pratique pour récupérer des requêtes SQL créées par des interfaces web ou autres formulaires par exemple)
]]>SELECT table_schema As "Base", round(sum(data_length+index_length)/1024/1024,4) AS "Taille (Mo)" FROM information_schema.tables GROUP BY table_schema;
Taille de chaque table d’une base :
SELECT table_name AS "Tables", round(((data_length + index_length) / 1024 / 1024), 2) AS "Taille (Mo)" FROM information_schema.tables WHERE table_schema = 'base';]]>