Vous êtes sur la page 1sur 31

SUPPORT FORMATION: ADMINISTRATION DE

MYSQL
MARCHE N°19/00033/M/MINFI/SG/DRF/SDBM/SM/IPPM DU 08 OCTOBRE 2019 PASSE SUIVANT
AUTORISATION N° 004857/L/MINMAP/SG/DGMAS/DMSPI/CE2 DU 16 SEPTEMBRE 2019
RELATIF A LA SECURISATION DES RECETTES DE L’ETAT PAR AGREGATION DES MOYENS DE
PAIEMENTS AU CAMEROUN

Jour 4: MOTEURS DE STOCKAGE ET PLUG-INS

GAMO NANA Randolph- Database Training Mentor

MOA: MINFI MOE: SPRINTPAY


4.1 Les objectifs de la leçon
À la fin de cette leçon, vous serez capable de :
• définir et décrire le Moteur de Stockage InnoDB;
• implémenter les transactions ;
• Sauvegarder les Bases avec la commande Mysqldump ;
• Automatiser les sauvegardes.

2
4.2 Les Moteurs de Stockage
• Un moteur de stockage détermine la manière dont les données sont
stockées dans les tables
• Il existe plusieurs moteurs de stockage dans MySQL dont : MyISAM,
InnoDB, CSV, ISAM. Chaque table peut utiliser un moteur différent
au sein d’une base. Ceci afin d’optimiser l’utilisation de chaque table.
• Pour voir les différents moteurs de stockage utilisez la commande :
show engines; ou
select * from information_schema.engines

3
4.2 Les Moteurs de Stockage
• MyISAM a été le moteur de stockage par défaut jusqu’à la version
5.5.5 de MySQL. Il est le plus simple à utiliser et à mettre en œuvre. Il
utilise plusieurs fichiers qui grandissent au fur et à mesure que la base
grossit. Il ne supporte pas les transactions, ni les clefs étrangères;
• InnoDB est le moteur par défaut depuis MySQL 5.6. Lorsque vous
créez une table dans MySQL sans spécifier un moteur, MySQL utilise
une table InnoDB.
• InnoDB gère les transactions et les clefs étrangères (et donc l'intégrité
de ses tables). En contrepartie, les bases qui l'utilisent occupent bien
plus d'espace sur le disque.
4
4.2 Les Moteurs de Stockage
• Lorsque vous créez une table, précisez le moteur de stockage avec le
mot clé ENGINE :
Create table nom_table (colonne1 description_colonne1, colonne2
description_colonne2 …]) [ENGINE=moteur]

• Exemple :
create table titulaire_compte ( id int auto_increment, nom
varchar (45), prenom varchar (45), primary key
(id)) ENGINE=InnoDB;
5
4.2 Les Moteurs de Stockage
• Pour voir sur quel moteur de stockage une table repose, utilisez les
informations dans la base :

• Exemple : pour visualiser les moteurs de stockage utilisé par les


tables de base de données contribuable utilisez :
select table_name, engine
from information_schema.tables
where table_schema = ‘contribuable’;

6
4.3 Comment Implémenter une transaction
• Une transaction est un ensemble de requêtes qui sont exécutées en
un seul bloc.
• Ainsi, si une des requêtes du bloc échoue, on peut décider d’annuler
tout le bloc de requêtes
• Sans transactions, certaines opérations risqueraient d’être à moitié
réalisées, et la moindre erreur, la moindre interruption pourrait avoir
des conséquences énormes. 

7
4.3 Comment Implémenter une transaction
• Exemple :
Les cas des transactions OM
Imaginez que M. GAMO fait un virement de 30000 FCFA à Mme
GAMO via OM. Il saisit tous les codes USSD, puis valide. L'application
de la banque commence à traiter le virement quand soudain, une
violente panne de courant provoque l'arrêt des serveurs de la banque.

