Recherche ...

Chargement...

05/11/2009

Optimiser son Bash : modifier la taille de l'historique

Par défaut, l'historique des commandes lancées dans son Bash est limité au 500 dernières commandes lancées (ce qui est la plupart du temps largement suffisant).

Pour modifier cette taille et conserver dans son historique les 1000 dernières commandes exécutées, il faut ajouter une des 2 lignes suivantes dans votre fichier ~/.bashrc :

HISTSIZE=1000
ou
HISTFILESIZE=1000

04/11/2009

Optimiser son Bash : éviter les duplications dans son historique

Il m'arrive souvent d'exécuter la même commande plusieurs fois de suite et chaque exécution est stockée dans mon fichier d'historique bash (.bash_history) ce qui est assez pénible quand on veut revenir sur un commande précédemment tapée.

Il existe un paramétrage très simple à faire pour demander au Bash d'ignorer les commandes identiques dans l'historique : HISTCONTROL

Pour cela ajouter la ligne suivante dans votre fichier ~/.bashrc :
HISTCONTROL=ignoredups

25/03/2009

Script de sauvegarde MySQL

Je sais que beaucoup de personnes on leur petit script maison de sauvegarde MySQL mais personnellement, il m'est déjà arrivé de devoir en mettre un en place très rapidement et à chaque fois, il faut se replonger dans la documentation MySQL pour les options. :-(

Ce script est très simple mais il permet malgré tout d'effectuer la sauvegarde de chaque schéma d'une instance MySQL dans un fichier horodaté séparé et compressé avec bzip2 (c'est avec cet algorithme que j'obtiens le meilleur taux de compression sur mes sauvegardes MySQL) . Il ne reste plus qu'à le paramétrer sous crontab (toutes les nuits par exemple) et c'est parti !

#!/bin/bash
# Script de sauvegarde MySQL v5.0
MYSQL_LOGIN=backup_login
MYSQL_PASSWORD=backup_password
BACKUP_DUMP_ROOT=/backup/mysql
echo "# Sauvegarde des Bases MySql"
echo "# DUMP=${BACKUP_DUMP_ROOT}"
timestamp="$(date +%Y%m%d-%H%M%S)"
prefix=`hostname`
# Sauvegarde de chaque Base dans un fichier
for database in `echo "show databases" | mysql -u${MYSQL_LOGIN} -p${MYSQL_PASSWORD} -N`
do
BACKUP_FILE="${BACKUP_DUMP_ROOT}/${prefix}-mysql-backup-${timestamp}-${database}.sql"
echo "#$(date +%Y%m%d-%H%M%S)# DEBUT Sauvegarde de [${database}] in [${BACKUP_FILE}]"
mysqldump --quick --add-locks --extended-insert --lock-tables --allow-keywords --default-character-set=latin1 -c -u${MYSQL_LOGIN} -p${MYSQL_PASSWORD} ${database} | bzip2 -9 > ${BACKUP_FILE}.bz
retour=$?
if [ "$retour" -eq "0" ]
then
echo "#$(date +%Y%m%d-%H%M%S)# La sauvegarde s'est correctement deroulee"
else
echo "#$(date +%Y%m%d-%H%M%S)# La sauvegarde s'est terminee en ERREUR"
fi
echo "#$(date +%Y%m%d-%H%M%S)# FIN Sauvegarde de [${database}] in [${BACKUP_FILE}]"
done
exit $retour

Voici la liste des options utilisées dans le script :
  • -q | --quick
ne garde pas en buffer les requêtes mais écrit immediatement sur la sortie
  • --add-locks
ajoute dans le fichier de sauvegarde une instruction LOCK TABLES avant et UNLOCK TABLES après pour accélérer les insertions dans MySQL
  • -e | --extended-insert
utilise la nouvelle syntaxe INSERT multi-ligne (plus courtes et plus efficaces)
  • --lock-tables
Verrouille toutes les tables avant de commencer l'export. Les tables sont verrouillées avec READ LOCAL pour permettre des insertions concurrentes sur les tables MyISAM
  • --allow-keywords
Permet la création de colonnes ayant des noms de mots réservés. Cela fonctionne en préfixant chaque nom de colonne avec le nom de la table.
  • --default-character-set=latin1
le charset par defaut (si ce paramètre n'est pas spécifié alors utf8 est utilisé)
  • -c | --complete-insert
insertion complete avec les noms de colonnes

Pour plus d'options de paramétrage de mysqldump, n'hésitez pas à aller consulter la documentation MySQL en ligne et à partager vos trouvailles ou optimisations.

21/02/2009

Tests de charge distribués avec Apache JMeter

Apache JMeter est un outils graphique écrit 100% en java permettant d'exécuter des tests fonctionnels et de mesurer les performances du système sur lequel ces tests sont executés.  Initialement, JMeter était prévu pour tester des pages web mais rapidement, des extensions ont été ajoutées pour pouvoir tester différents type de serveurs (base de données, ldap, jms, mail, ...).

Une des fonctionnalités de JMeter est de pouvoir simuler autant d'utilisateurs que nous voulons afin de pouvoir effectuer des tests de montée en charge mais lorsque nous souhaitons simuler un grand nombre d'utilisateurs, une seule machine pour effectuer l'injection peut être insuffisante, il faut donc configurer l'outils pour les tests soient executés par plusieurs machines en parrallèle.



Pour se faire, JMeter doit être installé sur chaque machine devant jouer les tests.

Démarrez l'ensemble des noeuds esclaves (les machines qui exécuterons les tests) avec le script ${JMETER_HOME}\bin\jmeter-server.bat et notez leurs adresses IP.

Ensuite, avant de démarrer la console graphique de JMeter pour pouvoir lancer nos tests, il faut déclarer les noeuds esclaves dans les fichiers de configuration de JMeter. Pour cela, il faut éditer le fichier de configuration  ${JMETER_HOME}\bin\jmeter.properties et renseigner la variable remote_hosts avec les IP des machines esclaves :

[bash]
#---------------------------------------------------------------------------
# Remote hosts and RMI configuration
#---------------------------------------------------------------------------

# Remote Hosts - comma delimited
remote_hosts=127.0.0.1, 192.168.0.57
#remote_hosts:localhost:1099,localhost:2010

# RMI port to be used by the server (must start rmiregistry with same port)
#server_port=1099
[/bash]

Dans cet exemple, j'ai ajouté une machine en plus de la machine maître, mais nous pouvons tout à fait utiliser 15 machines esclaves et supprimer l'IP de la machine maître (127.0.0.1) afin que celle-ci ne se contente de jouer les rôles d'ordonnanceur et de collecteur de résultat (ce qui est vivement conseillé quand il y a beaucoup de machines esclave).

Une fois ce fichier de configuration mis à jour, nous pouvons démarrer la machine maître et utiliser la console :




Sur la capture d'écran, on voit qu'on a maintenant 3 possibilités :
  • lancer les tests avec la machine maître (menu: Démarrer)
  • lancer les tests avec une seule des machines configurées (menu: Démarrage distant > choisir la machine)
  • lancer les tests avec l'ensemble des machines configurées (menu: Démarrage distant de tous)

Voilà, c'est donc très simple :-)

09/01/2009