Vous êtes sur la page 1sur 82

Administration de Base de Données

2. Chapitre 2 : Le Serveur MySQL :

MySQL est donc un Système de Gestion de Bases de Données Relationnelles, qui utilise le langage SQL. C’est un des
SGBDR les plus utilisés. Sa popularité est due en grande partie au fait qu’il s’agit d’un logiciel Open Source, ce qui signifie
que son code source est librement disponible et que quiconque qui en ressent l’envie et/ou le besoin peut modifier MySQL
pour l’améliorer ou l’adapter à ses besoins. Une version gratuite de MySQL est par conséquent disponible. À noter qu’une
version commerciale payante existe également.

2.1. Installation de MySQL : https://dev.mysql.com/downloads/mysql/#downloads

Maintenant qu’on sait à peu près de quoi on parle, il est temps d’installer MySQL sur l’ordinateur, et de commencer à
l’utiliser. Au programme de ce chapitre : Installation de MySQL, Connexion et déconnexion au client MySQL, Création d’un
utilisateur, Bases de la syntaxe du langage SQL, Introduction aux jeux de caractères et aux interclassements.

Il existe plusieurs manières d’utiliser MySQL. La première, que je vais utiliser tout au long du tutoriel, est l’utilisation
en ligne de commande :

 Eh bien il s’agit d’une fenêtre toute simple, dans laquelle toutes les instructions sont tapées à la main. Pas de bouton,
pas de zone de saisie. Juste votre clavier. Les utilisateurs de Linux connaissent très certainement. Pour Mac, il faut
utiliser l’application ”Terminal” que vous trouverez dans Applications > Utilitaires. Quant aux utilisateurs de
Windows, c’est le ”Command Prompt” que vous devez trouver (Démarrer > Tous les pro grammes > Accessoires) ;
 Si l’on ne veut pas utiliser la ligne de commande (il faut bien avouer que ce n’est pas très sympathique cette fenêtre
monochrome), on peut utiliser une interface graphique, qui permet d’exécuter pas mal de choses simples de manière
intuitive sur une base de données. Comme interface graphique pour MySQL, on peut citer MySQL Workbench,
PhpMyAdmin (souvent utilisé pour créer un site web en combinant MySQL et PHP) ou MySQL Front par exemple.

Pourquoi utiliser la ligne de commande? C’est vrai ça, pourquoi ? Si c’est plus simple et plus convivial avec une
interface graphique ? Deux raisons :

 primo, parce que je veux que vous maîtrisiez vraiment les commandes. En effet, les interfaces graphiques permettent
de faire pas mal de choses, mais une fois que vous serez bien lancés, vous vous mettrez à faire des choses subtiles et
compliquées, et il ne serait pas étonnant qu’il vous soit obligatoire d’écrire vous-mêmes vos requêtes ;
 ensuite, parce qu’il est fort probable que vous désiriez utiliser MySQL en combinaison avec un autre langage de
programmation (si ce n’est pas votre but immédiat, ça viendra probablement un jour). Or, dans du code PHP (ou Java,
ou Python, etc.), on ne va pas écrire ”Ouvre PhpMyAdmin et clique sur le bon bouton pour que je puisse insérer

Installation du logiciel Pour télécharger MySQL, vous pouvez vous rendre sur le site suivant : Windows. Téléchargez
MySQL avec l’installeur (MSI Installer), puis exécutez le fichier téléchargé. L’installeur démarre et vous guide lors de
l’installation. Lorsqu’il vous demande de choisir entre trois types d’installation, choisissez ”Typical”. Cela installera tout ce
dont nous pourrions avoir besoin. L’installation se lance. Une fois qu’elle est terminée, cliquez sur ”Terminer” après vous être
assurés que la case ”lancer l’outil de configuration MySQL” est cochée Dans cet outil de configuration, choisissez la
configuration standard, et à l’étape suivante, cochez l’option ”Include Bin Directory in Windows PATH. On vous propose
alors de définir un nouveau mot de passe pour l’utilisateur ”root”. Choisissez un mot de passe et confirmez-le. Ne cochez
aucune autre option à cette étape. Cliquez ensuite sur ”Execute” pour lancer la configuration.

Prérequis système sur Windows. Pour utiliser MySQL sur Windows, vous avez besoin de :

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
 Un système d'exploitation 32 bits Windows, tels que 9x, Me, NT, 2000 ou XP. La famille NT (Windows
NT/2000/XP) vous permet de faire fonctionner MySQL comme un service. See Section 2.2.9.1, « Lancer MySQL
comme un service Windows » ;
 WinZip ou un programme ZIP pour décompresser l'archive .zip ;
 Assez d'espace sur votre disque pour décompresser l'archive, et pour créer les bases selon vos besoins ;
 Si vous envisagez d'utiliser MySQL via ODBC, vous aurez aussi besoin du pilote MyODBC. See Section 25.1.1.1, «
Qu'est-ce que ODBC?

2.2. Variables de Serveur Dynamiques :

A partir de la version 4.0.3, nous fournissons un meilleur accès à beaucoup de variables système et variables de
connexion. On peut changer la plupart d'entre elle sans avoir à stopper le serveur. Le serveur mysqld dispose de deux types de
variables. Les variables globales, qui affectent l'ensemble du serveur. Les variables de session qui affectent des connexions
individuelles. Lorsque mysqld démarre, toutes les variables globales sont initialisées à partir des arguments passés en ligne de
commande et des fichiers de configuration. Vous pouvez changer ces valeurs avec la commande SET GLOBAL. Lorsqu'un
nouveau thread est créé, les variables spécifiques aux threads sont initialisées à partir des variables globales et ne changeront
pas même si vous utilisez la commande SET GLOBAL.

Le serveur entretient aussi un jeu de variables de session pour chaque client qui se connecte. Les variables de session
d'un client sont initialisées au moment de la connexion, en utilisant les valeurs correspondantes globales. Pour les variables de
session qui sont dynamiques, le client peut les changer avec la commande SET SESSION var_name. Modifier les variables
de session d'une connexion ne requiert aucun droit spécifique, mais le client ne peut changer que ses propres variables de
session, et non pas celle d'un autre client.

Une modification à une variable globale est visible à tous les clients qui accèdent à cette variable. Mais, cela n'affecte
la variable de session correspondante que lors de la prochaine connexion. Les connexions déjà établies ne sont pas affectées
par un changement de variable globale. (pas même le client qui a émis la commande SET GLOBAL).

Le serveur entretient de nombreuses variables système qui indiquent comment il est configuré. Toutes les variables
ont des valeurs par défaut. Elles peuvent être configurées au lancement du serveur, avec les options de ligne de commande, ou
bien durant l'exécution, avec la commande SET.

Depuis MySQL version 4.0.3, le serveur mysqld entretient deux types de variables. Les variables globales, qui affectent les
opérations générales du serveur. Et les variables de session qui affectent les comportements individuels des connexions.
Depuis MySQL version 4.0.3, de nombreuses variables système sont dynamiques, et peuvent être modifiées durant l'exécution
avec les commandes SET GLOBAL ou SET SESSION. Vous pouvez aussi sélectionner leur valeurs avec SELECT. See
Section 9.4, « Variables système ». La table suivante montre la liste complète de toutes les variables dynamiques. La dernière
colonne indique si les options GLOBAL ou SESSION, ou les deux, s'appliquent.

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
Les variables qui sont marquées comme ``string'' prennent une valeur de chaîne de caractères. Les variables qui sont
marquées comme ``numeric'' prennent un nombre. Les variables qui sont marquées comme ``boolean'' peuvent prendre 0 ou
1, ON ou OFF. Les variables qui sont marquées comme ``enumeration'' doivent normalement prendre l'une des valeurs
possible de cette variable, mais elles peuvent aussi prendre le numéro de l'élément dans l'énumération. Pour les systèmes à
énumération, la première énumération est 0. Cela est différent des colonnes de type ENUM, pour qui la première valeur est la
1.

2.3. Modes SQL du Serveur :

Le serveur MySQL peut fonctionner avec différent modes SQL, et, depuis MySQL 4.1, il peut appliquer ces modes au
niveau de la connexion du client. Cela permet aux applications d'adapter le comportement du serveur en fonction de leurs
attentes. Le mode définit quelle syntaxe SQL MySQL doit supporter, et quels types de vérification il doit faire. Cela rend plus
facile l'utilisation de MySQL dans différents environnement, et la connexion avec les autres serveurs de base de données.

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
Vous pouvez donner un mode SQL par défaut au démarrage de mysqld avec l'option --sql-mode="modes" . Depuis MySQL
4.1, vous pouvez aussi changer le mode après le démarrage en modifiant la variable sql_mode avec la commande SET
[SESSION|GLOBAL] sql_mode='modes' . Modifier la variable GLOBAL affecte les opérations de tous les clients qui se
connectrons. En modificant la variable SESSION , cela n'affectera que le client courant. modes est une liste de modes
différents, séparés par des virgules ( ',' ). Vous pouvez lire le mode courant anvec la commande SELECT @@sql_mode . La
valeur par défaut est vide (par de modes configurés). La valeur peut aussi être vide ( --sql-mode="" ) si vous voulez la remettre
à zéro. La liste suivante présente les différents modes supportés :

Le comportement par défaut du serveur MySQL est assez permissif notamment en ce qui concerne la cohérence des
données. Le postulat est en quelque sorte : « Les données reçues sont cohérentes, les vérifier est donc superflu », ce qui dans la
réalité n’est pas toujours le cas. Si votre application vérifie toutes les données, cela a un sens de dispenser le serveur de ces
vérifications qui peuvent être coûteuses pour les performances. Par contre si ce n’est pas le cas ou si les données peuvent être
accédées par d’autres biais que l’application vous devrez faire les vérifications au niveau du serveur. Par exemple, si une
chaîne de caractères est trop longue pour être insérée dans une colonne, le serveur exécutera quand même l’insertion en
tronquant la chaîne de caractères et en renvoyant un avertissement (warning) au client lui disant que les données ont été
tronquées pour que l’insertion réussisse. Cela pose deux problèmes majeurs pour la plupart des applications. Premièrement la
donnée stockée dans la table n’est pas celle envoyée par le client, la cohérence des données n’est donc pas assurée.
Deuxièmement, notre expérience nous a montré que très peu de développeurs traitent les avertissements...

2.4. Fichiers Journaux Et d'Etat :

J'ai lu que le serveur Mysql crée un fichier journal dans lequel il conserve un enregistrement de toutes les activités -
comme quand et quelles requêtes sont exécutées. Quelqu'un peut-il me dire où il existe dans mon système? Comment puis-je le
lire? Fondamentalement, je dois sauvegarder la base de données avec différentes entrées [sauvegarde entre deux dates], donc je
pense que je dois utiliser le fichier journal ici, c'est pourquoi je veux le faire ...Je pense que ce journal doit être sécurisé d'une
manière ou d'une autre, car des informations sensibles telles que les noms d'utilisateur et les mots de passe peuvent être
enregistrées [si une requête l'exige]; alors peut-il être sécurisé, difficile à voir?

J'ai un accès root au système, comment puis-je consulter le journal? Lorsque j'essaie d'ouvrir /var/log/mysql.log, il est
vide. Ceci est mon fichier de configuration: Voici un moyen simple de les activer. Dans mysql, nous avons souvent besoin de
voir 3 journaux qui sont le plus souvent nécessaires au cours du développement d’un projet. The Error Log. Il contient des
informations sur les erreurs qui se produisent pendant l’exécution du serveur (également démarrage et arrêt du serveur).

The General Query Log. Ceci est un compte rendu général de ce que fait mysqld (connecter, déconnecter, requêtes)

The Slow Query Log. Il se compose d'instructions SQL "lentes" (comme indiqué par son nom). Par défaut, aucun
fichier journal n'est activé dans MYSQL. Toutes les erreurs seront affichées dans le syslog. (/ Var/log/syslog). Pour les activer,
suivez les étapes ci-dessous.

 step1: Accédez à ce fichier (/etc/mysql/conf.d/mysqld_safe_syslog.cnf ) et supprimez ou commentez ces lignes ;


 step2: Allez dans le fichier de configuration mysql (/etc/mysql/my.cnf) et ajoutez les lignes suivantes

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
2.5. Journalisation Binaire :

Le journal binaire ou binlog est chargé de stocker, sous un format binaire, toutes les requêtes qui modifient les objets
de la base de données (INSERT, UPDATE, DELETE, DROP, CREATE, ALTER...). C'est l'élément central de la réplication
MySQL (voir chapitre Réplication). Le serveur MySQL utilise quatre types de journaux, qui ont chacun leurs spécialisations.
Le journal binaire (binary log), le journal des requêtes lentes (slow query log), le journal général (general query log) et le
journal des erreurs (error log), le seul des quatre à être activé par défaut. Le journal binaire ou binlog est chargé de stocker,
sous un format binaire, toutes les requêtes qui modifient les objets de la base de données (INSERT, UPDATE, DELETE,
DROP, CREATE, ALTER...). C’est l’élément central de la réplication MySQL (voir chapitre Réplication). Il est également
très utile à la restauration des données (voir chapitre Sauvegarde et restauration). Pour activer la journalisation binaire utilisez
l’option log-bin, et pour définir son fichier d’index il faut paramétrer l’option log-bin-index. Ce fichier, qui contient la liste de
tous les journaux binaires depuis la dernière purge, permet au serveur de connaître le nom du fichier courant qui est obtenu
avec la commande SHOW MASTER...

3. Chapitre 3 : Les Clients MySQL :

Pour administrer MySQL, il est possible d’utiliser à la fois le mode console avec mysqladmin et le mode graphique
sous MySQL Workbench. L’utilitaire mysqladmin permet d’exécuter des commandes d’administration. Il est alors possible
d’extraire la configuration système, de réaliser des opérations au niveau de l’instance (arrêt...) et sur les objets eux-mêmes
(création de base, suppression de table...). La commande mysqladmin --help permet de lister l’ensemble des actions qui
peuvent être effectuées.

3.1. Présentation des Clients d'Administration :


3.1.1. MySQL Workbench :

L’outil MySQL Workbench est une console graphique permettant aux administrateurs, développeurs et architectes de
modéliser les données, développer du SQL, interroger, administrer des instances, administrer des bases ou réaliser toute
opération d’administration comme les sauvegardes. MySQL Workbench 6.0 offre une multitude de composants qui peuvent
permettre aux développeurs d’analyser ou de conceptualiser un schéma relationnel à la norme MERISE. MySQL Workbench
(anciennement MySQL administrator) est un logiciel de gestion et d'administration de bases de données MySQL créé en 2004.
Via une interface graphique intuitive, il permet, entre autres, de créer, modifier ou supprimer des tables, des comptes
utilisateurs, et d'effectuer toutes les opérations inhérentes à la gestion d'une base de données. Pour ce faire, il doit être connecté
à un serveur MySQL. L'une des spécificités de ce client de gestion de base de données réside dans sa possibilité de visualiser
en temps réel, via des indicateurs graphiques, la charge du serveur MySQL, le pourcentage d'occupation en mémoire, les
connexions courantes, le nombre de requêtes continues sur une base de données. Il permet aussi de voir l'occupation disque,
ainsi que l'espace alloué aux tables et aux fichiers de logs. Enfin, les tables sont disponibles sous forme de diagramme,
permettant ainsi la modélisation des données.

phpMyAdmin

DBDesigner

Adminer

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
3.1.2. Utilisation du Client MySQL :

PhpMyAdmin (PMA) est une application Web de gestion pour les systèmes de gestion de base de données MySQL et
MariaDB, réalisée principalement en PHP et distribuée sous licence GNU GPL. PhpMyAdmin est un outil qui nous permet de
visualiser rapidement l'état de notre base de données et de la modifier, sans avoir à écrire de requêtes SQL. Il s'agit de l'une des
plus célèbres interfaces pour gérer une base de données MySQL sur un serveur PHP. De nombreux hébergeurs, gratuits comme
payants, le proposent ce qui évite à l'utilisateur d'avoir à l'installer. Cette interface pratique permet d'exécuter, très facilement et
sans grandes connaissances en bases de données, des requêtes comme les créations de table de données, insertions, mises à
jour, suppressions et modifications de structure de la base de données, ainsi que l'attribution et la révocation de droits et
l'import/export. Ce système permet de sauvegarder commodément une base de données sous forme de fichier .sql et d'y
transférer ses données, même sans connaître SQL. Les requêtes SQL restent possibles, ce qui permet de les tester
interactivement lors de la création d'un site pour les utiliser ensuite en batch (c'est-à-dire en différé) une fois au point

3.2. Client MysqlAdmin :

Mysqladmin est un programme d'administration pour le démon mysqld. Il peut être utilisé pour : Surveiller ce que font
les clients MariaDB (liste de processus) ; Obtenez des statistiques d'utilisation et des variables du serveur MariaDB ;
Créer/supprimer des bases de données ; Vider (réinitialiser) les journaux, les statistiques et les tableaux ; Tuez les requêtes en
cours d'exécution. ; Arrêter le serveur (arrêt) ; Démarrer/arrêter les répliques ; Vérifier si le serveur est vivant (ping)

En utilisant les commandes mysqladmin , vous pouvez effectuer très facilement des tâches MySQL de base, telles que
définir/modifier le mot de passe root, surveiller les processus mysql, vérifier l'état du serveur MySQL, etc. Voici quelques
commandes 'mysqladmin' utiles qui peuvent être utilisées pour administrer le serveur MySQL. MySQLAdmin est un utilitaire
de ligne de commande pour MySQL Server qui est installé lors de l'installation du package MySQL.

Le client MySQLAdmin vous permet d'effectuer certaines fonctions administratives de base sur le serveur MySQL. Il
est utilisé pour créer une base de données, supprimer une base de données, définir un mot de passe root, modifier le mot de
passe root, vérifier l'état de MySQL, vérifier la fonctionnalité MySQL, surveiller les processus mysql et vérifier la
configuration du serveur. mysqladmin est un utilitaire pour exécuter des commandes d'administration. Vous pouvez l'utiliser
pour vérifier la configuration du serveur, créer et effacer des bases, etc. La syntaxe de mysqladmin est : shell> mysqladmin
[OPTIONS] command [command-option] command ...Le mysqladmin actuel supporte les commandes suivantes :

3.3. Connecteurs MySQL :

Le connecteur SQL vous permet de vous connecter aux bases de données suivantes et d'exécuter différentes actions
sur la base de données : PostgreSQL, SQL Server, MySQL, Oracle. mysql -h localhost -u root

Aller à /xampp/mysql/bin et trouver pour mysql. Exe ouvrir cmd, modifiez le répertoire mysq après l'écriture dans
cmd

mysql -h localhost -u root

mysql -uroot -p

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
//Bonus Note : vous ne devriez pas utiliser l'utilisateur root lorsque vous travaillez avec des bases de données. Vous souhaitez
créer un compte distinct (ex. cms_user) avec des privilèges spéciaux pour limiter les erreurs. pour ce faire, tapez:

GRANT ALL PRIVILEGES IN cms_database.*

TO 'cms_user'@'localhost'

IDENTITIED BY 'yourpassword'

double vérifier en utilisant la commande:

SHOW GRANT FOR 'cms_user'@localhost;

si vous avez déjà le nom de l'utilisateur et la base de données spécifique que vous souhaitez utiliser, modifier l'étape 2 de la
présente.

mysql -u cms_user -p cms_database

4. Chapitre 4 : Présentation des Types de Données :

Chaque champ est caractérisé par un type de données

Le type de données doit permettre de stocker toutes les

données du champ, quel que soit les enregistrements à

venir

Les différents types de données

● Texte

○ Chaine de caractère, textes longs

● Numérique

○ Entier, flotants

○ Attention aux valeurs approchées

● Date

○ Heure, Date, Mois …

