Vous êtes sur la page 1sur 7

PROF ENCADRENT:

ABDELALI ELMOUNADI
Système d'Exploitation 2

Réalisateur :
MOUASSEIF MOUAD
Clé-info S5

SCRIPTING BASH
Mini-projet
Contents
I. Enoncer :........................................................................................................................................2
II. Réalisation :....................................................................................................................................2
a. Les outils :...................................................................................................................................2
b. Les étapes :.................................................................................................................................3
c. Realisation de Sckripte...............................................................................................................4

Système d'Exploitation 2 1 Département d’Informatique


CLE Informatique
I. Enoncer :

L’objectif de ce mini-projet est de réaliser un script Bash qui permet d’effectuer


automatiquement la sauvegarde d’une base de données MySQL de façon périodique. Le
script doit s’appliquer sur un cas de base de données bien élaboré. Parmi les tâches assurées
par l’exécution du script, on devrait retrouver les éléments suivants :

 La vérification de la connectivité au serveur : le script devra tout d’abord tester si le


serveur est accessible sur l’adresse et le port d’écoute (pour un serveur MySQL,
l’adresse par défaut est l’adresse locale, i.e. 127.0.0.1, et le port d’écoute par défaut
est configuré sur le numéro 3306).
 Le script devra enregistrer la sauvegarde dans un répertoire portant comme nom la
date courante au format ISO.
 Le script devra générer un fichier qui permet de relever les statistiques possibles par
rapport à la base de données, et qui sera accessible à partir du même chemin que le
fichier de sauvegarde. Par exemple, si vous travaillez sur une base de données qui
traite des ventes, le script devra collecter des statistiques sur le nombre de produits
vendus durant la dernière période, le nombre de produits restants en stock, le total
des ventes, etc. le fait de sauvegarder ces statistiques au format « JSon » serait un
plus.
 Le script devra prendre en considération le cas où il serait lancé de façon manuelle,
de telle manière à ne pas rentrer en conflit avec une autre sauvegarde effectuée
précédemment à la même date.

Vous pouvez faire preuve de créativité en ajoutant d’autres éléments qui permettraient
d’avoir plus de détails sur la sauvegarde. Cela sera bien entendu pris en considération par
rapport à la note attribuée. Sera également pris en considération le degré auquel le script est
paramétrable.

II. Réalisation :

a. Les outils :
Pour réaliser ce script Bash, il est nécessaire de disposer des outils suivants :

 MySQL pour effectuer les opérations sur la base de données.


 MySQLdump pour créer une sauvegarde de la base de données
 jq pour formater les statistiques en json
 Date pour générer les noms de répertoire et de fichier

Voici un exemple de script bash qui réalise les tâches décrites :


#!/bin/bash

# Variables de configuration
DB_HOST="127.0.0.1"

Système d'Exploitation 2 2 Département d’Informatique


CLE Informatique
DB_PORT="3306"
DB_USER="root"
DB_PASS="root"
DB_NAME="miniPorject"
BACKUP_DIR="/var/backups/mysql"

# Vérifie la connectivité au serveur


nc -z $DB_HOST $DB_PORT
if [ $? -ne 0 ]; then
echo "Le serveur MySQL n'est pas accessible"
exit 1
fi

# Génère le nom du répertoire de sauvegarde


DATE=$(date -I)
BACKUP_DIR="$BACKUP_DIR/$DATE"

# Crée le répertoire de sauvegarde s'il n'existe pas


if [ ! -d $BACKUP_DIR ]; then
mkdir -p $BACKUP_DIR
fi

# Effectue la sauvegarde de la base de données


mysqldump -h $DB_HOST -P $DB_PORT -u $DB_USER -p$DB_PASS $DB_NAME >
"$BACKUP_DIR/$DB_NAME.sql"

# Génère les statistiques


