AdministrationBDDD - Cours
AdministrationBDDD - Cours
AdministrationBDDD - Cours
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.
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?
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.
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...
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.
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...
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.
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
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 :
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 -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:
TO 'cms_user'@'localhost'
IDENTITIED BY 'yourpassword'
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.
venir
● Texte
● Numérique
○ Entier, flotants
● Date
● Enumérations
Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
○ Homme-Femme, Pique-Carreau-Coeur-Trefle..
NUMBER
FLOAT
DECIMAL
REAL
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
– Les utilisateurs.
– Etc
Les métadonnées sont utiles dans bien des domaines. Que serait, en effet, une
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.
Remarque
graphique…
Cette commande a une syntaxe très simple et est utilisable avec n'importe
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
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 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
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.
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 :
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é.
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
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.
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 %.
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
Inconvénients :
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.
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 :
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 :
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.
deux partitions :
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.).
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).
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.
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.
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.
col type,
...
)
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 :
KEY (customer_id)
)
SUBPARTITION BY KEY(customer_id)
SUBPARTITIONS 10 (
Interrogation de la table INFORMATION_SCHEMA.PARTITIONS.
Commande EXPLAIN PARTITIONS SELECT pour voir quelles partitions sont balayées pour une
commande SELECT donnée.
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.
La table INFORMATION_SCHEMA.PARTITIONS
Chaque enregistrement dans cette table correspond à une partition individuelle ou une sous partition d’une table partitionnée.
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.
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.
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 ?
SHOW PLUGINS;
On doit avoir dans les résultats une ligne avec pour nom partition et status ACTIVE.
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
être numérique
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.
);
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.
store_id INT
PARTITION BY LIST(store_id) (
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.
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).
store_id INT
PARTITION BY KEY()
PARTITIONS 4;
);
Linear
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 :
N : partition selectionné
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.
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.
Réparation
En cas d’erreur sur les données ou les index on peut reparer par partion
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.
Ajout de partition
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.
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...
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:
fname VARCHAR(30),
lname VARCHAR(30),
);
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:
);
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).
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:
fname VARCHAR(30),
lname VARCHAR(30),
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.
Nord 3, 5, 6, 9, 17
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
);
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:
fname VARCHAR(30),
lname VARCHAR(30),
job_code INT,
store_id INT
PARTITION BY HASH(store_id)
PARTITIONS 4;
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 procs_priv contient les droits pour les routines stockées, c’est-à-dire les procédures et les fonctions stockées.
CREATE USER : permet de créer un compte utilisateur et de lui donner un mot de passe.
GRANT : permet...
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 :
+----------------------+--------+----------------+---------+-------+
+----------------------+--------+----------------+---------+-------+
Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
| sha256_password | ACTIVE | AUTHENTICATION...
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 ;
- Le verrouillage (interdiction d'écriture) sur la base de données pour les utilisateurs non autorisées ;
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.
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 :
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 :
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.
6.2.3. Privilèges :
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 :
Cette requête a donné tous les droits sur la base de données elevage à l'utilisateur 'student'@'localhost'.
Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
columns_priv : privilèges au niveau des colonnes.
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 :
ON [type_objet] niveau_privilege
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
GRANT SELECT,
DELETE,
INSERT
ON elevage.Animal
TO 'john'@'localhost';
GRANT SELECT
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.
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.
ON niveau_privilege
FROM utilisateur;
Exemple
REVOKE DELETE
ON elevage.Animal
FROM 'john'@'localhost';
Privilèges particuliers
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.
GRANT ALL
ON elevage.Client
TO 'john'@'localhost';
USAGE
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.
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 ;
ON elevage.*
-- OU
ON elevage.*
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.
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
END |
DELIMITER ;
Utilisateur john :
USE elevage;
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.
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 |
BEGIN
END |
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
AS requete_select
-- Procédures
CREATE
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.
VIEW test_contexte1
VIEW test_contexte2
Utilisons maintenant ces vues avec l'utilisateur john, qui n'a toujours aucun droit sur Race.
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.
le nombre de requêtes par heure (MAX_QUERIES_PER_HOUR) : limitation de toutes les commandes exécutées par
l'utilisateur ;
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).
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.
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é
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 :
-- Création
-- Suppression
Utilisateur
son login ;
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
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.
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.
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.
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
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.
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.
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.
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 ».
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.
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.
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.
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
CREATE
action_qui_déclenche
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...
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.
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.
mysql
2. Le script renvoie ce résultat, qui vérifie que vous accédez à un serveur MySQL.
mysql>
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 :
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.
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.
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
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:
Par exemple, pour révoquer tous les privilèges de notre utilisateur non-root, nous devrions utiliser:
Enfin, vous pouvez supprimer entièrement un utilisateur existant en utilisant la commande suivante:
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.
Afin de trouver quels privilèges ont déjà été accordés à un utilisateur MySQL, vous pouvez utiliser la commande SHOW
GRANTS :
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 :
Donner des privilèges spécifiques à un utilisateur, les révoquer et supprimer entièrement un utilisateur MySQL
Bonne chance, et n’hésitez pas à laisser un commentaire ci-dessous si vous avez des questions.
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.
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.
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.
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.
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.
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 ».
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.
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 :
[REQUIRE
NONE |
[{SSL| X509}]
Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
[CIPHER cipher [AND]]
[SUBJECT subject]]
MAX_UPDATES_PER_HOUR # |
MAX_CONNECTIONS_PER_HOUR #]]
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.
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 .
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 .
LOCK TABLES Autorise l'utilisation de LOCK TABLES sur les tables pour lesquelles l'utilisateur a les droits de SELECT .
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).
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 .
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/.
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' :
6. +---------------+-------+
7. | Variable_name | Value |
8. +---------------+-------+
9. | have_openssl | YES |
10. +---------------+-------+
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.
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
Un compte d'utilisateur dans MySQL se compose d'un nom d'utilisateur et de parties de nom d'hôte.
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:
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:
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.
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:
Accordez tous les privilèges à un compte d'utilisateur sur une base de données spécifique:
Accordez tous les privilèges à un compte d'utilisateur sur toutes les bases de données:
Accordez tous les privilèges à un compte d'utilisateur sur une table spécifique à partir d'une base de données:
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:
Pour trouver les privilèges accordés à un compte d'utilisateur MySQL spécifique, utilisez l'instruction SHOW GRANTS :
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:
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.
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...
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...
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 :
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 ...
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.
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
host représente le nom ou l'adresse IP de la machine sur laquelle la base de données que vous
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
password représente le mot de passe de l'utilisateur avec lequel vous désirez vous connecter. Si vous n'indiquez pas de mot
Il ne doit pas y avoir d'espace entre -p et le mot de passe fourni, contrairement aux autres champs
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
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
host représente le nom ou l'adresse IP de la machine sur laquelle la base de données que vous
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
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.
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
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") :
La commande en ligne
mysql permet également d'importer des données. Il suffit pour cela d'utiliser la redirection <
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
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"
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.
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 :
Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
mysql --host host --user user
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
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) :
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 :
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
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) :
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") :
La commande SQL située après le commutateur -w doit être délimitée par des guillemets (doubles ou simples).
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 :
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.
c'est mon exemple d'exportation dans CMD et je vais enregistrer dans le lecteur D: \
Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
Pour sauvegarder:
Importer:
Tapez c: ou d: on Invite de commandes. Cela sera basé sur vos installations de serveur WAMP.
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
** 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:
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:
Pour importer:
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é.
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:
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
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ù
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.
username est le nom d’utilisateur avec lequel vous pouvez vous connecter à la base de données
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é.
A partir de la ligne de commande, vous pouvez importer le fichier SQL avec la commande suivante :
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
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 :
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.
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 ;).
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 donc considérer que l'export est une sauvegarde de la base de données 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.
Pour importer une base donnée Mysql nous procédons de même avec une commande différente
Pour importer la base de donnée sans avoir à saisir le mot de passe voici la commande
L'import d'une base de données correspond à une restauration de base de données SQL.
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.
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.
5. Dans la section « Options SQL » (SQL Options), cochez les cases jouxtant les options « Structure » et « Données ».
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.
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 :
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.
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:
É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:
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.
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.
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:
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:
Vous spécifiez également un autre nom d'utilisateur ou une autre base de données:
Vous pouvez également importer une base de données spécifique dans un gros fichier par nom:
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:
et d'importer:
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.
Les vues peuvent être utilisées pour différentes raisons, elles permettent de :
Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31
7.3.3. Vues Modifiables :
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 :
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_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.
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 :
Cycle BTS – Cours Administration des Bases de Données – Génie Logiciel II – Semestre 1 31