● Enumérations

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
○ Homme-Femme, Pique-Carreau-Coeur-Trefle..

INT DOUBLE YEAR DATE TIME

NUMBER

FLOAT

DECIMAL

REAL

4.1. Les Métadonnées :

Une métadonnée est une donnée servant à définir ou décrire une autre donnée quel que soit son support. Un exemple type est
d'associer à une donnée la date à laquelle elle a été produite ou enregistrée, ou à une photo les coordonnées GPS du lieu où elle
a été prise

Au-delà du contenu des données elles-mêmes d'un système, il est souvent très

utile de connaître un minimum d'informations sur les données qu'on manipule. Ces données sur les données s'appellent des
métadonnées.

Dans le domaine qui nous concerne ici, il est important pour le développeur

d'appréhender le contexte des données qu'il souhaite consulter ou mettre à

jour. Il peut par exemple vouloir connaître :

– La liste de ses tables.

– Les noms et types des colonnes d’une de ses tables.

– Les tables accessibles, en lecture et en écriture.

– Le nom des bases de données accessibles.

– Les utilisateurs.

– Etc

Les métadonnées sont utiles dans bien des domaines. Que serait, en effet, une

liste de fichiers musicaux MP3 dispersés sur un lecteur quelconque, si l'on

n'avait pas d'informations sur les morceaux pour pouvoir les organiser, comme

le nom de l'artiste, de l'album, le genre, etc., et c'est la même chose pour les

fichiers photo JPEG… Heureusement, ces fichiers eux aussi contiennent des

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
métadonnées (respectivement nommées tag ID3 et données EXIF).

Vous pouvez vous demander MySQL les trois types d'informations suivants:

Requête Résultat Information: SELECT, UPDATE ou DELETE affecte le nombre de déclaration des dossiers.

base de données de l' information et des tableaux de données: contient la structure de base de données de l' information et des
tableaux de données.

MySQL informations sur le serveur: contient l'état actuel du numéro de version du serveur de base de données.

Dans l'invite de commande MySQL, nous pouvons facilement obtenir plus d'informations sur le serveur. Toutefois, si vous
utilisez Perl ou PHP langage de script, vous devez appeler la fonction pour obtenir une interface spécifique. Ensuite, nous
allons détailler.

Les commandes SHOW

Un dernier moyen simple et pratique (bien que rudimentaire il est vrai)

d'obtenir des méta-informations sur le serveur MySQL et les données qu'il

contient est d'utiliser une commande SHOW.

Remarque

La commande SHOW n'est pas à strictement parler une commande SQL,

même si elle s'utilise dans un interpréteur de commande SQL. Et bien que

rudimentaire, elle offre néanmoins plus d'informations que l'interface

graphique…

Cette commande a une syntaxe très simple et est utilisable avec n'importe

quel client SQL graphique ou non.

La syntaxe générale est la suivante :

SHOW nom_objet [LIKE 'chaine']

Obtenez les métadonnées du serveur

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
La syntaxe de commande suivante peut être utilisée dans l'invite de commande MySQL peut également être utilisé dans le
script, tels que les scripts PHP.

Commandement description

SELECT VERSION () La version du serveur