STATS_FILE="$BACKUP_DIR/stats.json"
echo "{\"products_sold\": $(mysql -h $DB_HOST -P $DB_PORT -u $DB_USER -p$DB_PASS -e
"SELECT COUNT(*) FROM products_sold"),\"products_remaining\": $(mysql -h $DB_HOST -P
$DB_PORT -u $DB_USER -p$DB_PASS -e "SELECT COUNT(*) FROM
products_remaining"),\"sales_total\": $(mysql -h $DB_HOST -P $DB_PORT -u $DB_USER -
p$DB_PASS -e "SELECT SUM(price) FROM sales")}" > $STATS_FILE

# Formate les statistiques en json


jq . $STATS_FILE

b. Les étapes :
 Les étapes pour réaliser le script Bash :
Pour réaliser ce script Bash, voici les étapes à suivre :
1. Vérifier la connectivité au serveur : utiliser la commande ‘mysqladmin’ pour tester la
connectivité au serveur MySQL, en spécifiant l'adresse (par défaut 127.0.0.1) et le
port (par défaut 3306). Si la connectivité échoue, le script devra afficher un message
d'erreur et s'arrêter.
2. Créer un répertoire pour la sauvegarde : utiliser la commande date pour récupérer la
date courante au format ISO et créer un répertoire portant ce nom.
3. Effectuer la sauvegarde de la base de données : utiliser la commande ‘mysqldump’
pour sauvegarder la base de données dans le répertoire créé à l'étape 2. Il est
possible de spécifier des options pour exclure certaines tables ou pour ajouter des
informations de structure de tables.

Système d'Exploitation 2 3 Département d’Informatique


CLE Informatique
4. Générer les statistiques : utiliser les commandes SQL pour récupérer les statistiques
souhaitées depuis la base de données (nombre de produits vendus, nombre de
produits restants en stock, total des ventes, etc.). Stocker ces statistiques dans un
fichier JSON dans le même répertoire que le fichier de sauvegarde.
5. Prévoir un système pour éviter les conflits : utiliser un système de verrouillage pour
s'assurer qu'il n'y a pas de conflit entre une sauvegarde manuelle et une sauvegarde
programmée.
6. Paramétrage : Il serait intéressant de rendre le script paramétrable pour spécifier les
options de sauvegarde, les informations de connexion à la base de données, les
données de statistiques à collecter, etc.
Il est important de noter que pour réaliser ce script, il est nécessaire d'avoir une certaine
connaissance de la ligne de commande, de MySQL et des commandes SQL. Il serait
également utile de tester le script avec une base de données de test pour s'assurer de son
bon fonctionnement avant de l'utiliser sur une base de données réelle.
 Les étapes pour réaliser la base de donnes :