Deux jours plus tard, M. GAMO reçoit un coup de fil de Mme GAMO,
très énervé, qui lui demande pourquoi le paiement convenu n'a
toujours pas été fait. Intrigué, M. GAMO va vérifier son compte, et
constate qu'il a bien été débité de 30000 FCFA.
8
4.3 Comment Implémenter une transaction
• Que s’est t’il passé:
Normalement, le traitement d'un virement est plutôt simple, deux étapes suffisent :

étape 1 : on retire le montant du virement du compte du donneur d'ordre ;

étape 2 : on ajoute le montant du virement au compte du bénéficiaire.

Seulement voilà, pas de chance pour M. GAMO, la panne de courant qui a éteint les
serveurs est survenue pile entre l'étape 1 et l'étape 2. Du coup, son compte a été débité,
mais le compte de Mme. GAMO n'a jamais été crédité.

La banque de M. GAMO n'utilisait pas les transactions. Si cela avait été le cas, la seconde
requête du traitement n'ayant jamais été exécutée, la première requête n'aurait jamais été
validée.
9
4.3 Comment Implémenter une transaction
• Voici un schéma qui devrait vous éclairer sur le principe des
transactions. On démarre une transaction.

On exécute les requêtes désirées une à une.

Si une des requêtes échoue, on annule toutes les


requêtes, et on termine la transaction.

Par contre, si à la fin des requêtes, tout s'est bien


passé, on valide tous les changements, et on termine
la transaction.

Si le traitement est interrompu (entre deux requêtes


par exemple), les changements ne sont jamais validés,
et donc les données de la base restent les mêmes
qu'avant la transaction
10
4.3 Comment Implémenter une transaction
• Lorsque l’on valide les requêtes d’une transaction, on dit aussi que
l'on commite les changements. À l'inverse, l'annulation des requêtes
s'appelle un rollback.
• Par défaut, MySQL ne travaille pas avec les transactions
• Chaque requête effectuée est directement commitée (validée). On ne
peut pas revenir en arrière. On peut donc considérer que chaque
requête constitue une transaction qui est automatiquement commitée.
Par défaut, MySQL est donc en mode "autocommit"

