Methode et script pour la purge des tables de monitoring de evtlog et varsetmonitor
Edit me
Suppression du monitoring lié aux varsets evtlog et varsetmonitor
Explication et contexte
Suite à l’acceptation de la Pull Request de Benoit C. , les tables si dessous ne seront plus alimentées :
varsetmonitor_data_group_mode
varsetmonitor_data_group
evtlog_data_group
evtlog_data_group_mode
Les données existant dans ces tables doivent être vidées. La procédure ci-dessous présente les tests à effectuer avant la suppression, ainsi que les requêtes à lancer pour la purge.
Vérifications
Afin de tester si un truncate est nécessaire, la préconisation de RHE est de ne pas effectuer un count, en raison de la taille potentielle de ces tables.
À la place, il vaut mieux effectuer un select null
avec une limite d’un résultat :
SELECT null from { pj } _varsetmonitor_data_group_mode limit 1 ;
SELECT null from { pj } _varsetmonitor_data_group limit 1 ;
SELECT null from { pj } _evtlog_data_group limit 1 ;
SELECT null from { pj } _evtlog_data_group_mode limit 1 ;
Requêtes de purge
truncate { pj } _varsetmonitor_data_group_mode ;
truncate { pj } _varsetmonitor_data_group ;
truncate { pj } _evtlog_data_group ;
truncate { pj } _evtlog_data_group_mode ;
Exemple de script de purge
#!/bin/bash
sDoc = '\nMZZ - 2018-10-09 :\nSupprime les données du monitoring des tables varsetmonitor et evtlog dans tous les projets d' "'" 'une base\n' ;
usage()
{
echo $sDoc
echo "Example : ./purgeMonitor.sh --user=root --host=localhost --password=root --base=sandbox 2>&1 | grep -v '[Warning]'"
echo ""
echo -e "--user \t Database user"
echo -e "--password \t Database password"
echo -e "--host \t Database host"
echo -e "--base \t Database name"
echo -e "-i \t Interactive mode"
}
if [ " $1 " == "" ] ; then
usage
exit 1
fi
_INTERACTIVE = 0
sUser = "root"
sPass = ""
sHost = "localhost"
sBase = ""
# Analyse each parameter. "shift", just before the "done" statement, remove the parameter :
# $2 become $1, $3 become $2, etc.
while [ " $1 " != "" ] ; do
PARAM = ` echo $1 | awk -F = '{print $1}' ` # Stop reaching the first "="
VALUE = ` echo $1 | sed 's/^[^=]*=//g' ` # Keep only after the first "="
case $PARAM in
-h | --help | --usage )
usage # explain how to use the script
exit 1 # Shown as error, to prevent accidental argument "-h" to end the script "correctly" on travis
;;
-i )
_INTERACTIVE = 1
;;
--user )
sUser = $VALUE
;;
--password )
sPass = $VALUE
;;
--host )
sHost = $VALUE
;;
--base )
sBase = $VALUE
;;
* )
echo "ERROR: unknown parameter \" $PARAM \" "
usage # explain how to use the script
exit 1
;;
esac
shift
done
if [[ $_INTERACTIVE -eq 1 ]] ; then
echo -n 'Host ("localhost" par défaut) : ' ;
read -r sHost;
if [ " $sHost " = '' ] ; then
sHost = 'localhost' ;
fi ;
echo -n 'User ("root" par défaut) : ' ;
read -r sUser;
if [ " $sUser " = '' ] ; then
# sUser='';
sUser = 'root' ;
fi ;
stty -echo
read -p "Password (vide par défaut) : " sPass; echo
stty echo
if [ " $sPass " = '' ] ; then
# sPass='';
sPass = '' ;
fi ;
#export MYSQL_PWD=$sPass;
while [ " $sBase " = "" ] ; do
echo -n 'Base(s) (Séparées avec des espaces. Pour TOUTES les bases, utilisez le caractère "*") : ' ;
read -r sBase;
done ;
fi
if [ " $sBase " = "" ] ; then
echo -e "Use -b option, database name cannot be empty"
exit 1
fi
if [ " $sPass " != "" ] ; then
sPass = "--password=" $sPass
fi
echo "test : " $sBase
if [[ " $sBase " == "*" ]] ; then
sQuery = 'SHOW DATABASES;' ;
sBases = $( mysql --host = $sHost --user = $sUser $sPass -se " $sQuery " ) ;
echo "sQuery => mysql --host= $sHost --user= $sUser --password=**** -se \" $sQuery \" "
aBasesTmp =( $( echo $sBases ) )
aBases =()
for sValue in " ${ aBasesTmp [@] } " ; do
if [[ ! " $sValue " = ~ ^( information_schema|sys|performance_schema|mysql) $ ]] ; then
aBases+=( $sValue )
fi
done
else
aBases =( $( echo $sBase ) )
fi
echo "aBases => $aBases "
for sBase in $aBases ; do
sQuery = 'show tables;' ;
aTables = $( mysql --host = $sHost --user = $sUser $sPass $sBase -se " $sQuery " ) ;
sTtlDbDesc = $sTtlDbDesc "" $aTables ;
for sTable in $aTables ; do
if [[ $sTable = ~ ^.* ( _varsetmonitor_data_group_mode|_varsetmonitor_data_group|_evtlog_data_group|_evtlog_data_group_mode) $ ]] ; then
sQuery = 'SELECT null from ' $sTable ' limit 1;' ;
sResult = $( mysql --host = $sHost --user = $sUser $sPass $sBase -se " $sQuery " ) ;
if [ " $sResult " = 'NULL' ] ; then
echo "Table $sTable contains data, deleting data..."
sQuery = 'truncate ' $sTable ';' ;
sQueryLog = 'truncate \033[32m' $sTable '\033[0m;' ;
echo -e " $sQueryLog "
sResult = $( mysql --host = $sHost --user = $sUser $sPass $sBase -se " $sQuery " ) ;
fi
sleep 0.1
fi
done ;
done ;
echo "Fin du script"