Pour créer une base de données MySQL bien élaborée pour l'utilisation dans un script de
sauvegarde automatisé, voici quelques étapes à suivre :
1. Ouvrez un terminal et connectez-vous à MySQL en utilisant la commande mysql -u [nom
d'utilisateur] -p.
2. Créez une nouvelle base de données en utilisant la commande suivante : CREATE
DATABASE [nom_de_la_base_de_données];
3. Utilisez cette nouvelle base de données en exécutant la commande USE
[nom_de_la_base_de_données];
4. Créez des tables pour stocker les données en utilisant des commandes SQL de
création de table standard. Assurez-vous que les tables ont des noms explicites et des
colonnes appropriées pour stocker les données désirées.
5. Ajoutez des données à vos tables en utilisant des commandes SQL d'insertion de
données standard.
6. Créez des vues pour permettre de générer des statistiques sur la base de données en
utilisant des commandes SQL de création de vue standard. Assurez-vous que les vues
ont des noms explicites et qu'elles sélectionnent les données appropriées pour
générer les statistiques désirées.
7. Utilisez des commandes SQL de sélection standard pour vérifier que les données sont
correctement stockées dans les tables et les vues.
8. Configurez les permissions d'accès à la base de données pour permettre à l'utilisateur
de sauvegarde d'accéder à la base de données pour effectuer les sauvegardes.
9. Testez la connectivité à la base de données en utilisant la commande mysql -h
[nom_de_l'hôte] -P [numéro_du_port] -u [nom_d'utilisateur] -p
[nom_de_la_base_de_données]

Système d'Exploitation 2 4 Département d’Informatique


CLE Informatique
c. Realisation de Sckripte
 Realisation de Sckripte bash :
Script Bash qui permet d’effectuer automatiquement la sauvegarde d’une base de données
MySQL de façon périodique :
#!/bin/bash

# Verification de la connectivité au serveur


nc -z -w5 127.0.0.1 3306
if [ $? -eq 0 ]; then
echo "Connectivité au serveur MySQL établie"
else
echo "Impossible de se connecter au serveur MySQL"
exit 1
fi

# Récupération des informations de la base de données


DB_NAME="mydb"
DB_USER="myuser"
DB_PASSWORD="mypassword"

# Définition des répertoires de sauvegarde


BACKUP_DIR="/var/backups/mysql"
DATE=$(date +%Y-%m-%d)
BACKUP_NAME="$DB_NAME-$DATE.sql"
BACKUP_PATH="$BACKUP_DIR/$BACKUP_NAME"

# Vérification de l'existence d'un fichier de sauvegarde pour la même date


if [ -f $BACKUP_PATH ]; then
echo "Une sauvegarde pour la même date existe déjà"
exit 1
fi

# Création du répertoire de sauvegarde si nécessaire


if [ ! -d $BACKUP_DIR ]; then
mkdir -p $BACKUP_DIR
fi

# Exportation de la base de données


mysqldump -u $DB_USER -p$DB_PASSWORD $DB_NAME > $BACKUP_PATH

# Génération des statistiques de la base de données


STATS_NAME="$DB_NAME-$DATE.json"
STATS_PATH="$BACKUP_DIR/$STATS_NAME"
mysql -u $DB_USER -p$DB_PASSWORD $DB_NAME -e "SELECT COUNT(*) as 'Nombre de produits
vendus', SUM(prix) as 'Total des ventes' FROM ventes" | sed 's/\t/,/g' > $STATS_PATH

Ce script vérifie d'abord la connectivité au serveur MySQL (adresse par défaut : 127.0.0.1,
port : 3306).
Ensuite il récupère les informations de la base de données (nom, utilisateur, mot de passe)
et définit les répertoires de sauvegarde. Il vérifie ensuite l'existence d'un fichier de

Système d'Exploitation 2 5 Département d’Informatique


CLE Informatique
sauvegarde pour la même date, il crée le répertoire de sauvegarde si nécessaire, puis
exporte la base de données dans un fichier .sql avec mysqldump.
Enfin, il génère des statistiques de la base de données (nombre de produits vendus, total des
ventes) sous forme de fichier JSON.
Il est possible de paramétrer les informations
 Realisation de Sckripte Sql :
code SQL qui crée une base de données appelée "sales_db" avec des tables pour stocker des
informations sur les ventes, les produits et les clients :
CREATE DATABASE sales_db;
USE sales_db;

CREATE TABLE sales (


sale_id INT AUTO_INCREMENT PRIMARY KEY,
product_id INT,
customer_id INT,
sale_date DATE,
sale_quantity INT,
sale_total DECIMAL(10,2)
);

CREATE TABLE products (


product_id INT AUTO_INCREMENT PRIMARY KEY,
product_name VARCHAR(255),
product_price DECIMAL(10,2),
product_quantity INT
);

CREATE TABLE customers (


customer_id INT AUTO_INCREMENT PRIMARY KEY,
customer_name VARCHAR(255),
customer_email VARCHAR(255)
);

Ce code crée une base de données nommée "sales_db" avec trois tables: "sales", "products"
et "customers". La table "sales" contient des informations sur les ventes, telles que l'ID de
vente, l'ID de produit, l'ID de client, la date de vente, la quantité de vente et le total de
vente. La table "products" contient des informations sur les produits, telles que l'ID de
produit, le nom du produit, le prix du produit et la quantité de produit. La table "customers"
contient des informations sur les clients, telles que l'ID de client, le nom du client et l'e-mail
du client.

Système d'Exploitation 2 6 Département d’Informatique


CLE Informatique

Vous aimerez peut-être aussi