11
4.3 Comment Implémenter une transaction
• Pour quitter ce mode, il suffit d’executé la requête suivante :
SET autocommit=0 ou SET autocommit=OFF
• Une fois que vous n’êtes plus en autocommit, chaque modification de
donnée devra être commitée pour prendre effet. Tant que vos
modifications ne sont pas validées, vous pouvez à tout moment les
annuler (faire un rollback).
• Les commandes pour commiter et faire un rollback sont relativement
faciles à retenir :
COMMIT; -- pour valider les requêtes
ROLLBACK; -- pour annuler les requêtes
12
4.3 Comment Implémenter une transaction
Démarrer explicitement une transaction
• En désactivant le mode autocommit, en réalité, on démarre une
transaction. Et chaque fois que l’on fait un rollback ou un commit (ce
qui met fin à la transaction), une nouvelle transaction est créée
automatiquement, et ce tant que la session est ouverte.
• Il est également possible de démarrer explicitement une transaction,
auquel cas on peut laisser le mode autocommit activé, et décider au
cas par cas des requêtes qui doivent être faites dans une transaction.
• Repassons donc en mode autocommit qui est le mode par défaut de
MySQL, utilisez :
SET autocommit=1; ou SET autocommit=ON ;
13
4.3 Comment Implémenter une transaction
Démarrer explicitement une transaction
• Pour démarrer une transaction, il suffit de lancer la commande suivante :
START TRANSACTION ou BEGIN WORK ou BEGIN
• Dans l’exemple suivant, nous implémentons une transaction :
START TRANSACTION;
INSERT INTO contribuable Values(1, 'Ateba Pierre','12/05/2010');
INSERT INTO contribuable Values(2, 'Fotso Ahmadou','18/12/2008');
COMMIT;
•  Dans cet exemple, une transaction est initiée avec la commande START
TRANSACTION. Deux inserts sont exécutés et ensuite un Commit pour
valider la transaction. Vous pouvez observer le résultat en utilisant :
SELECT * from contribuable
14
4.3 Comment Implémenter une transaction
Démarrer explicitement une transaction
• Exemple 2 :
START TRANSACTION;
INSERT INTO contribuable Values(1, ' Mba Ledoux','13/08/2009');
INSERT INTO contribuable Values(2, 'KOKE
Marcellin','11/04/2010');
ROLLBACK;
• en observant le résultat de cette requête, vous vous rendez compte
que les inserts n’ont pas été validés
SELECT * from contribuable
15
4.4 Comment Implémenter une transaction
Jalon de transaction
• Lorsque l'on travaille dans une transaction et que l'on constate que certaines requêtes
posent problème, on n'a pas toujours envie de faire un rollback depuis le début de la
transaction, annulant toutes les requêtes alors qu'une partie aurait pu être validée.
• Les jalons de transaction sont des points de repère qui permettent d'annuler toutes les
requêtes exécutées depuis ce jalon, et non toutes les requêtes de la transaction.
• Syntaxe :
SAVEPOINT nom_jalon;
-- Crée un jalon avec comme nom "nom_jalon"
ROLLBACK [WORK] TO [SAVEPOINT] nom_jalon;
-- Annule les requêtes exécutées depuis le jalon "nom_jalon", WORK et
SAVEPOINT ne sont pas obligatoires
RELEASE SAVEPOINT nom_jalon;
-- Retire le jalon "nom_jalon" (sans annuler, ni valider les requêtes faites depuis)
16
4.4 Comment Implémenter une transaction
Exemple
• Exécutez les requêtes suivantes :
START TRANSACTION;
INSERT INTO contribuable (nom, date_naissance) VALUES ('Frank', '03/11/1985’);
SAVEPOINT jalon1;
INSERT INTO contribuable (nom, date_naissance) VALUES ('Momo', '13/12/1985');
ROLLBACK TO SAVEPOINT jalon1;
INSERT INTO contribuable (nom, date_naissance) VALUES ('Mimi', ‘03/12/1985’);
COMMIT;
• On n’utilise qu’une seule transaction, on valide à la fin, et pourtant, la seconde
insertion n’a pas été faite finalement, puisqu’elle a été annulée grâce au jalon. Seuls
Frank et Mimi existent

17
4.4. Comment Sauvegarder et Restaurer les données
• La commande Mysqldump
la commande utilisée pour faire des backup est :
mysqldump [options] > dump.sql
• il existe trois façons générales d’invoquer mysqldump :
• pour sauvegarder un serveur
• pour sauvegarder une ou plusieurs BD
• pour sauvegarder une ou plusieurs tables

• mysqldump [options] --all-databases > nomfichier.sql


mysqldump [options] -- databases [db_name1 db_name2 … ] > nomfichier.sql
mysqldump [options] db_name [tbl_name] > nomfichier.sql

Par défaut, mysqldump verrouille toutes les tables avant de faire la sauvegarde

18
4.4. Comment Sauvegarder et Restaurer les données
• utilisez la commande suivante pour sauvegarder toutes les bases de
données
mysqldump -u <username> -h hote -p --all-databases >
all_databases.sql
• Exemple : pour sauvegarder votre serveur utilisez :
mysqldump -u root -h localhost -p --all-databases >
all_databases.sql

19
4.4. Comment Sauvegarder et Restaurer les données

• utilisez la commande suivante pour sauvegarder une base de données


mysqldump -u <username> -h hote -p –databases nom_base >
nom_base.sql
• Exemple 1 : pour sauvegarder la base fiscalite utilisez :
mysqldump -u root -h localhost -p --databases fiscalite >
fiscalite.sql

Vous pouvez ouvrir ce fichier et voir son contenu.

20
4.4. Comment Sauvegarder et Restaurer les données


Exemple 2 : pour sauvegarder la base fiscalite avec le nom du fichier
qui porte la date de la sauvegarde:
mysqldump -u root -h localhost -p fiscalite > fiscalite-$(date +%d-%m-
%Y).sql

Si la sauvegarde a lieu le 06 juillet 2020, le fichier portera nom fiscalite-06-07-
2020.sql

Pour que le fichier contient l’heure et la minute de sauvegarde utilisez %d-%m-
%Y-%Hh-%Mmin

21
4.4. Comment Sauvegarder et Restaurer les données

• utilisez la commande suivante pour sauvegarder une table


mysqldump -u <username> -h hote -p nom_base nom_table >
nom_table.sql
• Exemple : pour sauvegarder la table contribuable de la base fiscalite
serveur utilisez :
mysqldump -u root -h localhost -p fiscalite contribuable >
contribuable.sql

22
4.4. Comment Sauvegarder et Restaurer les données

Restauration
• pour restaurer une sauvegarde utilisez mysql (rassurez vous au
préalable d’avoir crée la base de données) :
mysql -u <user> -h <hote> -p nombd < nombd.sql

Exemple : pour restaurer la base fiscalite:
mysql -u root -p -e "create database fiscalitetest";
mysql -u root -p fiscalitetest < fiscalite.sql

On crée d’abord la base, puis on la restaure les informations

23
4.5. Automatiser une sauvegarde

Pour automatiser une sauvegarde vous devez :


1. Configurez l’accès automatique au serveur
2. Créez la destination de sauvegarde
3. Préparez la commande de sauvegarde
4. Automatisez la tache de sauvegarde à travers un cron.

24
4.5. Automatiser une sauvegarde

1. Configuration de l’accès automatique au serveur



Pour ce faire, créez un fichier .my.cnf dans votre home directory :
sudo nano ~/.my.cnf


Copiez et collez les lignes suivante dans le fichier, en mettant les valeurs
correspondante :
[client]
user=utilisateur_db
password=mot_de_passe

Restreindre l’accès à ce fichier, à vous uniquement l’accès :
sudo chmod 644 ~/.my.cnf
25
4.5. Automatiser une sauvegarde

2. Création d’un répertoire pour stocker les sauvegardes



Créez un répertoire pour stocker les sauvegardes :
mkdir ~/db_backups

3. Préparation de la commande de sauvegarde :



La commande pour la sauvegarde est :

mysqldump -u nom-utilisateur -h hote nom_bd > ~/db_backups/ma_bd-$
(date +%d-%m-%Y).sql

26
4.5. Automatiser une sauvegarde

4. Création du cron

Ouvrez votre fichier crontab :
crontab -e


Ajoutez la ligne suivante, pour faire une sauvegarde tous les jours à
03h du matin :
0 3 * * * mysqldump -u nom-utilisateur -h hote nom_bd >
~/db_backups/ma_bd-$(date +\%Y\%m\%d).sql

27
4.5 Référence et Lecture Additionnelle
• https://www.mysqltutorial.org/mysql-table-locking/
• https://www.tutorialspoint.com/How-can-we-implement-a-MySQL-tr
ansaction
• https://openclassrooms.com/fr/courses/1959476-administrez-vos-bas
es-de-donnees-avec-mysql/1970063-transactions
• https://www.mysqltutorial.org/mysql-transaction.aspx/
• https://linuxize.com/post/how-to-back-up-and-restore-mysql-
databases-with-mysqldump/

28
QUESTIONS
4.6 Exercices
1. la commande pour faire une sauvegarde est
A) mysql B ) mysqldump C) mysqlbackup D) mysqlsave
2. la commande pour restaurer est
A) mysql B ) mysqldump C) mysqlbackup D) mysqlsave
3. Considérez la requête ci-après :
START TRANSACTION;
INSERT INTO contribuable Values(1, ' Mba Ledoux','13/08/2009');
INSERT INTO contribuable Values(2, 'KOKE Marcellin','11/04/2010');
ROLLBACK;
En exécutant, cette requête, deux lignes seront insérés dans la table contribuable. Vrai ou Faux ?
Justifiez votre réponse
30
4.7 Travaux Pratiques
1. Voir fichier

31

Vous aimerez peut-être aussi