SELECT DATABASE () Le nom de base de données en cours (ou de l'air retour)

SELECT USER () Nom d'utilisateur actuel

SHOW STATUS server Status

SHOW VARIABLES Les variables de configuration de serveur

Accès aux métadonnées

1. Commandes spécifiques MySQL

a. Commandes SHOW

Vous pouvez avoir accès aux métadonnées, c’est-à-dire aux informations sur la manière dont sont structurées en particulier les
bases, les tables ou les colonnes, avec un certain nombre de commandes spécifiques utilisant le mot-clé SHOW. Parmi les
commandes SHOW les plus utiles, vous trouverez :

SHOW SCHEMAS/SHOW DATABASES : liste les bases de données de l’instance.

SHOW TABLES : liste les tables d’une base de données.

SHOW COLUMNS : donne les informations sur la structure d’une table.

SHOW KEYS (ou SHOW INDEX) : donne les index d’une table.

Pour SHOW COLUMNS et SHOW KEYS, vous devez préciser la table sur laquelle vous souhaitez obtenir des informations
en précisant une clause FROM

Outils de base pour la surveillance

1. SHOW PROCESSLIST

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
SHOW PROCESSLIST permet à tout utilisateur ayant le droit SUPER de voir l’activité de l’ensemble des clients connectés au
serveur. Cette commande vous donne beaucoup d’informations sur le trafic que reçoit votre serveur. Vous verrez quels sont les
clients connectés au moment de l’exécution de SHOW PROCESSLIST, les requêtes en cours d’exécution et les requêtes
verrouillées. Vous trouverez aussi l’identifiant de chaque connexion (colonne ID), ce qui vous permettra d’utiliser la
commande KILL si vous avez besoin d’arrêter en urgence l’exécution d’une requête.

L’affichage se fait en colonnes, comme le montre l’exemple suivant :

Outils de surveillance du système

1. Cacti

Cacti est un outil de surveillance disponible pour UNIX/Linux et Windows, qui vous permet d’obtenir des graphes sur divers
paramètres de votre serveur MySQL via une interface Web. Cacti est très simple à installer et à configurer, ce qui est très
appréciable si vous avez besoin de construire rapidement une solution graphique montrant l’évolution au cours du temps de la
performance de votre serveur.

Cacti fonctionne avec un système de modèles (templates) et vous pourrez très facilement trouver sur Internet des modèles pour
MySQL. Un très bon choix est de télécharger les modèles mis à disposition par Percona à l’adresse suivante :

4.2. Les Moteurs de Stockage :

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
Lorsqu’un site volumineux fonctionne lentement, le problème vient souvent d’une base de données non optimisée. Une place
pour chaque chose, chaque chose à sa place : une maxime qui vaut aussi pour le numérique. Si le contenu se développe en
permanence, il faut recourir à un système de gestion de base de données adapté, ou SGBD. Un SGBD bien connu, MySQL,
permet de travailler, de classer et de stocker à long terme et en toute simplicité de grandes quantités de données.

InnoDB joue un rôle très important pour stocker des données dans MySQL. InnoDB est un sous-système de stockage qui s’est
distingué, ces dernières années, pour ses performances et sa fiabilité supérieures à ses concurrents. Dans cet article, nous vous
présentons InnoDB, ses inconvénients et ses différences avec le moteur de stockage MyISAM.

MySQL est souvent décrié par de nombreux développeurs comme étant lent, ne gérant pas les relations ou les transactions, et
est souvent considéré à tort comme un mauvais outil.

Mais comme tout outil, il faut savoir le manipuler pour en tirer réellement profit.

Nous allons découvrir ici quelques facettes de MySQL assez peu connues des débutants et qui peuvent dans certains cas nous
changer la vie.

Ce tutoriel ne parle pas de la version Cluster de MySQL en raison de sa complexité et n'abordera donc pas le moteur de
stockage NDBCluster qui lui est associé.

La documentation MySQL pourra vous renseigner largement sur ce moteur

MySQL et ses drôles de moteurs

On appelle moteur de stockage l'ensemble des algorithmes utilisés par un SGBDR pour stocker les informations et y accéder
au moyen d'une requête SQL.

La plupart des SGBDR proposent un moteur unique, créé pour être le plus efficace possible dans tous les cas. MySQL et ses
forks (dont les plus connus sont MariaDB et Drizzle) se démarquent de leurs homologues en proposant à l'administrateur de la
base de choisir pour chaque table de sa base quel moteur il désire utiliser.

On se retrouve ainsi avec des bases où plusieurs moteurs peuvent coexister. C'est un choix de conception qui a ses avantages et
inconvénients.

Le développeur est libre de choisir la manière dont ses données sont stockées, mais en revanche, s'il ne fait pas attention à ce
qu'il fait, on peut très vite perdre pied sur de grosses bases de données et ne plus savoir au final quelle table utilise quel moteur.

Actuellement, MySQL dispose de nombreux moteurs, avec chacun une utilité particulière et des cas spécifiques d'utilisation.

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
Voici les principaux :

MyISAM

InnoDB

MEMORY (anciennement HEAP)

MERGE

BLACKHOLE

BerkeleyDB ou BDB

ARCHIVE

CSV

FEDERATED

Trois autres moteurs existent mais sont soit inutilisables, soit très complexes à appréhender et sortent du cadre de ce tutoriel.

De plus, par la nature modulaire des moteurs de stockages dans MySQL, des moteurs non officiels existent et peuvent être
ajoutés à ceux présents de base comme s'il s'agissait de plug-ins.

C'est le cas par exemple de Percona-XtraDB. Ce moteur est l'évolution non officielle d'InnoDB et est utilisé comme son
remplaçant dans MariaDB.

On citera aussi PBXT, OQGRAPH ou Aria (moteur par défaut de MariaDB).

Le mot clé ENGINE

Non, je ne parle pas ici d'un gros mal de gorge mais du mot anglais signifiant "moteur". :p

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
Voyons déjà quels sont les moteurs que MySQL met à notre disposition, ceci au moyen de la commande SHOW ENGINES;.

Cette commande nous affiche la liste complète des moteurs disponibles, une colonne Support nous signale si le moteur est
activé dans MySQL (YES/NO), une colonne Comment nous renseigne sur les spécificités du moteur. Les versions les plus
récentes de MySQL précisent aussi une colonne Transactions (YES/NO) si le moteur permet de gérer les transactions.

Présentation de MyISAM

MyISAM est disponible dans toutes les versions de MySQL à partir de la 3.23.0.

Pour les versions antérieures à la 5.5, c'est le moteur par défaut de MySQL.

Il s'agit d'un moteur non transactionnel assez rapide en écriture et très rapide en lecture. Ceci vient en grande partie du fait qu'il
ne gère pas les relations ni les transactions et évite donc des contrôles gourmands en ressources mais perd en sûreté ce qu'il
gagne en vitesse.

Il gère l'indexation des contenus, accélérant les recherches, et il est le seul moteur de MySQL permettant de créer des index
FULLTEXT sur les champs de type TEXT, rendant les recherches beaucoup plus efficaces qu'avec LIKE %.

Ceci en fait le moteur de prédilection pour les fonctions de recherche avancées.

De plus, MyISAM garde en cache des métadonnées sur la table et ses index, comme le nombre de lignes, la taille perdue à
cause de la fragmentation, etc.

Ainsi, une requete SELECT COUNT(*) FROM maTable; sera extrêmement rapide avec MyISAM car le résultat est déjà
obtenu à l'avance.

Avantages et inconvénients

Avantages :

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
 Très rapide en lecture

 Extrêmement rapide pour les opérations COUNT() sur une table entière

 Les index FULLTEXT pour la recherche sur des textes

Inconvénients :

 Pas de gestion des relations

 Pas de gestion des transactions

 Bloque une table entière lors d'opérations d'insertions, suppressions ou mise à jour des données

Présentation d'InnoDB

InnoDB est un moteur assez performant faisant partie de la famille des moteurs transactionnels.

Il ne gère pas les index en FULLTEXT contrairement à MyISAM.

InnoDB est un moteur relationnel. Il s'assure que les relations entre les données de plusieurs tables sont cohérentes et que si
l'on modifie certaines données, que ces changements soient répercutés aux tables liées.

InnoDB gère le verrouillage des données au niveau de la ligne, contrairement à MyISAM qui les gère au niveau de la table.
Ainsi, si vous écrivez des données sur la première ligne de la table, seule celle-ci sera bloquée et toutes les autres seront
disponibles en écriture et lecture.

InnoDB est plus lent que MyISAM, de par sa nature transactionnelle et relationnelle, même si les récentes modifications qu'il a
subi pour le passage à la version 5.5 l'ont rendu beaucoup plus performant qu'avant, et ses performances sont désormais très
proches de celles de MyISAM. Cependant, la sécurité qu'il apporte quant à la validité des données dans la base en fait un
moteur de choix lorsqu'il s'agit de stocker des données relationnelles ou nécessitant des transactions.

Avantages et inconvénients

Avantages :

Gestion des relations

Gestion des transactions

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
Verrouillage à la ligne et non à la table

Inconvénients :

Plus lent que MyISAM

Occupe plus de place sur le disque dur

Occupe plus de place en mémoire vive

Quelles différences entre InnoDB et MyISAM ?

Depuis sa version 5, MySQL supporte plus de dix moteurs de stockage différents, dont le plus connu est MyISAM. Ce moteur
enregistre les données de chaque table dans deux fichiers différents, un pour les fichiers, un pour l’index. ISAM signifie
Indexed Sequential Access Method (méthode d’accès séquentielle indexée) : il est impossible que plusieurs utilisateurs ou
applications écrivent dans une table en même temps. L’enregistrement séquentiel autorise une seule application à accéder en
écriture. Cependant, cette même table peut être lue par plusieurs utilisateurs en même temps. Lorsqu’il faut faire lire une
grande quantité de petits paquets de données rapidement et à plusieurs applications en même temps, MyISAM est imbattable.

InnoDB respecte la norme ACID (Atomicity Consistency Isolation Durability). Toutes les transactions s’effectuent isolées les
unes des autres, mais il est possible, si nécessaire, que plusieurs applications inscrivent des données en même temps dans une
même table. Lors de l’interrogation des données, la transaction SELECT, InnoDB est clairement supérieur ; en revanche, pour
l’accès en écriture à une base de données, les transactions INSERT et UPDATE, MyISAM est légèrement plus rapide. InnoDB
compense largement sa vitesse moindre par son protocole de transaction. MyISAM ne dispose d’aucune restauration
automatique en cas d’erreur : il faut donc toujours faire un back-up avant de modifier la base de données.

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
5. Chapitre 5 : Le Partitionnement :
5.1. Présentation Et Avantages du Partitionnement :

Cet article montre comment améliorer les performances de requêtes grâce à une utilisation judicieuse du
partitionnement de tables. Tous les exemples se basent sur MySQL, dont le support du partitionnement est l'une des grandes
nouveautés de la version 5.1.

Pour tout bon informaticien, le terme « partitionnement » n'est pas inconnu. Cependant, bien que le partitionnement
d'un disque dur soit devenu une banalité, l'utilisation du partitionnement en base de données reste encore rare.

Faisons tout d'abord un rappel sur le partitionnement d'un disque dur. L'intérêt de créer différentes partitions est de pouvoir
organiser les données : des partitions sont réservées aux fichiers des systèmes d'exploitation installés et d'autres pour les
données personnelles (photos, téléchargements…). Dans cet article, nous allons nous intéresser au partitionnement dans le
domaine des bases de données, et plus exactement au partitionnement de tables. Le but est, comme pour les disques durs,
d'organiser les données. Néanmoins, nous n'allons pas utiliser cette organisation pour simplifier nos requêtes, mais bien pour
en améliorer les performances !

Deux grands types de partitionnement sont utilisés pour partitionner une table :

 partitionnement horizontal : les enregistrements (= lignes) d'une table sont répartis dans plusieurs partitions. Il est
nécessaire de définir une condition de partitionnement, qui servira de règle pour déterminer dans quelle partition ira
chaque enregistrement.

Exemple : nous disposons d'une table Amis et nous choisissons de la partitionner en

deux partitions :

1. Les amis dont la première lettre du prénom est comprise entre A et M,

2. Les amis dont la première lettre du prénom est comprise entre N et Z.

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
Pour récupérer la liste complète de nos amis, il sera nécessaire de regrouper le contenu de nos deux partitions. Pour ce
faire, une simple opération d'union d'ensembles suffit ;

 partitionnement vertical : les colonnes d'une table sont réparties dans plusieurs partitions. Cela peut être pratique
pour écarter des données fréquemment utilisées d'autres auxquelles l'accès est plus rare.

Exemple : nous disposons d'une table Amis contenant les prénom et photo de chacun de nos amis. Les photos prenant de la
place et étant rarement accédées, nous décidons de les écarter des autres données.

Comme vous pouvez le remarquer, les deux partitions contiennent l'identifiant des amis. Cela est nécessaire afin de garder le
lien entre les données de chaque enregistrement. Ainsi, pour récupérer toutes les informations des amis, il suffit de faire une
jointure entre les deux partitions.

Nous connaissons maintenant les deux types de partitionnement. Il est bien sûr possible d'utiliser un partitionnement vertical et
un partitionnement horizontal sur une même table, ainsi que de partitionner sur plusieurs niveaux, c'est-à-dire définir des
partitions de partitions.

Le partitionnement apporte plusieurs avantages à un administrateur de base de données. Voici les principaux intérêts du
partitionnement :

 pouvoir créer des tables plus grandes que la taille permise par un disque dur ou par une partition du système de
fichiers : il est tout à fait possible de stocker des partitions à des endroits (partitions, disques, serveurs…) différents ;

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
 pouvoir supprimer très rapidement des données qui ne sont plus utiles et utilisées : si ces données sont placées sur une
partition séparée, il suffit de détruire la partition pour supprimer toutes les données ;

 optimiser grandement certaines requêtes : les données étant organisées dans différentes partitions, le SGBD n'accède
qu'aux données nécessaires lors des requêtes. Sans partitionnement, tous les enregistrements sont pris en compte.

Enfin, notons que le partitionnement de tables est généralement utilisé avec des bases de données réparties où les données sont
placées sur des sites géographiques (éloignés ou proches) différents. Cet article se limite au partitionnement sur site local, mais
les principes évoqués sont valides pour le partitionnement distant.

Dans MySQL, le partitionnement n'est géré de manière automatique qu'à partir de la version 5.1. Lors de la rédaction de cet
article, MySQL 5.1 est encore en version bêta et par conséquent, il est possible que des bogues subsistent.

De plus, il est important de noter que seules les fonctionnalités de base du partitionnement seront disponibles dans la version
finale de MySQL 5.1. Mais il est évident que les versions futures du SGBD apporteront leur lot d'améliorations.

Commençons par voir le partitionnement horizontal, qui pour rappel, consiste à répartir les enregistrements d'une table dans
différentes partitions. Pour déterminer à quelle partition appartient chaque enregistrement, il faut définir un critère de
partitionnement.

Nous savons qu'en partitionnant une table, il est possible d'améliorer les performances des requêtes puisque le nombre
d'enregistrements analysés peut être considérablement réduit. Mais encore faut-il réaliser un bon partitionnement horizontal !

La première question qui doit vous venir à l'esprit est : « Qu'est-ce qu'un bon partitionnement ? » La réponse est simple : un
bon partitionnement est un partitionnement adapté aux requêtes fréquentes et lourdes en exécution.

Le partitionnement n'est pas miraculeux. Il est impensable de croire que toute requête faite sur une table partitionnée sera
optimisée. Certaines requêtes seront plus lentes que sans partitionnement, alors que d'autres s'exécuteront peut-être cinq fois
plus rapidement ! C'est la raison pour laquelle, avant de commencer tout partitionnement, il est nécessaire de lister les requêtes
qui sont ou seront régulièrement exécutées. En optimisant celles-ci, il sera probablement possible de réduire la charge du
serveur, même si certaines requêtes moins fréquentes mettront un peu plus de temps pour s'exécuter.

Après avoir listé les requêtes à optimiser, il faut les analyser. Le but est de déterminer les données qui sont accédées
indépendamment et ainsi répartir ces données dans des partitions différentes. Par exemple, si des enregistrements sont souvent
accédés par mois (statistiques mensuelles), il peut être judicieux de créer une partition pour chaque mois enregistré.

Dans les exemples qui suivent, nous allons voir des partitionnements efficaces et d'autres complètement inutiles et donc à
éviter.

Introduction

Après Oracle (le premier), puis Sybase 15.0, SQL Server 2005, MySQL 5.1 implémente également le partitionnement des
données et indexes.

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
Cet article est un tour d’horizon du partitionnement avec MySQL 5.1 (types, gestion, etc.).

Généralités sur le partitionnement avec MySQL 5.1

Le standard SQL ne fournit pas de fonctionnalités sur le stockage physique des données et pour cause, le langage SQL est
conçu pour fonctionner indépendamment des structures de données et des supports de stockage pour les tables, les lignes et les
colonnes.

La plupart des systèmes de gestion de bases de données avancés ont évolué pour contrôler la localisation physique des données
(filesystems, hardware…).

Avec MySQL, bien avant le partitionnement, le moteur de stockage InnoDB supportait la notion de tablespace et la localisation
physique des données pouvait être contrôlée grâce aux liens symboliques.

Le partitionnement avec MySQL 5.1 franchit une étape très importante dans le contrôle de la localisation logique et physique
des données, autorisant la distribution de portions de tables sur différents supports de stockage.

La gestion des tables partitionnées est également bénéfique car seule une partie d’une table peut par exemple être sujette à une
opération de maintenance (statistiques, réorganisation, archivage, etc.), avantage majeur si la table présente une volumétrie
importante.

Le partitionnement horizontal (partitionnement par lignes) est la grande nouveauté de MySQL 5.1. En revanche MySQL 5.1 ne
supporte pas le partitionnement vertical (partitionnement par colonnes), ce type de partitionnement n’étant pas encore prévu au
programme.

Le support du partitionnement est inclus dans les releases –max de MySQL 5.1 (les binaires –max 5.1 sont construits avec
l’option –with-partition). Si le binaire MySQL est construit avec le support du partitionnement, il n’y a rien de spécial à
configurer pour activer le partitionnement (par exemple, il n’y a pas d’entrées spéciales à écrire dans le fichier my.cnf).

La commande SHOW VARIABLES permet de déterminer si le serveur MySQL supporte le partitionnement :

Si la variable have_partitioning n’est pas à YES, MySQL ne supporte pas le partitionnement. Avant la version MySQL 5.1.6,
cette variable était appelée have_partition_engine.

Pour créer des tables partitionnées, la plupart des moteurs de stockage est supportée (MyISAM, InnoDB, etc.), le moteur de
partitionnement MySQL étant une couche séparée qui peut intéragir avec la plupart des moteurs de stockage de MySQL. Avec
MySQL 5.1, toutes les partitions d’une même table partitionnée doivent avoir le même moteur de stockage : par exemple, il

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
n’est pas possible d’utiliser le moteur de stockage MyISAM pour une partition et le moteur de stockage InnoDB pour une autre
partition.

Le partitionnement MySQL ne peut être utilisé avec les moteurs de stockage MERGE ou CSV. Le partitionnement par clé
(KEY partition) est supporté pour le moteur de stockage NDBCluster, mais pas les autres types de partitionnement.

Pour employer un moteur de stockage particulier pour une table partitionnée, il est seulement nécessaire d’utiliser
l’option [STORAGE] ENGINE comme cela serait fait une pour une table non partitionnée. Il faut garder à l’esprit que
l’option [STORAGE] ENGINE doit être listée avant les options de partitionnement dans la création de la table avec la
commande CREATE TABLE. Voici un exemple de création de table partitionée par hachâge et qui utilise le moteur de
stockage InnoDB :

Le partitionnement s’applique à toutes les données et tous les indexes d’une table, il n’est pas possible de partitionner les
données et pas les indexes, et vice-versa.

Les données et les indexes de chaque partition peuvent être physiquement contrôlés au niveau de leur localisation avec les
options DATA DIRECTORY et INDEX DIRECTORY de la clause PARTITION dans la commande CREATE TABLE.

Par ailleurs, dans chaque partition, le nombre maximal et minimal de lignes peut être spécifié avec les
options MAX_ROWS et MIN_ROWS de la clause PARTITION.

Le partitionnement inclut également les avantages ci-dessous :

 La possibilité de stocker précisément les données d’une table sur un disque ou une partition filesystem.

 Une gestion plus simple de la suppression des données obsolètes d’une table en supprimant simplement une ou
plusieurs partitions sans avoir recours à la commande DELETE.

 Des requêtes optimisées en ne balayant que les partitions rentrant dans les conditions des clauses WHERE.

 Une maintenance améliorée et plus efficace (statistiques, réorganisations, check, etc.) car cette maintenance peut ne
s’appliquer que sur une partition d’une table.

Types de partitions

Cette section évoque les types de partitionnement disponibles avec MySQL 5.1. 4 types de partitionnement sont proposés :

 Partitionnement RANGE (partitionnement par intervalles) : applique les lignes dans les partitions en fonction des
valeurs d’une colonne correspondant à un intervalle.

 Partitionnement LIST (partitionnement par liste) : similaire au partitionnement par intervalles, sauf que les partitions
ne sont plus créées sur des intervalles de valeurs mais des valeurs discrètes (liste de valeurs).

 Partitionnement HASH (partitionnement par hâchage) : la partition correspond à une valeur retournée par une
expression utilisateur appliquée sur les valeurs des colonnes des lignes insérées dans la table. Cette fonction peut être
n’importe quelle expression valide MySQL qui retourne une valeur entière non négative.

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
 Partitionnement KEY (partitionnement par clé ) : similaire au partitionnement par hachage, sauf qu’une ou plusieurs
colonnes à évaluer sont fournies.

Une utilisation courante du partitionnement dans les bases données consiste à ségréguer les données par date.

5.2. Création d'Une Table Partitionnée :

Le partitionnement des données est à la mode depuis que récemment MySQL s’est mis à faire ce qu’Oracle, DB2 ou SQL
Server font depuis des années. Et ce sujet est devenu populaire. Mais partitionner sans tenir compte des impacts collatéraux
peut se révéler bien pire que de ne pas partitionner du tout. Montrons à l’aide d’un exemple les bienfaits et les méfaits du
partitionnement des données des tables dans un SGBDR.

L’idée du partitionnement vient d’un constat simple : moins on a de données à traiter, plus vite cela ira. Ainsi en saucissonnant
une table en plusieurs plus petite peut-on espérer avoir un gain… C’est vrai, mais pas toujours !On pourra ainsi découper une
table en plusieurs plus petites par le biais d’un numéro, d’une date, d’un nom. Par exemple on peut découper une table
contenant une date par années, une table contenant des noms par autant de lettre initiales que l’alphabet en comporte, etc….
Bien entendu tout partitionnement de données doit respecter la règle n°11 de Codd (voir
http://sqlpro.developpez.com/SGBDR/ReglesCodd/SQL_databases_SGBDR_regles_codd.pdf ) qui signifie que les requêtes et
plus généralement les applications doivent demeurer inchangées lorsqu’est entrepris sur une table une mécanique de
partitionnement. Autrement dit le partitionnement est un problème de DBA, mais ni de développeur, ni même le modélisateur,
qui doivent rester ignorant de ce genre de chose et n’avoir aucun impact sur leurs métiers respectifs, même si l’architecte de
données peut l’avoir conçu au cours de la révision du MPD.

Le sous-partitionnement

Le sous-partitionnement consiste à partitionner une partition. Cette opération est possible avec MySQL, mais seulement par les
partitions de type RANGE et LIST. De plus, la sous-partition ne peut être que de type HASH ou KEY.

La syntaxe SQL pour créer une table sous-partitionnée est la suivante :

CREATE TABLE nom_de_table ( 

col type, 

... 

PARTITION BY RANGE | LIST (Expression) 

     SUBPARTITION BY HASH | KEY (Expression) 

     SUBPARTITIONS N (  

           definition_des_partitions 

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
     )

La définition des partitions dépend évidemment des types choisis. Voici un exemple de partitionnement RANGE, sous-
partitionnée en KEY :

mysql> CREATE TABLE customer ( 

 customer_id smallint(5) unsigned NOT NULL AUTO_INCREMENT, 

 store_id tinyint(3) unsigned NOT NULL, 

 first_name varchar(45) NOT NULL, 

 last_name varchar(45) NOT NULL, 

 create_date datetime NOT NULL, 

 KEY (customer_id) 

PARTITION BY RANGE (YEAR(create_date)) 

       SUBPARTITION BY KEY(customer_id) 

       SUBPARTITIONS 10 ( 

               PARTITION p2008 VALUES LESS THAN (2008), 

               PARTITION p2010 VALUES LESS THAN (2010), 

5.3. Obtention des Informations de Partition :

Obtention des informations sur les partitions

Pour obtenir des informations sur les partitions :

 Commande SHOW CREATE TABLE pour voir les clauses de partitionnement.

 Commande SHOW TABLE STATUS pour déterminer si une table est partitionnée.

 Interrogation de la table INFORMATION_SCHEMA.PARTITIONS.

 Commande EXPLAIN PARTITIONS SELECT pour voir quelles partitions sont balayées pour une
commande SELECT donnée.

SHOW CREATE TABLE

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
La commande SHOW CREATE TABLE renvoie dans sa sortie la clause PARTITION BY utilisée lors de la création de la
table.

mysql> SHOW CREATE TABLE trb3\G

La table INFORMATION_SCHEMA.PARTITIONS

La table PARTITIONS fournit les informations sur les partitions des tables.

Chaque enregistrement dans cette table correspond à une partition individuelle ou une sous partition d’une table partitionnée.

 TABLE_CATALOG : cette colonne vaut toujours NULL.

 TABLE_SCHEMA : nom de la base de données à laquelle appartient la table appartient.

 TABLE_NAME : nom de la table contenant la partition.

 PARTITION_NAME : nom de la partition.

 SUBPARTITION_NAME : cette colonne contient le nom de la sous partition si il s’agit d’une sous partition, sinon
cette colonne vaut NULL pour une partition.

 PARTITION_ORDINAL_POSITION : toutes les partitions sont indexées dans un ordre identique à l’ordre appliqué
lors de la définition des partitions, 1 étant le numéro assignée à la première partition. L’indexation change avec
l’ajout, la suppression et la réorganisation des partitions. Le numéro dans cette colonne reflète l’ordre courant prenant
en compte tout changement d’indexation.

 SUBPARTITION_ORDINAL_POSITION : les sous partitions d’une partition sont également indexées de la même
manière que les partitions sont indexées dans une table.

 PARTITION_METHOD : méthode de partitionnement de la table partitionnée RANGE, LIST, HASH, LINEAR


HASH, KEY ou LINEAR KEY

 SUBPARTITION_METHOD : méthode de partitionnement de la sous partition si il s’agit d’une sous


partition HASH, LINEAR HASH, KEY ou LINEAR KEY.

 PARTITION_EXPRESSION : expression de la function de partitionnement utilisée lors de la création ou de


l’altération de la table.

5.4. Modification Et Suppression de Partitions :

Gestion des partitions

Suppression du partitionnement (REMOVE PARTITIONING)

Pour supprimer le partitionnement pour une table :

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
ALTER TABLE ... REMOVE PARTITIONING

Il faut également garder à l’esprit que toutes les partitions d’une table partitionnée doit avoir le même nombre de sous
partitions et qu’il est impossible de supprimer le sous partitionnement une fois que la table est créée.

Pour supprimer une partition :

ALTER TABLE <tblname> DROP PARTITION <partition_name>

Ainsi pour supprimer la partition p2 de la table tr :

ALTER TABLE tr DROP PARTITION p2

Supprimer une partition, supprime également toutes les données appartenant à la partition, les données ne sont pas
redistribuées vers les autres partitions !

À cause de ce phénomène, le privilège DROP TABLE est maintenant pris en compte pour autoriser la commande ALTER
TABLE … DROP PARTITION.

La commande DROP PARTITION ne reporte pas le nombre de lignes supprimées comme le ferait la commande DELETE.

Pour le partitionnement par valeurs discrètes (LIST), supprimer une partition implique qu’il ne sera plus possible d’insérer des
lignes rentrant dans les critères VALUES IN de la partition supprimée.

Pour changer le partitionnement d’une table (suppression de partitions LIST et HASH) sans perdre de données, la
commande ALTER TABLE ... REORGANIZE PARTITION est utilisée, commande qui est décrite dans le paragraphe qui suit.

Avec le temps de nombreuses tables grossissent de manière assez forte. Cela entraine malgré des index correctement choisis
des temps de recherche de plus en plus longs. Une solution à ce problème peut être d’utiliser le partitionnement.

Partitionnement introduction

Imaginez que la bibliothèque possède toutes les infos dans un seul et même livre, malgré un index dans celui-ci, chercher une
information dedans est assez complexe. Maintenant si ce livre est découpé en plusieurs tomes et qu’il faut rechercher que dans
un seul tome alors avec l’index cela sera beaucoup plus rapide. Le partitionnement c’est la même chose, mais pour une table.
On parlera uniquement du partitionnement horizontal dans cet article, c’est-à-dire un partitionnement par ligne.

Est-ce utilisable ?

A priori oui, toutefois pour ne vérifier rien de plus simple

SHOW PLUGINS;

On doit avoir dans les résultats une ligne avec pour nom partition et status ACTIVE.

Certaines tables ne peuvent par contre pas être partitionnées :

 celle avec un index full text

 celle avec des clef etrangeres

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
 celle avec qui sont des references de clef etrangere d’autres tables

Contraintes sur la clef de partitionnement

La clef de partitionnement choisi devra obligatoirement :

 être numérique

 être comprise dans la clef primaire

Détails sur les types de partionnements

Range

Chaque ligne est insérée dans la bonne partition en fonction de sa valeur par rapport aux diverses zones prédéfinies. Ici on ne
peut pas utiliser de date, toutefois rien n’empêche d’utiliser une fonction MYSQL comme YEAR.

CREATE TABLE example (

id INT NOT NULL

PARTITION BY RANGE (id) (

PARTITION p0 VALUES LESS THAN (6),

PARTITION p1 VALUES LESS THAN (11),

PARTITION p2 VALUES LESS THAN (16),

PARTITION p3 VALUES LESS THAN MAXVALUE

);

List

Si la valeur de la clef de partitionnement n’est présente dans aucune liste alors l’insertion est perdue. Il n’y a pas de valeur de
catch.

CREATE TABLE example (

id INT NOT NULL,

store_id INT

PARTITION BY LIST(store_id) (

PARTITION pNorth VALUES IN (3,5,6,9,17),

PARTITION pEast VALUES IN (1,2,10,11,19,20),

PARTITION pWest VALUES IN (4,12,13,14,18),

PARTITION pCentral VALUES IN (7,8,15,16)

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
);

Hash

La valeur dans le HASH doit etre entière. On peut utiliser une fonction mysql mais pour une valeur précise la valeur de sortie
doit etre identique.

La partition sélectionnée est égale a valeurDuHash % nombresDePartiontion.

CREATE TABLE example (

id INT NOT NULL,

example_date DATE NOT NULL DEFAULT '1970-01-01',

store_id INT

PARTITION BY HASH(YEAR(example_date))

PARTITIONS 4;

);

Key

La clef n’est pas obligatoirement numérique, key utilise une fonction de hash propre a mysql (basé sur password).

CREATE TABLE example (

id INT NOT NULL PRIMARY KEY,

store_id INT

PARTITION BY KEY()

PARTITIONS 4;

);

Linear

Le calcul de la partition sélectionné change pour devenir :

V = POWER(2, CEILING(LOG(2, num)))

N = F(column_list) & (V - 1).

While N >= num:

Set V = CEIL(V / 2)

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
Set N = N & (V - 1)

Ou :

 num : nombre de partitions

 F(column_list) : Valeur de la fonction de hashage

 N : partition selectionné

Contrairement a ce que dit le nom la répartition n’est pas linéaire

Pruning

Selon les critères de la requête, la lecture ne se fait que sur un sous-ensemble de partitions. Le temps d’exécution s’en trouve
réduit de même que l’utilisation mémoire.

Actions sur les partitions

Optimisation

Lors suppression de ligne ou changement de taille des colonnes, il peut y avoir une fragmentation des données on peu alors
lancer une optimisation par partition.

ALTER TABLE partionned_table

OPTIMIZE PARTITION partition_name_to_optimize;

Réparation

En cas d’erreur sur les données ou les index on peut reparer par partion

ALTER TABLE partionned_table

CHECK PARTITION p0,p1

Suppression de partition

Grâce au partitionnement on peut supprimer des partitions directement. Ainsi la suppression d’un enregistrement par rapport a
la date peut se faire rapidement même sur des gros volumes de données.

ALTER TABLE partionned_table

DROP PARTITION partition_name_to_drop;

Ajout de partition

On peut aussi ajouter des partitions

ALTER TABLE partionned_table

ADD PARTITION partition_name (PARTITION_DESCRIPTION);

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
Note : Sur du partitionnement par range on ne peut pas ajouter de participation apres notre partition fourre-tout (celle en
MAXVALUE ). Il faudra dont la supprimer au préalable, puis ajouter la nouvelle et la recréer. Bien sûr, il faut faire cela avec
quelle ne commence a se remplir.

Contraintes mémoires

Dans le cas des tables MyISAM, chaque partition utilise deux file descriptor qui doivent être ouvertes pour accéder aux
données, et ceci est bien sûr par partition.

Voici un petit aperçu du partitionnement, de son utilisation pour augmenter les performances sur des tables assez volumineuse.

Partitionnement

1. Intérêt et limitations

Le partitionnement horizontal permet de diviser une table en fonction des données qu’elle contient, de manière transparente
pour l’utilisateur. Ce processus peut permettre une gestion plus efficace des données stockées en les regroupant  dans différents
emplacements (partitions) selon certains critères. Le partitionnement d’une table se définit à sa création, en indiquant le type et
la clé de partitionnement, ainsi que d’autres paramètres tels que le nombre de partitions à générer.

Partitionnement manuel : il est possible de partitionner manuellement une table MyISAM en utilisant le moteur MERGE.
Cependant ce moteur n’est compatible qu’avec le moteur MyISAM, et n’est pas aussi transparent que le partitionnement et
nécessite dans tous les cas de scanner l’ensemble des tables pour lire des enregistrements. Ce type de partitionnement a
quasiment disparu aujourd’hui depuis qu’InnoDB est devenu le moteur de stockage le plus courant.

a. Gestion de la montée en charge

Plus une table est sollicitée, plus le risque qu’elle pose des problèmes de performances augmente. Le partitionnement peut
permettre de réduire la contention d’une table en la répartissant sur l’ensemble des partitions, grâce au « partition pruning »
(implémenté à partir de MySQL 5.6.6). Par exemple...

 ses dans une plage donnée.

 LIST partitionnement . Semblable au partitionnement par RANGE, sauf que la partition est sélectionnée en fonction
de colonnes correspondant à un ensemble de valeurs discrètes.

 Partitionnement HASH . Avec ce type de partitionnement, une partition est sélectionnée en fonction de la valeur
renvoyée par une expression définie par l'utilisateur qui opère sur les valeurs de colonne dans les lignes à insérer dans
la table. La fonction peut être constituée de toute expression valide dans MySQL qui donne une valeur entière non
négative. Une extension de ce type, LINEAR HASH , est également disponible.

 Partitionnement KEY . Ce type de partitionnement est similaire au partitionnement par HASH, sauf que seules une
ou plusieurs colonnes à évaluer sont fournies et que le serveur MySQL fournit sa propre fonction de hachage. Ces
colonnes peuvent contenir des valeurs autres que des valeurs entières, car la fonction de hachage fournie par MySQL

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
garantit un résultat entier quel que soit le type de données de la colonne. Une extension à ce type, LINEAR KEY , est
également disponible.

Partitionnement RANGE

Une table partitionnée par plage est partitionnée de telle sorte que chaque partition contient des lignes pour lesquelles la valeur
de l'expression de partitionnement se situe dans une plage donnée. Les plages doivent être contiguës mais ne se chevauchent
pas et sont définies à l'aide de l'opérateur VALUES LESS THAN . Pour les exemples suivants, supposez que vous créez un
tableau tel que celui-ci pour contenir les dossiers du personnel pour une chaîne de 20 magasins de vidéos, numérotés de 1 à 20:

CREATE TABLE employees (

id INT NOT NULL,

fname VARCHAR(30),

lname VARCHAR(30),

hired DATE NOT NULL DEFAULT '1970-01-01',

separated DATE NOT NULL DEFAULT '9999-12-31',

job_code INT NOT NULL,

store_id INT NOT NULL

);

Ce tableau peut être partitionné par plage de différentes manières, en fonction de vos besoins. Une façon serait d'utiliser la
colonne store_id . Par exemple, vous pouvez décider de partitionner la table en ajoutant une clause PARTITION BY RANGE ,
comme indiqué ici:

ALTER TABLE employees PARTITION BY RANGE (store_id) (

PARTITION p0 VALUES LESS THAN (6),

PARTITION p1 VALUES LESS THAN (11),

PARTITION p2 VALUES LESS THAN (16),

PARTITION p3 VALUES LESS THAN MAXVALUE

);

MAXVALUE représente une valeur entière qui est toujours supérieure à la plus grande valeur entière possible (en langage
mathématique, elle sert de limite inférieure).

basé sur le document officiel MySQL .

Partitionnement LIST

Le partitionnement de liste est similaire au partitionnement à plusieurs niveaux. Comme dans le partitionnement par RANGE,
chaque partition doit être explicitement définie. La principale différence entre les deux types de partitionnement réside dans le
fait que, dans le partitionnement de liste, chaque partition est définie et sélectionnée en fonction de l'appartenance d'une valeur

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
de colonne dans un ensemble de listes de valeurs plutôt que dans un ensemble de plages contiguës. valeurs. Ceci est fait en
utilisant PARTITION BY LIST(expr) où expr est une valeur de colonne ou une expression basée sur une valeur de colonne et
renvoyant une valeur entière, puis définissant chaque partition au moyen d'une VALUES IN (value_list) , où value_list est liste
d'entiers séparés par des virgules.

Pour les exemples suivants, nous supposons que la définition de base de la table à partitionner est fournie par
l'instruction CREATE TABLE présentée ici:

CREATE TABLE employees (

id INT NOT NULL,

fname VARCHAR(30),

lname VARCHAR(30),

hired DATE NOT NULL DEFAULT '1970-01-01',

separated DATE NOT NULL DEFAULT '9999-12-31',

job_code INT,

store_id INT

);

Supposons qu'il y ait 20 magasins de vidéos répartis sur 4 franchises, comme le montre le tableau suivant.

Région Numéros d'identification de magasin

Nord 3, 5, 6, 9, 17

est 1, 2, 10, 11, 19, 20

Ouest 4, 12, 13, 14, 18

Central 7, 8, 15, 16

Pour partitionner cette table de manière à ce que les lignes des magasins appartenant à la même région soient stockées dans la
même partition

ALTER TABLE employees PARTITION BY LIST(store_id) (

PARTITION pNorth VALUES IN (3,5,6,9,17),

PARTITION pEast VALUES IN (1,2,10,11,19,20),

PARTITION pWest VALUES IN (4,12,13,14,18),

PARTITION pCentral VALUES IN (7,8,15,16)

);

basé sur le document officiel MySQL .

Partitionnement HASH

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
Le partitionnement par HASH est principalement utilisé pour assurer une distribution uniforme des données parmi un nombre
prédéterminé de partitions. Avec le partitionnement par plage ou par liste, vous devez spécifier explicitement dans quelle
partition une valeur de colonne donnée ou un ensemble de valeurs de colonne doit être stocké; Avec le partitionnement par
hachage, MySQL s'en charge pour vous et vous devez uniquement spécifier une valeur ou une expression de colonne basée sur
une valeur de colonne à hacher et le nombre de partitions dans lesquelles la table partitionnée doit être divisée.

L'instruction suivante crée une table qui utilise le hachage sur la colonne store_id et est divisée en 4 partitions:

CREATE TABLE employees (

id INT NOT NULL,

fname VARCHAR(30),

lname VARCHAR(30),

hired DATE NOT NULL DEFAULT '1970-01-01',

separated DATE NOT NULL DEFAULT '9999-12-31',

job_code INT,

store_id INT

PARTITION BY HASH(store_id)

PARTITIONS 4;

Si vous n'incluez pas de clause PARTITIONS , le nombre de partitions par défaut est 1.

6. Chapitre 6 : Gestion de La Sécurité Et des Utilisateurs :

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
Gestion des comptes utilisateurs

1. Introduction

La gestion des utilisateurs de MySQL se fait entièrement grâce à des tables dédiées  qui appartiennent au schéma
système mysql et grâce à des commandes SQL permettant de créer, modifier et supprimer les comptes utilisateurs et leurs
droits.

La table user contient la liste des comptes utilisateurs. Ils sont décrits avec, entre autres, les colonnes host (le nom d’hôte)
et user (le nom). Ces deux colonnes représentent la clé primaire de la table. On y trouve également la colonne password (le mot
de passe du compte) qui est stockée sous une forme hachée (grâce à la fonction de hachage  MySQL password()), ainsi que les
droits globaux de l’utilisateur, comme le droit de faire des insertions (INSERT), des lectures (SELECT)…

La table db contient les droits spécifiques à une base de données (ou schémas) de chaque utilisateur.

La table tables_priv contient les droits spécifiques à une table ou à une vue.

La table columns_priv contient les droits spécifiques à une colonne.

La table procs_priv contient les droits pour les routines stockées, c’est-à-dire les procédures et les fonctions stockées.

Les commandes utiles à la gestion des droits sont les suivantes :

 CREATE USER : permet de créer un compte utilisateur et de lui donner un mot de passe.

 GRANT : permet...

Plugins de sécurité avancée

1. Validation des mots de passe

Le plugin validate_password permet d’améliorer la sécurité des comptes utilisateurs, en testant la robustesse d’un mot de passe
à l’aide de la fonction VALIDATE_PASSWORD_STRENGTH() et, le cas échéant, en empêchant l’utilisateur de créer un mot
de passe qui n’est pas suffisamment sécurisé, lors de l’exécution des commandes CREATE USER, GRANT et SET
PASSWORD. Lorsque ce plugin n’est pas activé, il est très facile de créer un mot de passe peu sécurisé, par exemple :

mysql> SET PASSWORD = PASSWORD('azerty'); 

La commande SHOW PLUGINS permet de savoir si le plugin validate_password est activé :

mysql> SHOW PLUGINS;  

+----------------------+--------+----------------+---------+-------+ 

| Name                 | Status | Type           | Library | License |  

+----------------------+--------+----------------+---------+-------+ 

| mysql_native_password| ACTIVE | AUTHENTICATION | NULL    | GPL   | 

| mysql_old_password   | ACTIVE | AUTHENTICATION | NULL    | GPL   | 

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
| sha256_password      | ACTIVE | AUTHENTICATION...

 création, modification et suppression d'utilisateurs ;

 explication des privilèges et options des utilisateurs ;

 attribution et révocation des privilèges des utilisateurs.

6.1. Transactions Et Verrouillage :


6.2. Mesures de Sécurité, Privilèges, Niveaux d'Accès :

La sécurité de la base de données consiste à protéger les systèmes contre les éventuels accidents physiques et/ou logiques qui
peuvent l'endommage ou l'anéantir.

Pour ne pas être surpris par ces accidents, nous proposons les mesures de sécurités ou mesures préventives telles que :

- Le BACK UP ;

- La duplication de la base de données ;

- Le verrouillage (interdiction d'écriture) sur la base de données pour les utilisateurs non autorisées ;

- Pas de suppression sans duplication ;

- Le stockage de tous les BACK UP en dehors des installations informatiques et de l'entreprise.

Pour notre cas, nous avons choisi la méthode de Backup automatique dans le logiciel, la méthode verrouillage automatique
(avec interdiction d'écriture) sur la base de données pour les utilisateurs non autorisés.

6.2.1. Risques de Sécurité :

6.2.2. Mesures de Sécurité :

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
Les privilèges s'organisent autour de plusieurs classes :

 accès au contenu de l'information ;

 gestion du schéma de la base de données ;

 gestion des privilèges utilisateurs ;

 gestion des paramètres système.

Chaque utilisateur devra se voir attribuer des privilèges parmi ces classes.

Le tableau suivant liste les types d'utilisateurs qui devraient être habilités pour chaque classe de privilèges :

Règles d'attribution des privilèges▲

Règle fondamentale n° 1 : attribution du moindre privilège.


Les utilisateurs ne doivent avoir que le minimum de droits, ceux strictement nécessaires à l'accomplissement de leurs tâches.
Les privilèges peuvent évoluer au cours du temps, car les besoins et les tâches affectées ne sont pas immuables, mais à un
moment donné, seuls les droits indispensables doivent être fournis à un utilisateur.

Règle n° 2 : contrôle de la population.


Le personnel d'une entreprise bouge, il y a des départs, des arrivées, des promotions… Les privilèges doivent être synchrones
avec la réalité de la population : il faut supprimer les comptes des utilisateurs quittant l'entreprise et de ceux n'étant plus
affectés à telle ou telle tâche.

Règle n° 3 : supervision de la délégation des tâches d'administration.


Un administrateur peut être amené à déléguer auprès d'une autre personne les tâches d'attribution des privilèges de tout ou
partie de la population des utilisateurs. Un contrôle a posteriori doit être réalisé afin de vérifier que le résultat de cette
délégation est conforme à la politique adoptée.

Règle n° 4 : contrôle physique des connexions.


La connexion d'un utilisateur à une base de données peut être réalisée depuis n'importe où dans le monde grâce à Internet. Il est
nécessaire de restreindre les connexions à des hôtes spécifiques connus. Par exemple, le compte d'accès d'une application
hébergée sur un serveur devrait voir ses privilèges restreints à l'hôte (ou son domaine) sur lequel elle est hébergée.

Règle n° 5 : limitation des ressources utilisées.


Le SGBD offre souvent la possibilité de restreindre les ressources de calcul disponibles pour un utilisateur. Il est recommandé
de configurer ces limitations de ressources en fonction de la charge maximale attendue pour un utilisateur. Une personne
physique n'a pas besoin de réaliser 100 requêtes à la seconde, mais au contraire, une application gérant elle-même les
habilitations peut avoir de gros besoins qui peuvent être cependant limités raisonnablement afin de ne pas compromettre les
accès directs en ligne de commande au serveur de base de données…

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
Règle n° 6 : journaliser les comportements suspects.
Certains SGBD permettent de conserver dans des journaux de log les requêtes non conformes aux privilèges accordés à un
utilisateur. Il peut être intéressant de les surveiller afin de détecter toute anomalie dénotant des tentatives de piratage.

Règle n° 7 : restrictions sur une application en fonction du public.


Une même application web peut avoir plusieurs interfaces différentes selon le contexte d'utilisation : Internet / intranet. Par
exemple, un magazine de presse en ligne propose une interface de consultation pour tous ainsi qu'un espace d'administration
sécurisé. Dans cet exemple, il sera logique d'avoir deux comptes utilisateurs différents à la base de données  : le premier en
lecture seule sur les tables et colonnes concernant les articles de presse et leurs catégories, le second en écriture. Ainsi, en cas
d'attaque du site Internet, seules des lectures inoffensives peuvent éventuellement être réalisées. L'application web choisira le
compte d'accès à utiliser selon le contexte d'utilisation.

6.2.3. Privilèges :

Les utilisateurs et leurs privilèges

Privilèges des utilisateurs

Lorsque l'on se connecte à MySQL, on le fait avec un utilisateur. Chaque utilisateur possède une série de privilèges relatifs aux
données stockées sur le serveur : le privilège de sélectionner les données, de les modifier, de créer des objets, etc.
Ces privilèges peuvent exister à plusieurs niveaux : base de données, tables, colonnes, procédures, etc.

Par exemple, tout au début de ce cours, vous avez créé un utilisateur, puis lui avez donné des privilèges avec la commande
suivante :

GRANT ALL PRIVILEGES ON elevage.* TO 'student'@'localhost';

Cette requête a donné tous les droits sur la base de données elevage à l'utilisateur 'student'@'localhost'.

Stockage des utilisateurs et privilèges

Toutes ces informations sont stockées dans la base de données mysql.


Les utilisateurs sont stockés dans la table user, avec leurs privilèges globaux (c'est-à-dire valables au niveau du serveur, sur
toutes les bases de données). La base mysql possède par ailleurs quatre tables permettant de stocker les privilèges des
utilisateurs à différents niveaux.

 db : privilèges au niveau des bases de données.

 tables_priv : privilèges au niveau des tables.

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
 columns_priv : privilèges au niveau des colonnes.

 proc_priv : privilèges au niveau des routines (procédures et fonctions stockées).

Modifications

Il est tout à fait possible d'ajouter, de modifier et de supprimer des utilisateurs en utilisant des requêtes INSERT, UPDATE 
ou DELETE  directement sur la table mysql.user. De même pour leurs privilèges, avec les
tables mysql.db, mysql.tables_priv, mysql.columns_priv et mysql.procs_priv.

Cependant, en général, on utilise plutôt des commandes dédiées à cet usage. Ainsi, pas besoin de se soucier de la structure de
ces tables, et le risque d'erreur est moins grand. Ce sont ces commandes que nous allons décortiquer dans la suite de ce
chapitre.

Tout comme on peut préciser la table à laquelle appartient une colonne en préfixant le nom de la colonne par le nom de la
table, nom_table.nom_colonne, il est possible de préciser à quelle base de données appartient une table, nom_bdd.nom_table,
voire de préciser à la fois la table et la base de données dans laquelle se trouve une
colonne : nom_bdd.nom_table.nom_colonne.

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
6.2.4. Niveaux d'Accès :

Ajout de privilèges

Pour pouvoir ajouter un privilège à un utilisateur, il faut posséder le privilège GRANT OPTION. Pour l'instant, seul
l'utilisateur "root" le possède. Étant donné qu'il s'agit d'un privilège un peu particulier, nous n'en parlerons pas tout de suite.
Connectez-vous donc avec "root" pour exécuter les commandes de cette partie.

Syntaxe

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
La commande pour ajouter des privilèges à un utilisateur est la suivante :

GRANT privilege [(liste_colonnes)] [, privilege [(liste_colonnes)], ...]

ON [type_objet] niveau_privilege

TO utilisateur [IDENTIFIED BY mot_de_passe];

 privilege  : le privilège à accorder à l'utilisateur (SELECT, CREATE VIEW, EXECUTE…) ;

 (liste_colonnes)  : facultatif - liste des colonnes auxquelles le privilège s'applique ;

 niveau_privilege  : niveau auquel le privilège s'applique (*.*, nom_bdd.nom_table…) ;

 type_objet  : en cas de noms ambigus, il est possible de préciser à quoi se rapporte le niveau, TABLE 
ou PROCEDURE.

On peut accorder plusieurs privilèges en une fois : il suffit de séparer les privilèges par une virgule. Si l'on veut restreindre tout
ou partie des privilèges à certaines colonnes, la liste doit en être précisée pour chaque privilège.

Exemples

1. On crée un utilisateur 'john'@'localhost', en lui donnant les privilèges SELECT, INSERT  et DELETE  sur la


table elevage.Animal, et UPDATE  sur les colonnes nom, sexe et commentaires de la table elevage.Animal.

CREATE USER 'john'@'localhost' IDENTIFIED BY 'exemple2012';

GRANT SELECT,

UPDATE (nom, sexe, commentaires),

DELETE,

INSERT

ON elevage.Animal

TO 'john'@'localhost';

2. On accorde le privilège SELECT  à l'utilisateur 'john'@'localhost'  sur la table elevage.Espece.

GRANT SELECT

ON TABLE elevage.Espece -- On précise que c'est une table (facultatif)

TO 'john'@'localhost';

3. On accorde à 'john'@'localhost'  le privilège de créer et d'exécuter des procédures stockées dans la base de données elevage.

GRANT CREATE ROUTINE, EXECUTE

ON elevage.*

TO 'john'@'localhost';

Révocation de privilèges

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
Pour retirer un ou plusieurs privilèges à un utilisateur, on utilise la commande REVOKE.

REVOKE privilege [, privilege, ...]

ON niveau_privilege

FROM utilisateur;

Exemple

REVOKE DELETE

ON elevage.Animal

FROM 'john'@'localhost';

Privilèges particuliers

Les privilèges ALL, USAGE et GRANT OPTION

Pour terminer avec les différents privilèges, nous allons parler de trois privilèges un peu particuliers.

ALL

Le privilège ALL  (ou ALL PRIVILEGES), comme son nom l'indique, représente tous les privilèges. Accorder le
privilège ALL  revient donc à accorder tous les droits à l'utilisateur. Il faut évidemment préciser le niveau auquel tous les droits
sont accordés (on octroie tous les privilèges possibles sur une table, ou sur une base de données, etc.).

Un privilège fait exception : GRANT OPTION  n'est pas compris dans les privilèges représentés par ALL.

Exemple : on accorde tous les droits sur la table Client à 'john'@'localhost'.

GRANT ALL

ON elevage.Client

TO 'john'@'localhost';

USAGE

À l'inverse de ALL, le privilège USAGE  signifie "aucun privilège".


À première vue, utiliser la commande GRANT  pour n'accorder aucun privilège peut sembler un peu ridicule. En réalité, c'est
extrêmement utile : USAGE  permet en fait de modifier les caractéristiques d'un compte avec la commande GRANT, sans
modifier les privilèges du compte. Cet usage de la commande  GRANT  est cependant déconseillé.
USAGE  est toujours utilisé comme un privilège global (donc ON *.*).

GRANT OPTION

Nous voici donc au fameux privilège GRANT OPTION. Un utilisateur ayant ce privilège est autorisé à utiliser la
commande GRANT, pour accorder des privilèges à d'autres utilisateurs.
Ce privilège n'est pas compris dans le privilège ALL. Par ailleurs, un utilisateur ne peut accorder que les privilèges qu'il
possède lui-même.

On peut accorder GRANT OPTION  de deux manières :

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
 comme un privilège normal, après le mot GRANT  ;

 à la fin de la commande GRANT, avec la clause WITH GRANT OPTION.

Exemple : on accorde les privilèges SELECT, UPDATE, INSERT, DELETE  et GRANT OPTION  sur la base de


données elevage à 'joseph'@'localhost'.

GRANT SELECT, UPDATE, INSERT, DELETE, GRANT OPTION

ON elevage.*

TO 'joseph'@'localhost' IDENTIFIED BY 'ploc4';

-- OU

GRANT SELECT, UPDATE, INSERT, DELETE

ON elevage.*

TO 'joseph'@'localhost' IDENTIFIED BY 'ploc4'

WITH GRANT OPTION;

Le privilège ALL  doit s'utiliser tout seul. Il n'est donc pas possible d'accorder GRANT OPTION  et ALL  de la manière
suivante : GRANT ALL, GRANT OPTION…  Il est nécessaire dans ce cas d'utiliser WITH GRANT OPTION.

Particularité des triggers, vues et procédures stockées

Les triggers, les vues et les procédures stockées (ainsi que les événements et les fonctions stockées, non couvertes par ce cours)
ont un système spécial quant à la vérification des privilèges des utilisateurs.
En effet, ces objets sont créés dans le but d'être exécutés dans le futur, et l'utilisateur créant un tel objet pourrait bien être
différent de l'utilisateur se servant de l'objet. Il y a donc deux types d'utilisateurs potentiels pour ces types d'objet : celui ayant
défini l'objet, et celui utilisant l'objet. Quels privilèges faut-il vérifier lorsqu'une procédure est exécutée ? Lorsque la
requête SELECT  d'une vue est exécutée ?

Par défaut, ce sont les privilèges du définisseur (celui qui a défini l'objet) qui sont vérifiés. Ce qui veut dire qu'un utilisateur
pourrait exécuter une procédure agissant sur des tables sur lesquelles il n'a lui-même aucun privilège, l'important étant les
privilèges de l'utilisateur ayant défini la procédure. Bien entendu, un utilisateur doit toujours avoir le privilège  EXECUTE 
pour exécuter une procédure stockée. Les privilèges du définisseur concernent les instructions à l'intérieur de la procédure ou
du trigger (ou de la requête SELECT  pour une vue).

Exemple : avec l'utilisateur student, on définit une procédure faisant une requête SELECT  sur la table Adoption. On exécute
ensuite cette procédure avec l'utilisateur john, qui n'a aucun droit sur la table Adoption.

Utilisateur student :

USE elevage;

DELIMITER |

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
CREATE PROCEDURE test_definer()

BEGIN

SELECT * FROM Adoption;

END |

DELIMITER ;

Utilisateur john :

USE elevage;

SELECT * FROM Adoption;

CALL test_definer();

L'utilisateur john n'a aucun droit sur Adoption. La requête SELECT  échoue donc avec le message d'erreur suivant :

ERROR 1142 (42000): SELECT command denied to user 'john'@'localhost' for table 'adoption'

Par contre, john a le droit d'exécuter les procédures de la base de données elevage. Il exécute donc sans
problème test_definer(), qui lui affiche le contenu d'Adoption. Les privilèges vérifiés au niveau des instructions exécutées par
la procédure sont en effet ceux de l'utilisateur student ayant défini celle-ci.

Préciser et modifier le définisseur

Les commandes de création des vues, triggers et procédures stockées permettent de préciser une clause DEFINER, dans
laquelle on précise l'identifiant d'un utilisateur.
Par défaut, c'est l'utilisateur courant qui est utilisé.
Cependant, il est possible de donner un autre utilisateur comme définisseur de l'objet, à condition d'avoir le privilège
global SUPER. Sans ce privilège, on ne peut donner comme DEFINER  que soi-même, soit avec CURRENT_USER 
ou CURRENT_USER(), soit avec l'identifiant ('student'@'localhost', par exemple).
La clause DEFINER  se place après le mot-clé CREATE.

Exemple : définition de deux procédures stockées avec l'utilisateur root (le seul ayant le privilège SUPER  sur notre serveur),
l'une avec root pour DEFINER  (CURRENT_USER()), l'autre avec john.

DELIMITER |

CREATE DEFINER = CURRENT_USER() PROCEDURE test_definer2()

BEGIN

SELECT * FROM Race;

END |

CREATE DEFINER = 'john'@'localhost' PROCEDURE test_definer3()

BEGIN

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
SELECT * FROM Race;

END |

DELIMITER ;

Si l'on exécute ces deux procédures avec l'utilisateur john, on obtient deux résultats différents.

CALL test_definer2();

CALL test_definer3();

La première procédure s'exécute sans problème. john n'a aucun droit sur la table Race, mais le définisseur
de test_definer2() étant root, ce sont ses privilèges qui comptent. Par contre, la seconde échoue, car le définisseur
de test_definer3() a été initialisé à john.

Modification du contexte

Il est possible, pour les vues et les procédures stockées, de changer la manière dont les privilèges sont vérifiés à l'exécution. On
peut faire en sorte que ce soient les privilèges de l'utilisateur qui se sert de la vue ou de la procédure ("l'invocateur") qui soient
vérifiés, et non plus les privilèges du définisseur.

Ce n'est pas possible pour les triggers, car ceux-ci ne sont pas exécutés directement par un utilisateur, mais par une action de
l'utilisateur (insertion, modification, suppression dans la table sur laquelle le trigger est défini).

Pour changer le contexte de vérification des privilèges d'une vue ou d'une procédure, il faut utiliser la clause SQL SECURITY
{DEFINER | INVOKER}.

Syntaxe de création des vues et des procédures, clauses DEFINER  et SQL SECURITY  comprises.

-- Vues

CREATE [OR REPLACE]

[ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]

[DEFINER = { utilisateur | CURRENT_USER }]

[SQL SECURITY { DEFINER | INVOKER }]

VIEW nom_vue [(liste_colonnes)]

AS requete_select

[WITH [CASCADED | LOCAL] CHECK OPTION]

-- Procédures

CREATE

[DEFINER = { utilisateur | CURRENT_USER }]

PROCEDURE nom_procedure ([parametres_procedure])

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
SQL SECURITY { DEFINER | INVOKER }

corps_procedure

Exemple : création, par l'utilisateur root, de deux vues avec des contextes de vérification des privilèges différents.

CREATE DEFINER = CURRENT_USER

SQL SECURITY DEFINER

VIEW test_contexte1

AS SELECT * FROM Race;

CREATE DEFINER = CURRENT_USER

SQL SECURITY INVOKER

VIEW test_contexte2

AS SELECT * FROM Race;

Toujours avec l'utilisateur root, on autorise john à faire des SELECT  sur ces vues.

GRANT SELECT ON elevage.test_contexte1 TO 'john'@'localhost';

GRANT SELECT ON elevage.test_contexte2 TO 'john'@'localhost';

Utilisons maintenant ces vues avec l'utilisateur john, qui n'a toujours aucun droit sur Race.

SELECT * FROM test_contexte1;

SELECT * FROM test_contexte2;

La première requête affiche bien la table Race. Par contre, la seconde échoue avec l'erreur suivante :

ERROR 1356 (HY000): View 'elevage.test_contexte2' references invalid table(s) or column(s) or function(s) or definer/invoke
r of view lack rights to use them

Options supplémentaires

La commande GRANT  possède encore deux clauses facultatives supplémentaires permettant de limiter les ressources serveur
de l'utilisateur, et d'obliger l'utilisateur à se connecter via SSL.

Limitation des ressources

On peut limiter trois choses différentes pour un utilisateur :

 le nombre de requêtes par heure (MAX_QUERIES_PER_HOUR) : limitation de toutes les commandes exécutées par
l'utilisateur ;

 le nombre de modifications par heure (MAX_UPDATES_PER_HOUR) : limitation des commandes entraînant la


modification d'une table ou d'une base de données ;

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
 le nombre de connexions au serveur par heure (MAX_CONNECTIONS_PER_HOUR).

Pour cela, on utilise la clause WITH MAX_QUERIES_PER_HOUR nb | MAX_UPDATES_PER_HOUR nb |


MAX_CONNECTIONS_PER_HOUR nbde la commande GRANT. On peut limiter une des ressources, ou deux, ou les trois
en une fois, chacune avec un nombre différent.

Exemple : création d'un compte 'aline'@'localhost'  ayant tous les droits sur la base de données elevage, mais avec des
ressources limitées.

CREATE USER 'aline'@'localhost' IDENTIFIED BY 'limited';

GRANT ALL ON elevage.*

TO 'aline'@'localhost'

WITH MAX_QUERIES_PER_HOUR 50

MAX_CONNECTIONS_PER_HOUR 5;

Connexion SSL

La clause REQUIRE  de la commande GRANT  permet d'obliger l'utilisateur à se connecter via SSL, c'est-à-dire à l'aide d'une
connexion sécurisée. Avec une telle connexion, toutes les données transitant entre le client et le serveur sont chiffrées, et non
plus passées en clair.

Nous ne verrons pas les détails de cette clause dans ce cours. Je vous renvoie donc à la documentation si vous êtes intéressé par
le sujet.

En résumé

 Les utilisateurs et leurs privilèges sont stockés dans la base de données mysql.

 On peut manipuler directement les tables de la base mysql, ou utiliser les commandes dédiées pour gérer les
utilisateurs (CREATE USER, DROP USER…) et leurs privilèges (GRANT, REVOKE).

 Lorsque l'on accorde un privilège à un utilisateur, il faut également préciser à quel niveau on le lui accorde (global,
base de données, table, colonne, procédure).

 Le privilège ALL  permet d'accorder en une fois tous les privilèges, sauf GRANT OPTION.

 Le privilège GRANT OPTION  permet à un utilisateur d'accorder à d'autres les privilèges qu'il possède.

 Les privilèges des vues, procédures stockées et triggers sont vérifiés de manière particulière, grâce aux
clauses DEFINER  et SQL SECURITY  utilisées à la création de ces objets.

 Il est également possible, avec la commande GRANT, de limiter les ressources disponibles pour un utilisateur, et
d'obliger un utilisateur à se connecter via SSL.

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
6.2.5. Comptes Utilisateur :

Syntaxe pour la création et la suppression

Voici les requêtes à utiliser pour créer et supprimer un utilisateur :

-- Création

CREATE USER 'login'@'hote' [IDENTIFIED BY 'mot_de_passe'];

-- Suppression

DROP USER 'login'@'hote';

Utilisateur

L'utilisateur est donc défini par deux éléments :

 son login ;

 l'hôte à partir duquel il se connecte.

Login

Le login est un simple identifiant. Vous pouvez le choisir comme vous voulez. Il n'est pas obligatoire de l'entourer de
guillemets, sauf s'il contient des caractères spéciaux comme - ou @. C'est cependant conseillé.

Hôte

L'hôte est l'adresse à partir de laquelle l'utilisateur va se connecter. Si l'utilisateur se connecte à partir de la machine sur
laquelle le serveur MySQL se trouve, on peut utiliser 'localhost'. Sinon, on utilise en général une adresse IP ou un nom de
domaine.

Exemples

CREATE USER 'max'@'localhost' IDENTIFIED BY 'maxisthebest';

CREATE USER 'elodie'@'194.28.12.4' IDENTIFIED BY 'ginko1';

CREATE USER 'gabriel'@'arb.brab.net' IDENTIFIED BY 'chinypower';

Il est également possible de permettre à un utilisateur de se connecter à partir de plusieurs hôtes différents (sans devoir créer un
utilisateur par hôte) : en utilisant le joker %, on peut préciser des noms d'hôtes partiels ou permettre à l'utilisateur de se
connecter à partir de n'importe quel hôte.

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
Exemples

-- thibault peut se connecter à partir de n'importe quel hôte dont l'adresse IP commence par 194.28.12.

CREATE USER 'thibault'@'194.28.12.%' IDENTIFIED BY 'basketball8';

-- joelle peut se connecter à partir de n'importe quel hôte du domaine brab.net

CREATE USER 'joelle'@'%.brab.net' IDENTIFIED BY 'singingisfun';

-- hannah peut se connecter à partir de n'importe quel hôte

CREATE USER 'hannah'@'%' IDENTIFIED BY 'looking4sun';

Comme pour le login, les guillemets ne sont pas obligatoires, sauf si un caractère spécial est utilisé (comme le joker  %, par
exemple). Notez que, si vous ne précisez pas d'hôte, c'est comme si vous autorisiez tous les hôtes. 'hannah'@'%'  est donc
équivalent à 'hannah'.

Les guillemets se placent indépendamment autour du login et autour de l'hôte. N'entourez pas tout par des
guillemets : CREATE USER 'marie@localhost'  créera un utilisateur dont le login est 'marie@localhost', autorisé à se
connecter à partir de n'importe quel hôte.

Renommer l'utilisateur

Pour modifier l'identifiant d'un utilisateur (login et/ou hôte), on peut utiliser RENAME USER ancien_utilisateur TO
nouvel_utilisateur.

Exemple : on renomme max en maxime, en gardant le même hôte.

RENAME USER 'max'@'localhost' TO 'maxime'@'localhost';

Mot de passe

Le mot de passe de l'utilisateur est donné par la clause IDENTIFIED BY. Cette clause n'est pas obligatoire, auquel cas
l'utilisateur peut se connecter sans donner de mot de passe. Ce n'est évidemment pas une bonne idée du point de vue de la
sécurité. Évitez au maximum les utilisateurs sans mot de passe.

Lorsqu'un mot de passe est précisé, il n'est pas stocké tel quel dans la table mysql.user. Il est d'abord hashé, et c'est cette valeur
hashée qui est stockée.

Modifier le mot de passe

Pour modifier le mot de passe d'un utilisateur, on peut utiliser la commande SET PASSWORD  (à condition d'avoir les
privilèges nécessaires, ou d'être connecté avec l'utilisateur dont on veut changer le mot de passe).
Cependant, cette commande ne hashe pas le mot de passe automatiquement. Il faut donc utiliser la fonction PASSWORD().

Exemple

SET PASSWORD FOR 'thibault'@'194.28.12.%' = PASSWORD('basket8');

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
Les privilèges - introduction

Lorsque l'on crée un utilisateur avec CREATE USER, celui-ci n'a au départ aucun privilège, aucun droit.
En SQL, avoir un privilège, c'est avoir l'autorisation d'effectuer une action sur un objet.

Un utilisateur sans aucun privilège ne peut rien faire d'autre que se connecter. Il n'aura pas accès aux données, ne pourra créer
aucun objet (base/table/procédure/autre) ni en utiliser.

Lorsque l'on crée un utilisateur avec CREATE USER, celui-ci n'a au départ aucun privilège, aucun droit.
En SQL, avoir un privilège, c'est avoir l'autorisation d'effectuer une action sur un objet.

Un utilisateur sans aucun privilège ne peut rien faire d'autre que se connecter. Il n'aura pas accès aux données, ne pourra créer
aucun objet (base/table/procédure/autre) ni en utiliser.

Les différents privilèges

Il existe de nombreux privilèges dont voici une sélection des plus utilisés (à l'exception des privilèges
particuliers ALL, USAGE  et GRANT OPTION  que nous verrons plus loin).

Privilèges du CRUD

Les privilèges SELECT, INSERT, UPDATE  et DELETE  permettent aux utilisateurs d'utiliser ces mêmes commandes.

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
Gestion des utilisateurs

La gestion des utilisateurs est le processus contrôlant les utilisateurs autorisés à se connecter au serveur MySQL et définissant
les permissions d’accès sur chaque base de données. phpMyAdmin ne gère pas les utilisateurs : il passe le nom et le mot de
passe utilisateur à MySQL, qui détermine alors si un utilisateur est autorisé à réaliser une action particulière. Dans
phpMyAdmin, les administrateurs ont tous les droits pour créer, voir et éditer les privilèges ou supprimer les utilisateurs.

Dans phpMyAdmin, la gestion des utilisateurs est contrôlée par le lien Utilisateurs en page principale. Les utilisateurs peuvent
être créés, modifiés et supprimés.

Création d’un nouvel utilisateur

Pour créer un nouvel utilisateur, cliquer sur le lien Ajouter un nouvel utilisateur en bas de la page Utilisateurs (il faut être un
« super utilisateur », par exemple « root »). Utiliser les boîtes de texte et les listes déroulantes pour configurer l’utilisateur
selon les besoins. Il sera alors possible de choisir s’il faut créer une base de données pour cet utilisateur et accorder des
privilèges globaux spécifiques. Une fois créé (en cliquant sur « Go »), les permissions de l’utilisateur pourront être définie
pour une base de données spécifique (ne pas accorder pas de privilèges globaux dans ce cas). En général, les utilisateurs n’ont
pas besoin de privilèges globaux (autre que USAGE), seulement des permissions sur leur base de données spécifique.

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
Modification d’un utilisateur existant

Pour modifier un utilisateur existant, cliquer sur l’icône représentant un crayon à droite de l’utilisateur dans la
page Utilisateurs. Il est possible de modifier ses privilèges globaux ou spécifiques à une base de données, modifier son mot de
passe ou copier ses privilèges vers un nouvel utilisateur.

Suppression d’un utilisateur

Dans la page Utilisateurs, cocher la case de l’utilisateur à supprimer, choisir ou non de supprimer les bases de données du
même nom (s’il en existe) et cliquer sur « Go ».

Affectation de privilèges à un utilisateur pour une base de données spécifique

Les utilisateurs sont assignés à des bases de données en éditant l’enregistrement utilisateur (à partir du lien Comptes
utilisateurs de la page d’accueil). Si un utilisateur est spécifiquement créé pour une table donnée, il faudra d’abord le créer
(sans privilège global) puis revenir éditer cet utilisateur pour ajouter la table et les privilèges pour la table individuelle.

Menus et groupes utilisateurs configurables

En activant $cfg['Servers'][$i]['users'] et $cfg['Servers'][$i]['usergroups'] vous pouvez personnaliser ce que les utilisateurs


verront dans l’interface de phpMyAdmin.

Avertissement

Cette fonctionnalité limite ce que peut voir un utilisateur, ils restent toujours capable d’utiliser toutes les fonctions. Ceci n’est
donc pas considéré comme une limitation de sécurité. Pour cela, vous devez utiliser les privilèges de MySQL.

Avec cette fonctionnalité activée, l’interface de gestion Comptes utilisateurs s’agrémente d’un nouvel onglet pour la gestion
des Groupes utilisateurs, où il est possible de définir ce que chaque groupe peut voir (consulter l’image ci-dessous) et affecter
un utilisateur à un groupe. Les utilisateurs auront alors une interface simplifiée, ce qui peut s’avérer utile pour des utilisateurs
inexpérimentés qui seraient noyés par toutes les fonctionnalités que phpMyAdmin propose.

6.2.6. Routines Stockées :

Routines stockées

1. Rôle

Les routines stockées sont des programmes (des procédures ou des fonctions) créés par l’utilisateur, précompilés et stockés
dans le serveur MySQL. Elles permettent de déplacer une partie de la logique métier d’une application du client vers le
serveur. Le client n’a alors plus besoin de soumettre à nouveau toute la commande, mais a juste à faire une simple référence à
la routine.

Les routines stockées peuvent avoir plusieurs utilités :

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
 Améliorer la sécurité : les programmes clients n’accèdent plus directement aux tables. Telle une API, toutes les
opérations de gestion des données sont effectuées via des routines stockées, ce qui limite les privilèges à leur
exécution, sans pour autant donner accès aux tables qui hébergent l’information.

 Centraliser les requêtes : différentes applications (qui peuvent utiliser des langages de programmation différents)
peuvent accéder aux mêmes données et avoir les mêmes fonctionnalités, ce qui permet de factoriser le code SQL
commun et implique une diminution de la redondance et une facilité de maintenance du code.

 Augmenter les performances : les commandes n’ont pas à être analysées plusieurs fois et bien moins d’informations
transitent sur le réseau, ce qui permet de limiter...

Déclencheurs (triggers)

1. Rôle

Les déclencheurs ou triggers sont des objets dont le but est d’exécuter du code en réaction à un événement qui survient sur une
table. Les événements peuvent être de trois types : INSERT, UPDATE ou DELETE (ou assimilés, par exemple,
l’instruction REPLACE qui vaut soit INSERT, soit INSERT et DELETE). L’ordre de déclenchement est défini avant
(BEFORE) ou après (AFTER) l’événement. Par exemple, le DBA choisira BEFORE pour un test de vérification sur des
données et AFTER pour de la journalisation.

2. Syntaxe

La syntaxe à observer lors de la création d’un déclencheur est :

CREATE  

[DEFINER = { user | CURRENT_USER }]  

TRIGGER nom_du_trigger moment_du_déclenchement  

action_qui_déclenche  

ON nom_de_table FOR EACH ROW corps_du_déclencheur

avec moment_du_déclenchement qui vaut BEFORE ou AFTER et action_qui_déclenche qui prend les


valeurs INSERT, UPDATE ou DELETE.

Dans le corps du déclencheur, les alias OLD et NEW sont disponibles en fonction du contexte (INSERT/UPATE/DELETE).


Ils permettent d’accéder respectivement à la valeur d’une colonne de la table qui contient le déclencheur, avant modification et
après :

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
 Lors d’un UPDATE, OLD.colonne référence la valeur de la colonne avant la modification, alors que NEW.colonne,
sa valeur...

6.2.7. Gestion des Comptes Utilisateur :

Vous voulez comprendre les bases des opérations de MySQL ? Continuez à lire, car cet article vous montrera comment créer
un utilisateur dans MySQL. Vous découvrirez également plusieurs commandes permettant d’accorder des privilèges, de les
révoquer et de supprimer des utilisateurs existants.

Créer un compte utilisateur MySQL et accorder tous les privilèges

Comme vous commencez à utiliser MySQL, vous allez recevoir un nom d’utilisateur et un mot de passe. Ces informations
d’identification initiales vous accordent l’accès root. L’utilisateur root a un accès complet à toutes les bases de données et
tables dans ces bases de données.

Cependant, il arrive que vous deviez donner accès à la base de données à quelqu’un d’autre sans lui accorder le contrôle total.

Par exemple, vous engagez des développeurs pour maintenir vos bases de données, mais vous ne voulez pas leur donner la
possibilité de supprimer ou de modifier des informations sensibles.

Dans ce cas, vous devez leur donner les coordonnées d’un utilisateur non root. De cette façon, vous pourrez suivre ce que les
développeurs peuvent et ne peuvent pas faire avec vos données.

Dans cette partie, nous expliquerons comment créer un compte d’utilisateur dans MySQL et accorder tous les privilèges à votre
base de données. D’un point de vue pratique, il n’est pas judicieux de donner le contrôle total à un utilisateur non root.
Cependant, c’est un bon point d’entrée pour en savoir plus sur les privilèges des utilisateurs.

Pour créer un nouveau compte d’utilisateur dans MySQL, suivez les étapes suivantes :

1.

1. Accédez à la ligne de commande et entrez dans le serveur MySQL

mysql

2. Le script renvoie ce résultat, qui vérifie que vous accédez à un serveur MySQL.

mysql>

3. Ensuite, exécutez la commande suivante :

CREATE USER 'nouveau_utilisateur'@'localhost' IDENTIFIED BY 'mot_de_passe';

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
Dans cette commande, ‘nouveau_utilisateur’ est le nom que nous avons donné à notre nouvel utilisateur.
Et ‘mot_de_passe’ est le mot de passe de cet utilisateur. Vous pouvez remplacer ces valeurs par les vôtres, à l’intérieur des
guillemets.

4. La simple création de ce nouvel utilisateur ne suffit pas. Vous devez lui accorder des privilèges. Pour
accorder à l’utilisateur récemment créé tous les privilèges pour la base de données, exécutez la commande
suivante :

GRANT ALL PRIVILEGES ON * . * TO 'nouveau_utilisateur'@'localhost';

5. Pour que les changements prennent effet, il faut immédiatement supprimer ces privilèges en tapant la
commande :

FLUSH PRIVILEGES

Et c’est tout! Votre nouvel utilisateur a le même accès à la base de données que l’utilisateur root.

Accorder des privilèges séparément pour un utilisateur MySQL

Dans cette partie, nous expliquerons comment accorder des privilèges séparément pour un compte d’utilisateur dans MySQL.

Lorsque vous indiquez le nom de la base de données et le nom de la table, séparez-les par un  . (point) et sans espace. Cela
permettra à l’utilisateur root d’exercer un contrôle précis sur certaines données.

De plus, remplacez la valeur TYPE_DE_PERMISSION par le type d’accès que vous souhaitez accorder à votre nouveau
compte d’utilisateur.

Voici les commandes les plus utilisées dans MySQL :

 CREATE – Permet aux utilisateurs de créer des bases de données/tableaux

 SELECT – Permet aux utilisateurs de récupérer des données

 INSERT – Permet aux utilisateurs d’ajouter de nouvelles entrées dans les tableaux

 UPDATE – Permet aux utilisateurs de modifier les entrées existantes dans les tableaux

 DELETE – Permet aux utilisateurs de supprimer les entrées de la tableau

 DROP – Permet aux utilisateurs de supprimer des bases de données/tableaux entiers

REMARQUE : L’utilisation de la permission ALL PRIVILEGES de la version précédente permettra d’obtenir toutes les
permissions énumérées ci-dessus.

Pour utiliser l’une de ces options, remplacez simplement TYPE_DE_PERMISSION par le mot-clé approprié. Pour appliquer
plusieurs privilèges, séparez-les avec une commande comme celle-ci. Par exemple, nous pouvons assigner les
privilèges CREATE et SELECT à notre utilisateur MySQL non root avec cette commande

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
GRANT CREATE, SELECT ON * . * TO 'nom_utilisateur'@'localhost';

Bien sûr, vous pourriez faire face à une situation où vous devez révoquer certains privilèges d’un utilisateur. Vous pouvez le
faire en utilisant la commande suivante:

REVOKE TYPE_DE_PERMISSION ON base_de_donnees.table FROM ‘nom_utilisateur’@‘localhost’;

Par exemple, pour révoquer tous les privilèges de notre utilisateur non-root, nous devrions utiliser:

REVOKE ALL PRIVILEGES ON *.* FROM 'nom_utilisateur'@'localhost';

Enfin, vous pouvez supprimer entièrement un utilisateur existant en utilisant la commande suivante:

DROP USER ‘nom_utilisateur’@‘localhost’;

REMARQUE : N’oubliez pas que vous devez disposer d’un accès root pour exécuter l’une de ces commandes. Assurez-vous
d’exécuter la commande FLUSH PRIVILEGES ; après avoir effectué vos modifications.

Afficher les privilèges d’un compte utilisateur MySQL

Afin de trouver quels privilèges ont déjà été accordés à un utilisateur MySQL, vous pouvez utiliser la commande  SHOW
GRANTS :

SHOW GRANTS FOR 'nom_utilisateur'@'localhost';

Le résultat sera similaire à celui-ci :

Conclusion

Une base de données est un élément essentiel de tout site web et de toute application web, car elle stocke toutes les données
des utilisateurs. Pour la gérer et communiquer avec elle plus efficacement, vous aurez besoin d’un système de gestion de base
de données. C’est pourquoi nous vous recommandons d’utiliser l’option la plus populaire et la plus recommandée – MySQL,
en raison de sa fiabilité et de sa facilité d’utilisation.

Dans ce tutoriel, vous avez appris quelques commandes de base pour effectuer plusieurs tâches dans MySQL, notamment :

 Créer un utilisateur MySQL et lui accorder tous les privilèges

 Donner des privilèges spécifiques à un utilisateur, les révoquer et supprimer entièrement un utilisateur MySQL

 Afficher les privilèges dont dispose déjà un utilisateur de MySQL

Bonne chance, et n’hésitez pas à laisser un commentaire ci-dessous si vous avez des questions.

Types d’utilisateurs de base de données

Il existe deux types de comptes utilisateur de base de données dans Plesk :

 Comptes utilisateur ayant accès uniquement à une base de données spécifique. Si vous travaillez avec d’autres
personnes pour gérer un site Web et souhaitez leur permettre d’accéder à la base de données, vous devez créer pour

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
chacun un compte utilisateur. Chacun de ces comptes est utilisé pour accéder uniquement à une base de données.
Dans ce cas, vous devez d’abord créer une base de données, puis les comptes utilisateur.

 Comptes utilisateurs universels ayant accès à toutes les bases de données.

Les utilisateurs universels accèdent non seulement à toutes les bases de données existantes, mais aussi à toutes les nouvelles
bases de données.

Si vous projetez d’installer plusieurs applications Web sur votre site, il peut être pratique de créer un seul compte utilisateur
universel afin que toutes les applications puissent accéder à leurs bases de données à l’aide de ce compte. Dans ce cas, vous
pouvez créer un compte utilisateur universel et l’utiliser lorsque vous installez les applications.

Gestion des utilisateurs

La gestion des utilisateurs est le processus contrôlant les utilisateurs autorisés à se connecter au serveur MySQL et définissant
les permissions d’accès sur chaque base de données. phpMyAdmin ne gère pas les utilisateurs : il passe le nom et le mot de
passe utilisateur à MySQL, qui détermine alors si un utilisateur est autorisé à réaliser une action particulière. Dans
phpMyAdmin, les administrateurs ont tous les droits pour créer, voir et éditer les privilèges ou supprimer les utilisateurs.

Dans phpMyAdmin, la gestion des utilisateurs est contrôlée par le lien Utilisateurs en page principale. Les utilisateurs peuvent
être créés, modifiés et supprimés.

Création d’un nouvel utilisateur

Pour créer un nouvel utilisateur, cliquer sur le lien Ajouter un nouvel utilisateur en bas de la page Utilisateurs (il faut être un
« super utilisateur », par exemple « root »). Utiliser les boîtes de texte et les listes déroulantes pour configurer l’utilisateur
selon les besoins. Il sera alors possible de choisir s’il faut créer une base de données pour cet utilisateur et accorder des
privilèges globaux spécifiques. Une fois créé (en cliquant sur « Go »), les permissions de l’utilisateur pourront être définie
pour une base de données spécifique (ne pas accorder pas de privilèges globaux dans ce cas). En général, les utilisateurs n’ont
pas besoin de privilèges globaux (autre que USAGE), seulement des permissions sur leur base de données spécifique.

Modification d’un utilisateur existant

Pour modifier un utilisateur existant, cliquer sur l’icône représentant un crayon à droite de l’utilisateur dans la
page Utilisateurs. Il est possible de modifier ses privilèges globaux ou spécifiques à une base de données, modifier son mot de
passe ou copier ses privilèges vers un nouvel utilisateur.

Suppression d’un utilisateur

Dans la page Utilisateurs, cocher la case de l’utilisateur à supprimer, choisir ou non de supprimer les bases de données du
même nom (s’il en existe) et cliquer sur « Go ».

Affectation de privilèges à un utilisateur pour une base de données spécifique

Les utilisateurs sont assignés à des bases de données en éditant l’enregistrement utilisateur (à partir du lien Comptes
utilisateurs de la page d’accueil). Si un utilisateur est spécifiquement créé pour une table donnée, il faudra d’abord le créer
(sans privilège global) puis revenir éditer cet utilisateur pour ajouter la table et les privilèges pour la table individuelle.

Menus et groupes utilisateurs configurables

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
En activant $cfg['Servers'][$i]['users'] et $cfg['Servers'][$i]['usergroups'] vous pouvez personnaliser ce que les utilisateurs
verront dans l’interface de phpMyAdmin.

Avertissement

Cette fonctionnalité limite ce que peut voir un utilisateur, ils restent toujours capable d’utiliser toutes les fonctions. Ceci n’est
donc pas considéré comme une limitation de sécurité. Pour cela, vous devez utiliser les privilèges de MySQL.

Avec cette fonctionnalité activée, l’interface de gestion Comptes utilisateurs s’agrémente d’un nouvel onglet pour la gestion
des Groupes utilisateurs, où il est possible de définir ce que chaque groupe peut voir (consulter l’image ci-dessous) et affecter
un utilisateur à un groupe. Les utilisateurs auront alors une interface simplifiée, ce qui peut s’avérer utile pour des utilisateurs
inexpérimentés qui seraient noyés par toutes les fonctionnalités que phpMyAdmin propose.

Sommaire :

Syntaxe de GRANT et REVOKE

Nom d'utilisateurs MySQL et mots de passe

Quand les modifications de privilèges prennent-ils effets ?

Création des premiers droits MySQL

Ajouter de nouveaux utilisateurs à MySQL

Limiter les ressources utilisateurs

Configurer les mots de passe

Garder vos mots de passe en lieu sûr

Utilisation des connexions sécurisées

4.3.1 Syntaxe de GRANT et REVOKE

GRANT priv_type [(liste_colonnes)] [, priv_type [(liste_colonnes)] ...]

ON {nom_de_table | * | *.* | nom_base.*}

TO nom_utilisateur [IDENTIFIED BY [PASSWORD] 'password']

[, nom_utilisateur [IDENTIFIED BY 'password'] ...]

[REQUIRE

NONE |

[{SSL| X509}]

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
[CIPHER cipher [AND]]

[ISSUER issuer [AND]]

[SUBJECT subject]]

[WITH [GRANT OPTION | MAX_QUERIES_PER_HOUR # |

MAX_UPDATES_PER_HOUR # |

MAX_CONNECTIONS_PER_HOUR #]]

REVOKE priv_type [(liste_colonnes)] [, priv_type [(liste_colonnes)] ...]

ON {nom_de_table | * | *.* | nom_base.*}

FROM nom_utilisateur [, nom_utilisateur ...]

GRANT est disponible depuis MySQL version 3.22.11. Pour les versions plus anciennes de MySQL, la commande GRANT ne
fait rien.

Les commandes GRANT et REVOKE permettent aux administrateurs système de créer des utilisateurs, de leur donner ou de
leur retirer des droits, sur 4 niveaux :

Niveau global

Les droits globaux s'appliquent à toutes les bases de données d'un serveur. Ces droits sont stockés dans la table mysql.user .
REVOKE ALL ON *.* retirera seulement les privilèges globaux.

Niveau base de données

Les droits de niveau de base de données s'appliquent à toutes les tables d'une base de données. Ces droits sont stockés dans les
tables mysql.db et mysql.host . REVOKE ALL ON db.* retirera seulement les privilèges de base de données.

Niveau table

Les droits de table s'appliquent à toutes les colonnes d'une table. Ces droits sont stockés dans la table mysql.tables_priv .
REVOKE ALL ON db.table retirera seulement les privilèges de table.

Niveau colonne

Les droits de niveau de colonnes s'appliquent à des colonnes dans une table. Ces droits sont stockés dans la table
mysql.columns_priv . Quand vous utilisez REVOKE vous devez spécifier les mêmes colonnes qui s'étaient vues accorder des
privilèges.

Si vous donnez des droits à un utilisateur qui n'existe pas, vous créerez cet utilisateur. Pour voir des illustrations du
fonctionnement de la commande GRANT , voyez Ajouter de nouveaux utilisateurs à MySQL .

Pour les commandes GRANT et REVOKE , la clause priv_type peut être spécifiée par les constantes suivantes :

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
ALL [PRIVILEGES] Tous les droits sauf WITH GRANT OPTION .

ALTER Autorise l'utilisation de ALTER TABLE .

CREATE Autorise l'utilisation de CREATE TABLE .

CREATE TEMPORARY TABLES Autorise l'utilisation de CREATE TEMPORARY TABLE .

DELETE Autorise l'utilisation de DELETE .

DROP Autorise l'utilisation de DROP TABLE .

EXECUTE Autorise l'utilisateur à exécuter des procédures stockées (pour MySQL 5.0).

FILE Autorise l'utilisation de SELECT ... INTO OUTFILE et LOAD DATA INFILE .

INDEX Autorise l'utilisation de CREATE INDEX et DROP INDEX .

INSERTAutorise l'utilisation de INSERT .

LOCK TABLES Autorise l'utilisation de LOCK TABLES sur les tables pour lesquelles l'utilisateur a les droits de SELECT .

PROCESS Autorise l'utilisation de SHOW FULL PROCESSLIST .

REFERENCES Réservé pour le futur.

RELOAD Autorise l'utilisation de FLUSH .

REPLICATION CLIENT Donne le droit à l'utilisateur de savoir où sont les maîtres et esclaves.

REPLICATION SLAVE Nécessaire pour les esclaves de réplication (pour lire les historiques binaires du maître).

SELECT Autorise l'utilisation de SELECT .

SHOW DATABASES SHOW DATABASES affiche toutes les bases de données.

SHUTDOWN Autorise l'utilisation de mysqladmin shutdown .

SUPER Autorise une connexion unique même si max_connections est atteind, et l'exécution des commandes CHANGE
MASTER , KILL thread , mysqladmin debug , PURGE MASTER LOGS et SET GLOBAL .

UPDATE Autorise l'utilisation de UPDATE .

USAGE Synonyme de ``pas de droits''.

GRANT OPTION Synonyme pour WITH GRANT OPTION

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
6.2.8. Utilisation de Connexions Sécurisées :

Disponible depuis la version 4.0.0, MySQL supporte les connexions sécurisées. Pour comprendre comment MySQL utilise
SSL, il est nécessaire de comprendre les concepts SSL et X509 de base. Ceux qui les connaissent, peuvent aisément sauter ce
chapitre.

Par défaut, MySQL utilise une connexion en clair entre le client et le serveur. Cela signifie qu'une personne peut surveiller
votre trafic, et lire les données échangées. Cette personne pourrait aussi modifier les données qui transitent entre le client et le
serveur. Parfois, vous aurez besoin d'échanger des informations sur un réseau public, mais en sécurisant ces informations. Dans
ce cas, utiliser une connexion sans protection est inacceptable.

SSL est un protocole qui utilise différents algorithmes de chiffrement pour s'assurer que les données qui transitent par un
réseau public peuvent être considérées comme fiables. Ce protocole dispose de méthodes pour s'assurer que les données n'ont
pas été modifiées, ce que soit par une altération, une perte ou une répétition des données. SSL inclut aussi des algorithmes pour
reconnaître et fournit des outils de vérifications d'identité, pris en charge par le standard X509.

Le chiffrement est une méthode pour rendre des données illisibles. En fait, les pratiques actuelles requièrent d'autres éléments
de sécurité issus des algorithmes de chiffrement. Ils doivent savoir résister à de nombreux types d'attaque, comme la
modification de l'ordre des messages ou les répétitions inopinées.

X509 est un standard qui rend possible l'identification d'une personne sur l'internet. Il est particulièrement utilisé pour les
applications e-commerce. En termes simples, il doit y avoir une entreprise (appelée l'``autorité de certification'') qui assigne un
certificat électronique à toute personne qui en a besoin. Ces certificats utilisent un chiffrement assymétrique qui exploitent
deux clés de chiffrement, une clé publique et une clé privée. Le propriétaire d'un certificat peut prouver son identité en
montrant son certificat à l'autre partie. Un certificat est constitué de la clé publique du propriétaire. Toute donnée qui est
chiffrée avec cette clé publique doit être déchiffrée avec la clé secrète correspondante, qui est détenue par le propriétaire du
certificat.

MySQL n'utilise pas les connexions chiffrées par défaut, car cela ralentit considérablement le protocole de communication.
Toute fonctionnalité supplémentaire requiert du travail supplémentaire de la part du serveur, et chiffrer des données est une
tâche particulièrement coûteuse, qui peut ralentir considérablement les tâches principales de MySQL. Par défaut, MySQL est
paramétré pour être aussi rapide que possible.

Si vous avez besoin de plus d'informations sur SSL, X509 ou le chiffrement, utilisez votre moteur de recherche préféré sur
Internet, et utilisez ces mots clés pour avoir plus de détails.

Pour utiliser les connexions SSL entre le serveur MySQL et les clients, vous devez avoir le support de OpenSSL et votre
version de MySQL doit être 4.0.0 ou plus récente.

Pour faire fonctionner les connexions sécurisées avec MySQL, vous devez disposer de ceci :

1. Installation de la bibliothèque d'OpenSSL. Nous avons testé MySQL avec OpenSSL 0.9.6. http://www.openssl.org/.

2. Lorsque vous configurez MySQL, utilisez le script configure avec les options --with-vio et --with-openssl.

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
3. Assurez vous que vous avez une version de la table mysql.user à jour. Ceci est nécessaire si vos tables de droits
proviennent d'un version de MySQL antérieure à la version 4.0.0. La procédure de mise à jour est décrite
dans Section 2.6.7, « Mise à jour des tables de droits ».

4. Vous pouvez vérifier que vous posséder un serveur mysqld qui supporte OpenSSL en examinant le résultat de la
commande SHOW VARIABLES LIKE 'have_openssl' :

5. mysql> SHOW VARIABLES LIKE 'have_openssl';

6. +---------------+-------+

7. | Variable_name | Value |

8. +---------------+-------+

9. | have_openssl | YES |

10. +---------------+-------+

elle doit retourner YES.

MySQL est le système de gestion de base de données relationnelle open source le plus populaire. Le serveur MySQL nous
permet de créer de nombreux comptes d'utilisateurs et d'accorder les privilèges appropriés pour que les utilisateurs puissent
accéder et gérer les bases de données.

Ce didacticiel explique comment créer des comptes d'utilisateurs MySQL et accorder des privilèges.

Avant que tu commences

Nous supposons que vous avez déjà un serveur MySQL ou MariaDB installé sur votre système.

Toutes les commandes sont exécutées à l'intérieur du shell MySQL en tant qu'utilisateur root ou administrateur. Les privilèges
minimum requis pour créer des comptes d'utilisateurs et définir leurs privilèges sont CREATE USER et GRANT .

Pour accéder au shell MySQL, tapez la commande suivante et entrez votre mot de passe d'utilisateur racine MySQL lorsque
vous y êtes invité:

mysql -u root -p

Créer un nouveau compte utilisateur MySQL

Un compte d'utilisateur dans MySQL se compose d'un nom d'utilisateur et de parties de nom d'hôte.

Pour créer un nouveau compte utilisateur MySQL, exécutez la commande suivante:

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'user_password'; Remplacez la valeur d'espace réservé newuser par


le nouveau nom d'utilisateur souhaité et la valeur d'espace réservé user_password par le mot de passe utilisateur.

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
Dans la commande ci-dessus, la partie hostname est définie sur localhost, ce qui signifie que l'utilisateur ne pourra se connecter
au serveur MySQL que depuis localhost (c'est-à-dire depuis le système sur lequel MySQL Server s'exécute).

Pour accorder l'accès à partir d'un autre hôte, modifiez la partie du nom d'hôte ( localhost ) avec l'IP de la machine distante. Par
exemple, pour accorder l'accès à partir d'une machine avec IP 10.8.0.5 vous devez exécuter:

CREATE USER 'newuser'@'10.8.0.5' IDENTIFIED BY 'user_password';

Pour créer un utilisateur qui peut se connecter à partir de n'importe quel hôte, utilisez le caractère générique  '%' comme partie
hôte:

CREATE USER 'newuser'@'%' IDENTIFIED BY 'user_password';

Accorder des privilèges à un compte d'utilisateur MySQL

Il existe plusieurs types de privilèges qui peuvent être accordés à un compte d'utilisateur. Vous pouvez trouver une liste
complète des privilèges pris en charge par MySQL ici.

Les privilèges les plus couramment utilisés sont:

 ALL PRIVILEGES - Accorde tous les privilèges à un compte d'utilisateur. CREATE - Le compte d'utilisateur est
autorisé à créer des bases de données et des tables. DROP - Le compte d'utilisateur est autorisé à supprimer des bases
de données et des tables. DELETE - Le compte d'utilisateur est autorisé à supprimer des lignes d'une table
spécifique. INSERT - Le compte d'utilisateur est autorisé à insérer des lignes dans une table spécifique. SELECT - Le
compte utilisateur est autorisé à lire une base de données. UPDATE - Le compte d'utilisateur est autorisé à mettre à
jour les lignes de table.

Pour accorder des privilèges spécifiques à un compte d'utilisateur, vous pouvez utiliser la syntaxe suivante:

GRANT permission1, permission2 ON database_name.table_name TO 'database_user'@'localhost';

Voici quelques exemples:

 Accordez tous les privilèges à un compte d'utilisateur sur une base de données spécifique:

GRANT ALL PRIVILEGES ON database_name.* TO 'database_user'@'localhost';

Accordez tous les privilèges à un compte d'utilisateur sur toutes les bases de données:

GRANT ALL PRIVILEGES ON *.* TO 'database_user'@'localhost';

Accordez tous les privilèges à un compte d'utilisateur sur une table spécifique à partir d'une base de données:

 GRANT ALL PRIVILEGES ON database_name.table_name TO 'database_user'@'localhost';

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
Accordez plusieurs privilèges à un compte d'utilisateur sur une base de données spécifique:

GRANT SELECT, INSERT, DELETE ON database_name.* TO database_user@'localhost';

Afficher les privilèges du compte utilisateur MySQL

Pour trouver les privilèges accordés à un compte d'utilisateur MySQL spécifique, utilisez l'instruction SHOW GRANTS :

SHOW GRANTS FOR 'database_user'@'localhost';

+---------------------------------------------------------------------------+ | Grants for database_user@localhost |


+---------------------------------------------------------------------------+ | GRANT USAGE ON *.* TO 'database_user'@'localhost' | |
GRANT ALL PRIVILEGES ON `database_name`.* TO 'database_user'@'localhost' |
+---------------------------------------------------------------------------+ 2 rows in set (0.00 sec)

Révoquer les privilèges d'un compte d'utilisateur MySQL

La syntaxe pour révoquer un ou plusieurs privilèges d'un compte d'utilisateur est presque identique à celle de l'octroi de
privilèges.

Par exemple, pour révoquer tous les privilèges d'un compte d'utilisateur sur une base de données spécifique, utilisez la
commande suivante:

REVOKE ALL PRIVILEGES ON database_name.* FROM 'database_user'@'localhost';

Supprimer un compte d'utilisateur MySQL existant

Pour supprimer un compte utilisateur MySQL, utilisez l'instruction DROP USER :

DROP USER 'user'@'localhost'

La commande ci-dessus supprimera le compte utilisateur et ses privilèges.

Conclusion

Ce didacticiel ne couvre que les bases, mais il devrait être un bon début pour quiconque souhaite apprendre à créer de
nouveaux comptes d'utilisateurs MySQL et à accorder des privilèges.

7. Chapitre 7 : Administration des Données :


7.1. Maintenance des Tables :

Maintenance des tables

1. Mise à jour des statistiques d’index

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
Avoir des statistiques d’index à jour, c’est avoir la garantie que l’optimiseur de requêtes choisira le bon plan d’exécution. C’est
donc s’assurer que les performances du serveur ne vont pas se dégrader de manière aléatoire, simplement parce que certaines
requêtes vont être résolues avec un coûteux parcours complet de la table alors qu’un index aurait nettement pu limiter le
nombre de lignes à lire.

En général, vous constaterez qu’il n’est pas nécessaire de forcer un recalcul de ces statistiques, parce qu’InnoDB les recalcule
de temps à autre grâce à l’option innodb_stats_auto_recalc activée par défaut. Ce recalcul a lieu principalement lorsque le
nombre d’enregistrements de la table a fortement varié. Pour calculer les statistiques, InnoDB n’a pas besoin de parcourir la
table en entier, il parcourt simplement un échantillon de pages et en déduit des statistiques supposées correctes pour toute la
table.

Cette manière de procéder a pour avantage de rendre l’opération de mise à jour des statistiques peu coûteuse en temps et en
charge serveur. Mais si certaines tables ont des distributions de données particulièrement hétérogènes, cet échantillonage peut
être à l’origine...

Généralités sur la réplication

MySQL dispose d’un système natif de réplication, simple à mettre en place et pouvant être utile dans de nombreuses situations.
Quand un serveur (l’esclave) réplique les données d’un autre serveur (le maître), l’esclave est automatiquement synchronisé
par rapport à son maître. La plupart des applications ayant MySQL pour SGBD utilisent la réplication pour aider à tenir la
charge, pour augmenter la disponibilité de la base de données, pour simplifier la mise en place de sauvegardes, pour décharger
le maître de grosses requêtes consommatrices de ressources et pour bien d’autres raisons encore.

Ce chapitre va, entre autres, vous expliquer quels sont les problèmes que la réplication peut résoudre, comment configurer un
maître et un esclave et ce qu’il convient de faire si la réplication ne fonctionne plus.

1. Utilité de la réplication

La réplication est susceptible de vous aider pour un grand nombre de problèmes courants avec les bases de données :

 La tenue à la montée en charge des lectures : bien souvent, une application ne fonctionne au départ qu’avec un seul
serveur de bases de données. Mais si le trafic augmente, on arrive très vite à un point où le serveur n’a plus les
capacités de faire face à toutes les lectures et toutes...

Mise en place de la réplication

1. Réplication maître-esclave(s)

a. Configuration

Commençons par le cas le plus simple : celui où le maître et l’esclave sont fraîchement installés, c’est-à-dire sans aucune
donnée. Il vous faudra accomplir les étapes suivantes :

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
 Créer un utilisateur pour la réplication sur le maître :

L’esclave doit pouvoir se connecter sur le maître (IO_THREAD). Il faut donc créer un compte dédié sur le maître avec le
droit REPLICATION SLAVE. En réalité, bien souvent, il est pratique de créer aussi un compte symétrique sur l’esclave (utile
si l’esclave peut être promu en maître, dans ce cas la réplication devra s’exécuter dans le sens opposé) et d’ajouter le
droit REPLICATION CLIENT qui permet des commandes importantes pour le monitoring de la réplication :

mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT on *.* to 

'repli_user'@'IP_esclave' IDENTIFIED BY 'mon_mdp';

 Configurer le maître :

Il faut activer les journaux binaires sur le maître et déclarer un identifiant appelé server_id, qui devra être unique parmi tous les
serveurs associés par la réplication. Ces modifications se font dans le fichier my.cnf/my.ini et nécessitent un redémarrage du
serveur :

[mysqld] 

log_bin = /var/lib/mysql/mysql-bin ...

7.2. Exportation Et Importation de Données :

Les Système de Gestion de Bases de Données tels que MySQL

permettent de manipuler facilement et avec beaucoup de souplesse un très important volume de données.

Toutefois, aussi robuste soit MySQL, il peut être intéressant de récupérer l'ensemble

des données que contient notre base de données, pour faire une sauvegarde (backup) ou bien tout simplement

pour passer à une autre base de données. On appelle "exportation" le fait de formatter dans

un fichier (appelé dump) toutes les informations nécessaires à la création d'une base de données

identique.

A l'inverse, on appelle importation le fait de créer dans un SGBD une nouvelle base de données

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
à partir d'un fichier d'exportation (dump).

MySQL offre un certain nombre d'outils permettant d'exporter ses bases vers d'autres SGBD ou bien

de les importer.

Exporter une base de données MySQL

MySQL propose plusieurs façon d'exporter des données. La principale est la commande en ligne

mysql permettant de réaliser à peu près n'importe quelle action sur les

bases de données qu'elle contient à partir d'une simple ligne de commande :

mysql -h host -u user -ppass base_de_donnees > fichier_dump

La notation suivante est également possible :

mysql --host host --user user

--passwordpass base_de_donnees > fichier_dump

host représente le nom ou l'adresse IP de la machine sur laquelle la base de données que vous

désirez exporter est installée. Par défaut

il s'agit de localhost, c'est-à-dire la machine à partir de laquelle la commande mysql est lancée

user représente l'utilisateur avec lequel vous désirez vous connecter. Par défaut

il s'agit de l'utilisateur root

password représente le mot de passe de l'utilisateur avec lequel vous désirez vous connecter. Si vous n'indiquez pas de mot

de passe, celui-ci sera demandé de manière interactive.

Il ne doit pas y avoir d'espace entre -p et le mot de passe fourni, contrairement aux autres champs

base_de_donnees est le nom de la base de données à exporter.

fichier_dump est le nom du fichier dans lequel la base va être exportée.

Si aucun chemin absolu n'est précisé,

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
le fichier sera stocké dans le même répertoire que la commande mysql.

Attention de ne pas lui donner un nom d'un fichier existant dans ce répertoire !

Voici un exemple d'exportation de la base nommée utilisateurs située sur la machine db.commentcamarche.com

et appartenant à l'utilisateur admin (dont le mot de passe est KinderSurprise) :

mysql -h db.commentcamarche.net -u admin

-pKinderSurprise utilisateurs > utilisateurs.sql

Exporter une base de données MySQL avec mysqldump

La commande mysql permet d'exporter l'intégralité d'une base de données hébergée

par MySQL de façon efficace mais n'offre pas la souplesse nécessaire à l'exportation de plusieurs bases

de données ou au contraire d'une partie de la base de données (table ou partie d'une table). La commande mysqldump

répond à ce besoin en offrant la possibilité de spécifier plus précisément les données

à exporter. Voici la syntaxe de cette commande :

mysqldump [options] base_de_donnees [tables]

Voici les options généralement utilisées :

mysqldump -h host -u user

-ppass -rfichier base_de_donnees [tables]

host représente le nom ou l'adresse IP de la machine sur laquelle la base de données que vous

désirez exporter est installée. Par défaut

il s'agit de localhost, c'est-à-dire la machine à partir de laquelle la commande mysql est lancée

user représente l'utilisateur avec lequel vous désirez vous connecter. Par défaut

il s'agit de l'utilisateur root

password représente le mot de passe de l'utilisateur avec lequel vous désirez vous connecter. Si vous n'indiquez pas de mot

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
de passe, celui-ci sera demandé de manière interactive.

Il ne doit pas y avoir d'espace entre -p et le mot de passe fourni

base_de_donnees est le nom de la base de données à exporter.

fichier est le nom du fichier dans lequel la base va être exportée.

Si aucun chemin absolu n'est précisé, le fichier sera stocké dans le même répertoire que la commande mysql.

Voici un exemple d'exportation des tables membres et invites de la base nommée utilisateurs située sur la machine
db.commentcamarche.com

et appartenant à l'utilisateur admin (dont le mot de passe est KinderSurprise) :

mysqldump -h db.commentcamarche.net -u admin

-pKinderSurprise -outilisateurs.sql utilisateurs membres invites

Il est possible d'affiner encore plus précisément les données à exporter en donnant

une condition SQL grâce au commutateur -w (--where, ici "WHERE id > 4000") :

mysqldump -h db.commentcamarche.net -u admin

-pKinderSurprise -outilisateurs.sql -w "id>4000" utilisateurs membres invites

La commande SQL située après le commutateur -w doit être délimitée

par des guillemets (doubles ou simples).

Importer une base de données sous MySQL

La commande en ligne

mysql permet également d'importer des données. Il suffit pour cela d'utiliser la redirection <

et d'indiquer le fichier dump contenant les instructions SQL à importer :

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
mysql -h host -u user -ppass base_de_donnees < fichier_dump

La notation suivante est, une fois de plus, également possible :

mysql --host host --user user

-passwordpass base_de_donnees < fichier_dump

Importer une base de données avec phpMyAdmin

Pour importer une base avec phpMyAdmin, il suffit de faire un copier-coller du "dump" de MySQL

dans le champ prévu pour saisir les requêtes ou bien de cliquer sur le bouton "parcourir"

afin d'aller chercher le fichier contenant la copie de la base.

Importation et exportation

Les Système de Gestion de Bases de Données tels que MySQL permettent de manipuler facilement et avec beaucoup de
souplesse un très important volume de données. Toutefois, aussi robuste soit MySQL, il peut être intéressant de récupérer
l'ensemble des données que contient notre base de données, pour faire une sauvegarde (backup) ou bien tout simplement pour
passer à une autre base de données. On appelle "exportation" le fait de formatter dans un fichier (appelé dump) toutes les
informations nécessaires à la création d'une base de données identique.

A l'inverse, on appelle importation le fait de créer dans un SGBD une nouvelle base de données à partir d'un fichier
d'exportation (dump).

MySQL offre un certain nombre d'outils permettant d'exporter ses bases vers d'autres SGBD ou bien de les importer.

Exporter une base de données MySQL

MySQL propose plusieurs façon d'exporter des données. La principale est la commande en ligne mysql permettant de réaliser à
peu près n'importe quelle action sur les bases de données qu'elle contient à partir d'une simple ligne de commande :

mysql -h host -u user -ppass base_de_donnees > fichier_dump

La notation suivante est également possible :

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
mysql --host host --user user

--passwordpass base_de_donnees > fichier_dump

host représente le nom ou l'adresse IP de la machine sur laquelle la base de données que vous désirez exporter est installée. Par
défaut il s'agit de localhost, c'est-à-dire la machine à partir de laquelle la commande mysql est lancée

user représente l'utilisateur avec lequel vous désirez vous connecter. Par défaut il s'agit de l'utilisateur root

password représente le mot de passe de l'utilisateur avec lequel vous désirez vous connecter. Si vous n'indiquez pas de mot de
passe, celui-ci sera demandé de manière interactive. Il ne doit pas y avoir d'espace entre -p et le mot de passe fourni,
contrairement aux autres champs

base_de_donnees est le nom de la base de données à exporter.

fichier_dump est le nom du fichier dans lequel la base va être exportée. Si aucun chemin absolu n'est précisé, le fichier sera
stocké dans le même répertoire que la commande mysql. Attention de ne pas lui donner un nom d'un fichier existant dans ce
répertoire !

Voici un exemple d'exportation de la base nommée utilisateurs située sur la machine db.commentcamarche.com et appartenant
à l'utilisateur admin (dont le mot de passe est KinderSurprise) :

mysql -h db.commentcamarche.net -u admin

-pKinderSurprise utilisateurs > utilisateurs.sql

Exporter une base de données MySQL avec mysqldump

La commande mysql permet d'exporter l'intégralité d'une base de données hébergée par MySQL de façon efficace mais n'offre
pas la souplesse nécessaire à l'exportation de plusieurs bases de données ou au contraire d'une partie de la base de données
(table ou partie d'une table). La commande mysqldump répond à ce besoin en offrant la possibilité de spécifier plus
précisément les données à exporter. Voici la syntaxe de cette commande :

mysqldump [options] base_de_donnees [tables]

Voici les options généralement utilisées :

mysqldump -h host -u user

-ppass -rfichier base_de_donnees [tables]

host représente le nom ou l'adresse IP de la machine sur laquelle la base de données que vous désirez exporter est installée. Par
défaut il s'agit de localhost, c'est-à-dire la machine à partir de laquelle la commande mysql est lancée

user représente l'utilisateur avec lequel vous désirez vous connecter. Par défaut il s'agit de l'utilisateur root

password représente le mot de passe de l'utilisateur avec lequel vous désirez vous connecter. Si vous n'indiquez pas de mot de
passe, celui-ci sera demandé de manière interactive. Il ne doit pas y avoir d'espace entre -p et le mot de passe fourni

base_de_donnees est le nom de la base de données à exporter.

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
fichier est le nom du fichier dans lequel la base va être exportée. Si aucun chemin absolu n'est précisé, le fichier sera stocké
dans le même répertoire que la commande mysql.

Voici un exemple d'exportation des tables membres et invites de la base nommée utilisateurs située sur la machine
db.commentcamarche.com et appartenant à l'utilisateur admin (dont le mot de passe est KinderSurprise) :

mysqldump -h db.commentcamarche.net -u admin

-pKinderSurprise -outilisateurs.sql utilisateurs membres invites

Il est possible d'affiner encore plus précisément les données à exporter en donnant une condition SQL grâce au commutateur
-w (--where, ici "WHERE id > 4000") :

mysqldump -h db.commentcamarche.net -u admin

-pKinderSurprise -outilisateurs.sql -w "id>4000" utilisateurs membres invites

La commande SQL située après le commutateur -w doit être délimitée par des guillemets (doubles ou simples).

Importer une base de données sous MySQL

La commande en ligne mysql permet également d'importer des données. Il suffit pour cela d'utiliser la redirection < et
d'indiquer le fichier dump contenant les instructions SQL à importer :

mysql -h host -u user -ppass base_de_donnees < fichier_dump

La notation suivante est, une fois de plus, également possible :

mysql --host host --user user

-passwordpass base_de_donnees < fichier_dump

Importer une base de données avec phpMyAdmin

Pour importer une base avec phpMyAdmin, il suffit de faire un copier-coller du "dump" de MySQL dans le champ prévu pour
saisir les requêtes ou bien de cliquer sur le bouton "parcourir" afin d'aller chercher le fichier contenant la copie de la base.

Utilisez-le pour l'exportation:

mysqldump -u username -p databasename > filename.sql

c'est mon exemple d'exportation dans CMD et je vais enregistrer dans le lecteur D: \

mysqldump -u root -pmypassword pos > d:\pos.sql

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
Pour sauvegarder:

mysqldump -u user -p database > backup.sql

Importer:

mysql -u user -p database < backup.sql

Suivez les étapes suivantes.

Exécuter la commande cmd

Tapez c: ou d: on Invite de commandes. Cela sera basé sur vos installations de serveur WAMP.

En supposant que vous avez installé Wamp sur le lecteur C :.

C:\>cd wamp

C:\wamp>cd bin

C:\wamp\bin>cd mysql

C:\wamp\bin\mysql>cd mysql15.5.8

C:\wamp\bin\mysql\mysql15.5.8>cd bin

C:\wamp\bin\mysql\mysql15.5.8\bin>mysql.exe -u root

Maintenant, vous obtiendrez l'invite de commande mysql.

** Notez ici que ma version MySql ins 15.5.8 peut changer en fonction de votre installation Wamp. Vous pouvez maintenant
suivre la réponse de @Matei. Je colle sa réponse ici. J'espère que cela vous aidera.

exporter:

mysqldump -u username -p databasename > filename.sql

et importer:

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
mysql -u username -p databasename < filename.sql

Accédez au dossier C:\wamp\bin\mysql\MYSQL_VERSION\bin

Appuyez sur Maj + clic droit dans ce dossier et sélectionnez "Ouvrir la fenêtre de commande ici" dans le menu qui apparaît.

Cela ouvrira une fenêtre de commande dans le chemin dans lequel vous vous trouvez déjà,
donc C:\wamp\bin\mysql\MYSQL_VERSION\bin

Entrez l'une des commandes MySQL que vous aimez avec l'un des exécutables que vous trouverez dans ce dossier.

Pour exporter:

mysqldump -u db_user -pDB_PASSWORD db_name > /path/to/save/backup_file.sql

Pour importer:

mysql -u db_user -p db_name < /path/to/save/backup_file.sql

L'utilisateur a un mot de passe (DB_PASSWORD) et qui doit être directement derrière -p sans espace. Attention, le mot de
passe peut être vu par d'autres programmes.

Si vous ne spécifiez pas un mot de passe dans la commande directement après l'indicateur -p et utilisez simplement le
nom_base, il vous sera demandé de saisir le mot de passe de manière interactive tous les fois que vous exécutez la commande.

Cela signifie que chaque fois que vous souhaitez exporter ou importer votre base de données, vous devez saisir le mot de passe.
Ce n'est pas non plus très sûr et comme cela, vous ne pouvez pas exécuter un script pour exporter automatiquement votre base
de données à un intervalle de temps donné.

Il est donc préférable de suivre ces conseils:

Citant la documentation MySQL: ( http://dev.mysql.com/doc/refman/5.1/en/password-security-user.html ):

Enregistrez votre mot de passe dans un fichier d'options. Par exemple, sous Unix, vous pouvez répertorier votre mot de passe
dans la section [client] du fichier .my.cnf de votre répertoire personnel:

[client]

password=your_pass

Pour protéger le mot de passe, le fichier ne doit être accessible à personne d'autre qu'à vous-même. Pour vous en assurer,
définissez le mode d'accès aux fichiers sur 400 ou 600. Par exemple:

Shell> chmod 600 .my.cnf

Pour nommer à partir de la ligne de commande un fichier d'options spécifique contenant le mot de passe, utilisez le  --defaults-
file=file_name option, où file_name est le nom complet du chemin d'accès au fichier.

 3

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
1 août 2015lowtechsun

Exporter des données dans MySQL via msdos est

Parcourez le dossier bin de votre répertoire mysql et recherchez mysqldump ou placez-le dans des variables d'environnement
pour y accéder de n'importe où

1. Si l'utilisateur est root sans mot de passe

mysqldump -uroot -p mydb > backup.sql

2. Si nom d'utilisateur et mot de passe

mysqldump -u <username> -p <password> <databasename> > backup.sql

(indiquez le nom d'utilisateur, le mot de passe et le nom de base de données)

Méthode 2 – En utilisant la ligne de commande

Exportation

La commande mysqldump est utilisé pour exporter des bases de données vers des fichiers texte SQL, ce qui rend le transfert et
les déplacements relativement faciles. Vous aurez besoin du nom de la base de données ainsi que le nom d’utilisateur et le mot
de passe avec des privilèges permettant au moins un accès complet en lecture seule à la base de données.

Exportez votre base de données en utilisant la commande suivante :

mysqldump -u username -p db_name > file.sql

 username est le nom d’utilisateur avec lequel vous pouvez vous connecter à la base de données

 db_name est le nom de la base de données qui sera exportée

 file.sql est le fichier dans lequel la sortie sera enregistrée

Si des erreurs se produisent pendant le processus d’exportation, mysqldump les affichera clairement à l’écran.


 

Importation

Pour importer un fichier existant dans MySQL, vous devrez créer une nouvelle base de données. C’est là que le contenu du
fichier SQL sera importé.

Après que vous avez crée la base de données.

A partir de la ligne de commande, vous pouvez importer le fichier SQL avec la commande suivante :

mysql -u username -p new_db < file.sql

 username est le nom d’utilisateur avec lequel vous pouvez vous connecter à la base de données

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
 new_db est le nom de la base de données fraîchement créée

 file.sql est le fichier SQL à importer, situé dans le répertoire courant

Si la commande est exécutée avec succès, elle ne produira aucune sortie.

Si des erreurs se produisent pendant le processus, mysql les affichera sur le terminal. Vous pouvez vérifier que la base de
données a été importée en vous connectant à nouveau au shell MySQL et en inspectant les données. Cela peut être fait en
sélectionnant la nouvelle base de données avec USE new_db et en utilisant ensuite SHOW TABLES;.

Si vous souhaitez importer votre base de données dans un serveur MySQL, il existe plusieurs méthodes en ligne de commande.
Il est à noter que dans ces exemples, nous écrivons fichier.sql. Il faut mettre à la place le chemin complet vers le fichier
correspondant au contenu de la base que vous souhaitez importer. Il faut également penser à créer la base de données avant de
lancer l'import.

Si votre système d'exploitation est Windows, la commande suivante lancera l'import de la base de données :

mysql -u[utilisateur] -p [nom_base_de_donnees] < fichier.sql

Pour un système d'exploitation Linux :

mysql nom_base_de_donnees < fichier.sql

Si vous utilisez PowerShell, tapez la commande suivante :

cmd.exe /c mysql -u [utilisateur] -p [nom_base_de_donnees] < fichier.sql

Lorsque vous installez MySQL sur votre serveur ou ordinateur, un outil en ligne de commande est fourni afin d'exécuter des
commandes sur le serveur de base de données. Les commandes suivantes permettent donc d'importer un fichier en base de
données, quel que soit le système d'exploitation utilisé, avec l'interface en ligne de commande de MySQL :

use nom_base_de_donnees;

source fichier.sql;

Si vous ne savez pas comment exporter une base de données MySQL dans un fichier, il faut utiliser l'outil mysqldump en ligne
de commande, qui est conçu dans ce but. Il est installé en même temps que MySQL sur la machine :
mysqldump nom_base_de_donnees > fichier.sql

Mysqldump est une solution très simple pour exporter et importer des bases de données MYSQL en ligne de commande.

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
Il permet également de sauvegarder une base de donnée SQL et de la restaurer.

Dans le cas ou votre  base de donnée est volumineuse il peut être difficile d'exporter celle-ci via les outils
comme PHPMYADMIN ou encore MYSQLDUMPER

Il existe une solution simple en ligne de commande mais qui demande d'avoir un accès SSH sur votre serveur.

Exporter une base Sql avec Mysqldump

Une fois connecté nous pouvons exporter la base sql grâce à la commande à suivante, celle-ci doit être adaptée à votre
configuration !

La deuxième partie /var/www/vhost correspond à un endroit pour stocker la sauvegarde ! libre à vous de changer son
emplacement ;).

mysqldump -u loginbdd -p nomdelabdd > /var/www/vhosts/votresite.com/httpdocs/nom_de_bdd_sauvegarde.sql

Une fois la commande saisie , on vous demandera le mot de passe de la base de donnée après quoi le script lancera
l'exportation de la base SQL.

On peut éviter la demande de mot de passe avec la commande unix suivante :

mysqldump -u loginbdd -pmotdepassedelabdd nomdelabdd >


/var/www/vhosts/votresite.com/httpdocs/nom_de_bdd_sauvegarde.sql

Le mot de passe est bien collé au -p c'est normal

On peut donc considérer que l'export est une sauvegarde de la base de données SQL.

Télécharger le fichier .sql

Une fois terminé vous pouvez récupérer via FileZilla par exemple le fichier .sql sur une clé Usb , un disque dur ou tout autre
support externe.

Importer une base de donnée avec MysqlDump

Pour importer une base donnée Mysql nous procédons de même avec une commande différente

mysql -u loginbdd -p nomdelabdd < endroit_ou_se_trouve_fichier_.sql

Pour importer la base de donnée sans avoir à saisir le mot de passe voici la commande

mysql -u loginbdd -pmotdepassebdd nomdelabdd < endroit_ou_se_trouve_fichier_.sql

L'import d'une base de données correspond à une restauration de base de données SQL.

Pour Aller plus loin

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
Il est possible de programmer ses sauvegardes via des tâches CRON , l'avantage de l'export / import en ligne de commande
c'est que vous n'êtes pas limité en taille de base.

Vous avez la possibilité de transférer sur un ftp externe les fichiers .sql pour limiter les pertes. Dans ce tutoriel nous n'incluons
pas la récupération automatique du fichier .sql pensez à bien le récupérer sur un support externe !

Conclusion

Mysqldump est donc un outil indispensable si vous devez sauvegarder vos bases de données sql.

L'outil est gratuit et est très simple d'utilisation pour assurer le backup de vos bases.

Certains panels d'administration comme Plesk ou Cpanel intègres des outils graphique pour sauvegarde vos bases de
données Mysql ou encore PostgreSQL.

Exporter la base de données

Vous pouvez également suivre ces instructions :

1. Ouvrez phpMyAdmin.

2. À partir de la liste de gauche, cliquez sur le nom de la base de données à exporter. La page se rafraîchira pour afficher
les informations relatives à la base de données sélectionnée.

3. Cliquez sur l’onglet « Exporter ». La page se rafraîchira pour afficher les options d’exportation.

4. À partir du groupe « Exporter », sélectionnez l’option « MySQL » si ce n’est déjà fait.

5. Dans la section « Options SQL » (SQL Options), cochez les cases jouxtant les options « Structure » et « Données ».

6. Cochez la case « Transmettre » située au bas des options.

7. Cliquez sur le bouton « Exécuter ».

Votre navigateur vous invitera à enregistrer le fichier sur votre propre disque. Sélectionnez un emplacement dont vous vous
souviendrez facilement.

Une fois le téléchargement terminé, vous aurez une copie de votre base de données sur votre ordinateur.

Importer la base de données

La présente suppose que vous détenez une nouvelle base de données (vide) sur le serveur. Si vous importez vers votre compte
HostPapa, voici un article offrant des instructions sur comment créer une nouvelle base de données. Vous devez le faire afin
d’avoir en main une base de données que vous pourrez sélectionner comme destination pour les données importées :

Vous pouvez également suivre ces instructions :

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
1. Ouvrez phpMyAdmin.

2. Cliquez sur le nom de la base de données qui recevra les informations importées. La page se rafraîchira pour afficher
les informations relatives à la base de données sélectionnée.

3. Cliquez sur l’onglet « Importer ».

4. Cliquez sur le bouton « Afficher » de la section « Fichier à importer » (File to import).

5. Votre navigateur vous invitera à repérer sur votre ordinateur le fichier de la base de données.

6. Une fois le fichier repéré et sélectionné, le champ « Emplacement du fichier texte » (Location of the text file)
affichera le chemin du fichier de la base de données. Cliquez sur le bouton « Exécuter ».

Une fois le téléversement du fichier terminé, les données et la structure qu’il contient seront immédiatement disponibles pour
utilisation dans la base de données.

Comment vider toutes les bases de données de MySQL via la ligne de commande

Le moyen le plus simple de vider toutes les bases de données de MySQL dans un fichier .sql, pour la sauvegarde ou la
migration ou autrement, utilise le drapeau -all-databases comme ceci:

mysqldump --all-databases > all_databases_dump.sql

Étant donné que cette commande exporte toutes les bases de données, il n'est pas nécessaire de spécifier un nom de base de
données. Toutes les bases de données stockées dans mySQL seront sauvegardées dans le fichier d'exportation
"all_databases_dump.sql" dans le répertoire de travail actuel.

Si besoin est, vous pouvez également spécifier un nom d'utilisateur et un mot de passe lors du vidage de toutes les bases de
données, dans ce cas avec le nom d'utilisateur root:

mysqldump -u root -p --all-databases > all_databases.sql

Après que la base de données mysql a été sauvegardée, ma préférence personnelle est de créer un gzip tar à partir de celui-ci
comme décrit ici, mais c'est entièrement facultatif.

Comment exporter une base de données spécifique à partir de MySQL

Si vous souhaitez vider une base de données spécifique par nom plutôt que d'exporter toutes les bases de données, cela est tout
aussi simple:

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
mysqldump database_name > database_name_dump.sql

La commande mysqldump possède de nombreux paramètres et indicateurs qui peuvent être utiles pour exporter et sauvegarder
des bases de données, vous pouvez en apprendre plus sur la page de manuel avec "man mysqldump" ou en lisant ici sur le site
dev.mysql.

Comment importer toutes les bases de données dans MySQL

Bien sûr, si vous avez une sauvegarde de base de données, l'importer dans MySQL est important. Voici le moyen le plus
simple d'importer toutes les bases de données d'un fichier database.sql dans MySQL via la ligne de commande:

mysql database_name < database_dump.sql

Et comme pour exporter une base de données, lors de l'importation, vous pouvez également spécifier un nom d'utilisateur si
vous le souhaitez:

mysql -u root -p < database_dump.sql

Vous spécifiez également un autre nom d'utilisateur ou une autre base de données:

mysql -u user -p database_name < database_dump.sql

Importer une base de données spécifique dans MySQL

Vous pouvez également importer une base de données spécifique dans un gros fichier par nom:

mysql --one-database database_name < all_databases.sql

Comme précédemment, si vous avez des difficultés à importer des bases de données dans mysql, vous pouvez accéder à la
page de manuel avec 'man mysql' ou à la documentation officielle sur le site de développement mysql.

Connaissez-vous des astuces intéressantes pour exporter des bases de données et importer des bases de données dans MySQL?
Faites le nous savoir dans les commentaires!

** Remarque Ici, ma version de MySQL dans la version 15.5.8 peut changer en fonction de votre installation de wamp. Vous
pouvez maintenant suivre la réponse de @Matei. Je colle sa réponse ici. J'espère que ceci vous aidera.

exporter:

mysqldump -u username -p databasename > filename.sql

et d'importer:

mysql -u username -p databasename < filename.sql

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
7.3. Gestion des Vues :

Vues

1. Rôle

Les vues sont des tables virtuelles créées à partir d’une requête SELECT. Elles ne stockent pas les données qu’elles génèrent
mais seulement la requête permettant de les créer. La requête SELECT qui génère la vue référence une ou plusieurs tables. La
vue peut donc être par exemple une jointure entre différentes tables, l’agrégation ou l’extraction de certaines colonnes d’une
table. Elle peut également être créée à partir d’une autre vue.

Les vues sont souvent en lecture seule et ne permettent donc que de lire des données. Cependant, MySQL permet la création de
vues modifiables sous certaines conditions :

 La requête qui génère la vue doit permettre à MySQL de retrouver la trace de l’enregistrement à modifier dans la ou
les tables sous-jacentes ainsi que celle de toutes les valeurs de chaque colonne. La requête SELECT créant la vue ne
doit donc pas contenir de clause DISTINCT, GROUP BY, HAVING et autres fonctions d’agrégation.

 La clause ALGORITHM ne doit pas être de valeur TEMPTABLE. Nous reviendrons sur ce point par la suite.

 La requête ne doit pas accéder à des vues sous-jacentes non modifiables.

Les vues peuvent être utilisées pour différentes raisons, elles permettent de :

 Contrôler l’intégrité en restreignant l’accès...

7.3.1. Qu'est - Ce Qu'Une Vue :

7.3.2. Création de Vues :

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
7.3.3. Vues Modifiables :

8. Chapitre 8 : Sauvegarde Et Récupération :

Généralités

1. Introduction

Combien de fois vous est-il arrivé de perdre des données et de vous rendre compte que vous n’aviez aucun moyen de les
récupérer ? C’est l’aléa de tout administrateur qui n’a pas pris le temps de mettre en place une politique de sauvegarde
adéquate. En effet, certains estiment qu’ayant mis en place une réplication entre deux serveurs MySQL ils se sont mis à l’abri
de la perte ou de la corruption de données, mais il n’en est rien. Une mauvaise manipulation sur l’un des serveurs et ils auront
tout perdu. Alors ne faites pas comme eux...

De la même façon, on ne peut pas être sûr de récupérer ses données tant que l’on n’a pas testé la procédure de restauration.
Avoir sauvegardé ses données est une bonne chose, mais si la procédure de restauration n’a pas été correctement testée et
validée, cela ne vous servira pas à grand-chose. Ce chapitre a pour but de vous familiariser avec les concepts inhérents à la
sauvegarde et de vous enseigner les différents moyens disponibles vous permettant d’aboutir à la solution qui vous conviendra.

Pensez à sauvegarder vos fichiers de configuration. Le comportement de votre base de données risque de complètement
changer (performances, génération des fichiers binaires...) si vous n’utilisez...

En pratique

1. Import/export manuel

MySQL permet d’exporter le résultat d’une requête dans un fichier, qui sera stocké sur le serveur, lorsque l’utilisateur possède
le privilège FILE. Cette méthode est plus rapide pour importer/exporter le contenu d’une table qu’une sauvegarde SQL car il
n’est pas nécessaire d’interpréter ou de générer les ordres SQL.

Pour cela, vous disposez de la commande SELECT ... INTO OUTFILE qui respecte le format suivant :

SELECT col1,col2,... INTO OUTFILE 'nom_de_fichier' 

FIELDS TERMINATED BY chaine1 OPTIONNALY ENCLOSED BY chaine2 

LINES TERMINATED BY chaine3 FROM nom_de_table;

avec :

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
 col1,col2... : le nom des colonnes à écrire en sortie.

 nom_de_fichier : le nom du fichier qui contiendra les données exportées.

 chaine1 : le séparateur des données.

 chaine2 : le délimitateur des données.

 chaine3 : le séparateur des enregistrements dans le fichier en sortie.

 nom_de_table : le nom de la table dans laquelle sont récupérés les enregistrements. Ce nom peut être remplacé par
une sous-requête.

Ainsi, la requête suivante exporte toutes les données de la table actor :

mysql> SELECT * FROM actor INTO OUTFILE '/var/tmp/actor.txt';  

Query OK, 200 rows affected (0.02 sec)

Lorsque la commande est terminée, on retrouve le contenu de la table dans le fichier...

8.1. Planification de La Récupération :


8.2. Présentation des Outils de Sauvegarde :

8.2.1. Sauvegarde Brute :

8.2.2. Sauvegarde Logique :

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
8.2.3. Sauvegarde des Fichiers Journaux Et d'Etat :

8.2.4. Réplication Comme Aide à La Sauvegarde :

8.2.5. Comparaison Entre Les Méthodes de Sauvegarde, Récupération de Données :

Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31

Vous aimerez peut-être aussi