My SQL
My SQL
1) Présentation de la formation
a) Présentation
Connaissances préalables
Connaissances du système d’exploitation Linux/UNIX
Expérience professionnelle du langage SQL
Expérience professionnelle des bases de données relationnelles
Expérience en matière de conception de bases de données.
Objectifs
Comprendre et décrire l’architecture de MySQL
Installer et mettre à jours MySQL
Administrer et configurer MySQL
Utiliser les outils MySQL tel que MySQL WorkBench
Comprendre et mettre en œuvre les différents moteurs de stockage (InnoDB, MyISAM,
MEMORY, CSV …)
Comprendre et gérer la sécurité sous MySQL
Comprendre et mettre en œuvre la réplication sous MySQL
Comprendre et décrire les techniques d’optimisation de MySQL
Réaliser les opérations de sauvegarde et restauration
b) L’environnement
Prés – requis
Espace disque de 20
OS Linux Centos 6.x ou Windows (Server, XP, …)
2) Présentation de MySQL
Historique de MySQL
Crée par la société TCX
Le 23 mai 1995 : Apparition de la 1ère version de MySQL
Maintenue par la société suédoise MySQL AB
Floue sur l’origine du nom MySQL
Le 16 janvier 2008 : MySQL AB a été racheté par Sun Microsystems pour 1 milliard de dollars
2009 : acquisition de Sun Microsystems par Oracle Corporation après autorisation de la
commission européenne.
2009 : création de MariaDB en tant que projet Open Source.
MySQL
Système de gestion de base de données Open Source
Rapide, robuste et facile d’utilisation
Architecture client/serveur
Fourni avec de nombreux outils
Comptabilité avec de nombreux langages de programmation
Forte interopérabilité avec le langage PHP
Multiplateformes (Unix, Linux et Windows
Interrogeable via SQL
3) Installation de MySQL
a) Pré-installation
-Stable
-Utilisable en production
RC (Release Candidate)
-Relativement stable
-Non préconisée pour la production
Alpha ou bêta
-Licence commerciale
Fourni avec : du support Oracle
Des outils d’aide à l’administration (Query Analyzer, MySQL Entreprise Backup, etc.,)
NB : les deux versions sont identiques en terme de fonctionnement
32 bits
Mode d’installation
A partir des sources
Caractéristiques
-La plus simple
-Nécessite deux packages au minimum
Mysql-server-<version>. Rpm
Mysql-client-<version>. Rpm
Exemple de commande sous centos : shell> yum install mysql-server mysql-client
Dans notre cas, on va d’abord télécharger le package rpm qui contient les repository.
Les repository ce sont les entrées pour l’utilisateur yum pour savoir l’endroit où il veut aller chercher les
packages rpm. On va utiliser la commande wget.
Installation de mysql et vérification de l’ajout des repository
Caractéristiques
Permet d’obtenir la dernière version officielle du serveur MySQL
Ne dépend pas de la distribution
Pour cette installation, on va lancer aussi la commande de téléchargement directement à partir du site
de Microsoft via :
On fait un pwd puis un ls pour lister le contenu du répertoire. Ensuite, on va déplacer le contenu du
répertoire dtarer vers /usr/local/mysql/.
d) Installation sous Windows
Deux solutions
Utiliser l’installeur
-Simple et rapide
Prérequis : installation de .Net Framework 4.0
Utiliser les binaires
Bonnes pratiques
En terme de version
Connexion à MySQL
Exécution du script
4) Architecture de MySQL
a) Instance MySQL
[mysqld]
Bind-address=[Link] l’instance acceptera les connexions à partir de toutes les interfaces.
Port=3307
Basedir=/usr
Datadir=/u101/mysql/data/instance01
Socket=/u101/mysql/sockets/instance01/[Link]
Log-error=/u101/mysql/log/instance01/[Link]
Cas Pratique
1) Création de l’arborescence
5) Démarrage de l’instance
Démarrage de MySQL
Sous UNIX/LINUX
Les différentes commandes qu’on peut utiliser avec le script mysqld de démarrage :
Il faut savoir que ce script est créé automatiquement lors de l’installation via la méthode package.
Arrêt de MySQL
Sous UNIX/LINUX
c) Le cache MySQL
Le log binaire
Fonction
Stocke sous format binaire toutes les requêtes qui modifient les données
Paramétrage et commandes
Paramètre binlog-do-db (choix des bases de données à journaliser)
Paramètre binlog-ignore-db (choix des bases de données à ne pas journaliser)
Commande SHOW MASTER STATUS (vérifie si le log binaire est activé)
Commande SHOW BINARY LOGS (affiche tous les logs binaires du serveur)
Commande RESET MASTER (permet de réinitialiser les fichiers du journal binaire)
Commande SHOW BINLOG EVENTS IN <’fichier_binaire’> (contenu du fichier de log)
Le programme mysqlbinlog permet de visualiser le contenu des journaux binaires
- Possibilité de n’afficher qu’une partie
- Possibilité de fournir à mysql la sortie de mysqlbinlogg
Purge
Pas automatique
Plusieurs solutions
- Paramètre expire_logs_days= <jour> (en nombre de jour)
- Suppression manuelle
PURGE BINARY LOGS BEFORE (par rapport à un intervalle de temps)
PURGE BINARY LOGS TO (avec un numéro de journal)
RESET MASTER (supprime tout et repart de 1)
Cas Pratique
Le show master status est vide : ça veut dire que le log binary est désactivé.
1) Avant l’activation du log binaire, on va créer une arborescence qui va contenir l’ensemble de
nos logs
Après, on va se connecter à mysql via mysql -uroot et ensuite taper la commande show master status.
Le show master status remonte le nom du fichier courant et la position du dernier caractère.
Pour le changement de la position, on va se connecter à la base de données fact, créer une table et
ensuite faire des insertions dans cette table.
Du coup, la position est passée de 120 à 643.
La commande flush logs permet la position d’avant les insertions du fichier actuel courant.
Pour afficher les informations d’un fichier, on utilise la commande show binlog events in.
Pour afficher l’ensemble des fichiers journaux qui ont été générés sous mysql, on tape la commande
show binary logs.
On peut utiliser la commande RESET MASTER pour réinitialiser les fichiers du journal binaire.
● Le log binaire
Fonctionnement
- Journal incrémental (commence à .000001)
- Un nouveau fichier est généré
A chaque redémarrage du serveur
Si la valeur du paramètre max_binlog_size est atteinte
Exécution de la commande FLUSH LOGS
● Le log d’erreurs
Fonction
- Log les problèmes rencontrés lors du démarrage, de l’exécution ou de l’arrêt de mysqld
Créer automatiquement par le serveur
Nommé [Link] sous Linux et [Link] sous Windows.
- Paramètre log-error = </chemin/nom_fichier.err>
Pour la personnalisation de notre propre fichier log d’erreurs, on va passer sur le serveur pour créer un
directory qui va contenir notre log d’erreur.
Sachant qu’on va démarrer avec mysqld_safe, pour modifier le log d’erreur on va passer en tant que
root pour éditer le fichier [Link] et ensuite l’emplacement et le nom du fichier d’erreur mysql.
● Le log des requêtes lentes
Fonction
- Log toutes les requêtes qui ont pris plus de long_query_time (en secondes) à s’exécuter
Non activé par défaut
- Activation : ajouter le paramètre slow_query_log [=nondufichier] dans [Link]
Possibilité de tracer les requêtes qui n’utilisent pas d’index
- Paramètre log_queries_not_using_indexes
Possibilité de spécifier l’emplacement des fichiers de logs
- Paramètre slow_query_log_file, log_output= (TABLE, FILE, [FILE, TABLE], NONE)
➔ TABLE=mysql.slow_log
On va modifier le fichier /etc/[Link] en ajoutant les paramètres du log des requêtes lentes.
Toutes les requêtes qui dépasseront une seconde seront tracées dans le fichier [Link]
● Le log général
Fonction
- Enregistre les événements reçus par mysqld (requêtes, connexion/déconnexion)
Activable à chaud (pramètre general_log)
- SET GLOBAL general_log= ‘ON’;
Possibilité de spécifier l’emplacement des fichiers de logs
- Paramètres : general_log_file, log_output= (TABLE, FILE, [FILE, TABLE], NONE)
TABLE=mysql.general_log
Pour la réalisation de notre cas pratique dans cette partie, on va ajouter dans le fichier /etc/[Link] le
paramètre:
On va aller dans la base fact via use fact. Après, sélectionner deux tables à savoir la table categories et
la table employes. L’objectif c’est de voir après si nos requêtes ont été tracés dans la base mysql ainsi
que la connexion et la déconnexion.
Le select * from general_log permet de retrouver l’ensemble des opérations et des commandes qu’on a
utilisées.
On va voir aussi dans le fichier au niveau du système d’exploitation si les traces ont été générés.
e) Les Bases de données sous MySQL
Racine datadir
Mysql
Performance_schema
Test Bases de données
[Link]
Ib_logfile0
Ib_logfile1 Journaux
Ibdata1 Binaires pour le
Fichier data pour moteur innodb
les tables innodb
Les fichiers log files sont créés automatiquement à chaque fois qu’on crée une instance.
Généralités
Une base MySQL est constituée d’un répertoire identique au nom de la base
Le répertoire contient des fichiers
- Extension : .frm (structure de la table)
L’emplacement des bases est spécifié via le paramètre datadir
Une base = schéma
Il existe trois bases de données par défaut lors de l’installation
Caractéristiques
Le nom de la base de données est sensible à la casse
- Lower_case_table_names=1 (pour forcer la création en minuscule)
Pour travailler, une session doit posséder une base de données courante.
Une référence à une table sans préfixe désigne cette table dans la base de données courante
Pour connaître la base de données courante
On peut faire un select sur la table catégories qui se trouve dans la base de données fact en préfixant
simplement le nom de l’objet par le nom du schéma.
Syntaxe générale
Mysql> CREATEDATABASE <nom_base> ;
Syntaxe générale
Mysql> DROP DATABASE <nom_base> ;
5) Architecture de MySQL
a) Les méthodes de configuration
Présentation
Windows
[Link]
Note : le fichier [Link] est utilisé par tous les programmes fournis par MySQL (mysqld, mysql,
Organiser en section
- Nom_paramètre= valeur
Pour les options binaires, il suffit de spécifier le nom du paramètre
- enable-innodb
Cas pratique :
On va rajouter ensuite le paramètre mysq_home dans le but de spécifier le chemin qui stocke le fichier
[Link]. De ce fait, on va positionner dans le home de l'utilisateur courant via pwd ~
Pour la configuration de la section mysql, on va enlever le paramètre du prompt dans le fichier [Link]
pour ensuite copier le fichier dans section_mysql.cnf.
L’affichage des différents paramètres qu’on peut utiliser avec mysqld via la commande mysql - - help
Pour que nos configurations deviennent persistantes par exemple il faudra qu’on rajoute le paramètre
sort_buffer_size directement dans le fichier [Link]
Ensuite, on redémarre puis on tape la commande show global variables like pour rendre définitif la
valeur de sort_buffer_size.
b) Affichage de la configuration
On peut afficher la taille du paramètre sort_buffer_size de la session en cours et non de l’instance par :
Configuration de l’instance
Paramètres Description
Port Numéro de port d’écoute pour les connexions TCP/IP
Socket Socket UNIX pour les connexions locales
Basedir Emplacement du moteur MySQL
Datadir Emplacement de stockages des données
Tmpdir Emplacement pour stocker les objets temporaires
Default_storage_engime Moteur de stockage du serveur
Defaults-file Fichier d’initialisation de l’instance
Max_connections Nombre de connexions maximum à l’instance
Paramètres Description
Innodb_buffer_pool_size Taille du cache pour les données et indexes innodb
Innodb_file_per_table Permet de créer un fichier .ibd par table
Innodb_log_buffer_size Taille du cache des journaux d’innodb
Innodb_log_files_in_group Nombre de fichier journaux d’innodb
Max_heap_table_size Taille maximale des tables de type MEMORY
Tmp_table_size Taille maximale en mémoire des tables temporaires
Le contenu du [Link]
Ci-dessous le contenu du script pour voir si réellement nos données ont été exporter.
c) L’outil mysqladmin
Caractéristiques
Utilise les mêmes options de connexion que le client MySQL
Commandes Description
Create Permet de créer une base de données
Drop Permet de supprimer une base de données
Pling Permet de tester l’accès à une instance MySQL
Processlist Permet d’afficher les sessions en cours
Refresh Vide de la mémoire toutes les tables, puis ferme et réouvre les fichiers de logs
Status Affiche des statistiques d’utilisation de l’instance
Shutdown Permet d’arrêter une instance
Variables Affiche la liste des variables de l’instance
Version Affiche la version de MySQL
Pré-requis :
- Un serveur web : Apache, S
- Un interpréteur PHP
Plus maintenus
- MySQL Administrator
- MySQL Query Browser
- MySQL Migration Toolkit
MySQL Workbench (anciennement MySQL Administrator)
- Téléchargement: [Link]
- Documentation : [Link]
- Démos : [Link]
- MySQL Workbench Community : gratuit
- MySQL Workbench Standard : environ 80€/an (version pro, incluant notamment des
fonctionnalités de synchronisation, de validation et de documentation).
- Différence entre les 2 versions : http : //[Link]/products/workbench/[Link]
- Multiplateforme : Windows, Linux et Mac OS
Dans le cadre de l’exercice, on va créer un utilisateur qui a un accès à partir d’une machine distante.
Octroie privilèges à admfact : tous les droits sur la base de données de fact.
Privilèges à root : tous les privilèges à root qui peut accéder à n’importe quelle machine sur l’ensemble
des objets de toutes les bases de données.
Reverse Engineer : permet de se connecter à une base de données existante et de rapatrier le modèle
de données.
Enum : permet de spécifier une liste de valeur acceptée dans un champ spécifié.
Optimisation du type
Pour savoir si le type de données du champ code_categories est optimale, on va procéder comme suit :
8) Obtention des métadonnées
La base INFORMATION_SCHEMA
Constitue le « dictionnaire de données » MySQL
Disponible depuis la version 5.0.2 de MySQL
Les objets sont des vues (non modifiable)
Base de données (schéma) virtuelle : pas de fichiers physiques
Fournis un accès aux métadonnées sur :
* Les bases
* Les tables, les colonnes, les contraintes, les vues, etc., des
bases de données stockées sur le serveur MySQL
* Les types de données des colonnes
Vue tables :
Pour l’affichage des jeux de caractères disponibles :
Création de vue :
On peut récupérer toutes les vues de la base de données fact via :
9) Moteurs de stockage
a) Présentation des moteurs de stockage
Caractéristiques
Un moteur de stockage, c’est quoi ?
Commandes Description
SHOW ENGINES Affiche la liste des moteurs disponibles
SELECT * FROM INFORMATION_SCHEMA.ENGINES; Idem que SHOW ENGINES
SHOW CREATE TABLE<nom_table>; Affiche des informations sur la structure d’une table
SHOW TABLE STATUS LIKE ‘CATEGORIES’\G Fournit des informations sur la structure dune table
SELECT TABLE_SCHEMA, TABLE_NAME, Fournit des informations sur les tables d’une
base de données en utilisation la base INFORMATION_SCHEMA
TABLE_NAME, TABLE_TYPE, ENGINES FROMT TABLES
WHERE TABLE_SCHEMA=’<nom base>’;
Pour la récupération des métas data, on peut utiliser aussi la base information_schéma pour
afficher les métas data via :
Affichage des tables déjà existante :
Dans la base fact, on peut afficher la structure de la table catégories via :
Pour afficher toutes les informations concernant la table catégories, on utilise la commande show table
status.
Pour les anciennes versions de MySQL, l’ensemble des données d’une table et des indexes sont stocké
dans les fichiers ibdata via le paramètre : innodb_data_file_path
Il faut savoir qu’il est possible de créer plusieurs fichiers data et seul le dernier sera en autoextend.
MySQL utilise les fichiers ib_logfile0 et ib_logfile1 pour réaliser une restauration automatique après un
crash.
On peut modifier la taille de chaque fichier journal et la taille maximale d’un fichier journal est de 500M.
Ensuite, pour voir si MySQL crée un verrou au niveau de la ligne, on va ouvrir deux sessions.
Sur la première, on travaille sur l’utilisateur Drissi et sur la seconde session, on va travailler sur
Harabazan.
Session1 :
Session2 :
Si on essaie de travailler sur le même enregistrement dans la session2, on reste bloquer car MySQL crée
un verrou au niveau de la ligne avec le moteur Innodb.
Pour enlever le verrou, il faut faire un rollback dans la première session de notre enregistrement.
c) Le moteur MyISAM
Caractéristiques générales du moteur MyISAM
Ses particularités sont :
- Rapidité en lecture
-Recherche full texte
-Verrouillage au niveau des tables
-Pas de sauvegarde à chaud
MyISAM utilise trois fichiers
-Un fichier pour la structure de la table (.frm) par table :
<nom_table>.frm
-Un fichier de données (.MYD) : <nom_table>.MYD
-Un fichier d’index (.MYI) par table : <nom_table>.MYI
Non transactionnel
Ne supporte pas les clés étrangères
Dans ce cas, nous allons créer deux tables dans la base de données db_myisam en fin de
pouvoir pratiquer.
Lorsqu’on crée une table avec le moteur MyISAM, trois fichiers sont créés automatiquement
par MySQL. Un fichier pour la structure portant l’extension .frm, un pour les indexes dont
l’extension est .MYI et le dernier pour les data et ayant comme extension .MYD
Au niveau transactionnel : MySQL ne supporte pas les clés étrangères avec le moteur MyISAM.
Ajout d’une contrainte d’intégrité :
-Moins rapide et plus sensible aux crashs étant donné les entêtes nécessaires
Compressé
Fixed : veut dire que je suis sur une table statique. Tous les enregistrements ont la même taille.
Compression via :
d) Le moteur MEMORY
Caractéristiques :
Existe depuis la version 3.23.25
Moteur non-transactionnel et non support des clés étrangères
Utilise des indexes hachés au lieu du standard B-Tree
Les indexes et les données des tables sont stockées en mémoire uniquement (sauf la
structure .frm)
Avantage : table extrêmement rapide
Inconvénient : un plantage du serveur mène à une perte des données
Domaine d’application :
Données volatiles
Tables temporaires
Fort besoin en accès rapide aux données ;
Stockage physique :
Seul le fichier qui contient la structure sera stocké physiquement.
Création d’index :
En faisant des insertions dans la table tb_memory, nous obtenons :
Sauvegarde de ces données sur une table physique : pour ça on va créer une table via :
NB : nous perdons toutes les données après avoir fait un arrêt puis un redémarrage.
On ne peut pas faire de delete sur une table qui a été créé avec le moteur archive.
Stockage physique :
Le moteur CSV
Stock les données au format CSV (Comma Separated Values)
La table est représentée par
- Un fichier <nom_table>.CSV pour les données, un fichier <nom_table>.frm pour la structure et
un fichier <nom_table>.CSM pour l’état et le nombre de ligne
Non transactionnel
Pas de sauvegarde à chaud
Refus d’index
Verrou au niveau table
Le moteur MERGE
Offre la possibilité de grouper des tables de structures identique pour en faciliter la
manipulation
Une table MERGE est identifiable
Par un fichier d’extension .frm qui est la structure de la table de définition et un fichier
d’extension .MRG qui contient la liste des fichiers index (.MYI)
Toutes les tables utilisées par la table MERGE doivent se trouver dans la même base de données
que la table MERGE.
NB : le moteur merge ne peut être créer que sur des tables de types MYISAM.
Stockage physique :
Le moteur FEDERATED
Permet de déporter les données sur un serveur distant
Seule une copie de la définition de la table est stockée sur le serveur local
Accède à des tables dans une base de données distante, plutôt que dans des fichiers locaux
Avantages
Permet de répartir la charge
Pointer sur plusieurs bases de données distantes si elles acceptent les accès distants
Supporte les indexes
Autres moteurs
NDB Cluster : plus disponible dans la version classique. Il est à télécharger.
XtraDB
Atomicité
Cohérence
Isolation
Durabilité
BEGIN ;
START TRANSACTION ;
ROLLBACK
UPDATE
COMMIT
Fin de la transaction
précédente
Fichiers
Data
Les données sont persistantes après le commit donc on peut plus faire de rollback. Une transaction qui
commence par un begin ou start se termine obligatoirement par un rollback ou un commit.
Le Rollback annule toutes les modifications qui ont été saisi après le begin.
Notion de SAVEPOINT
Les savepoints permettent de positionner des points d’arrêts entre différentes instructions dans
une même transaction. Ils nous donnent la possibilité d’annuler les modifications qui arrivent
après un savepoint défini.
Annulation pour les données 3 et 4 :
Identique à REPEATABLE-READ et toutes les factures sont converties en SELECT … LOCK IN SHARE MODE
Pour connaître le niveau d’isolation du serveur MySQL
- show global variables like ‘%isolation%’;
- select @@global.tx_isolation ;
Au niveau session :
Au niveau de l’instance :
En mode REPEATABLE READ, MySQL nous garantit d’avoir le même résultat tant qu’on ne sort pas de la
transaction begin.
En créant une table1 dans la première session
NB : tant qu’on ne fait pas de commit, les autres utilisateurs ne verront pas les données en cours de
modification dans les autres sessions.
Refaire la même chose dans la seconde session :
Dès qu’une transaction est validée par un commit, elle sera visiblement directement par les autres
utilisateurs.
Possibilité de modifier le niveau d’isolation :
Au niveau instance
-Dans le fichier [Link]
c) Les verrous
Méthodes de verrouillage
Tant qu’on fait de commit ou de rollback, MySQL va laisser le verrou sur la ligene7.
Mise à jour d’une autre ligne sur la seconde session :
Modification de la ligne7 qui est en cours de modification sur la session1 dans la session2 :
On reste bloquer sur cette ligne dans la seconde session car le verrou n’a pas encore été enlevé.
Pour enlever le verrou, on fait un commit ou un rollback.
Verrou explicite
La commande à utiliser est LOCK TABLES
- READ pose un verrou partagé ;
- WRITE pose un verrou exclusif ;
- READ_LOCAL pose un verrou partagé permettant les insertions concurrentes pour les
tables MyISAM
Cet insert ne fonctionnera pas car le verrou est posé sur la table catégories.
Pour enlever le verrou, on va taper la commande ci-dessous :
Ensuite, on pourra insérer facilement notre ligne dans la table catégorie et sur la session2.
Dans ce cas, les verrous en lecture sont prioritaires aux verrous en écriture.
11) Le partitionnement
a) Présentation du partitionnement
Introduction :
Permet de diviser une table physique en plusieurs partitions en fonction des données
qu’elle contient.
Pourquoi partitionner ?
Pour gérer la montée ben charge
Pour gérer de gros volumes de données
Pour limiter les accès aux niveaux des IO
Pour paralléliser les opérations de lecture et d’écriture au niveau disque
Effacer rapidement les données (scaling back)
Les prérequis pour utiliser le partitionnement
Mysql> SHOWPLUGINS
Les contraintes liées au partitionnement
Toutes les partitions d’une même table doivent utiliser le même moteur de stockage
Limiter à 8192 partitions sous-partitions comprises.
Création d’une table qui contiendra un certain nombre de partition par continent :
Chargement de la table:
f)Le sous-partitionnement
Caractéristiques
Consiste à partitionner une partition de type RANGE ou LIST
Les sous-partitions doivent êtres de type HASH ou KEY
Syntaxe
CREATE TABLE <nom_table> (
Champ1 <type> <contrainte>,
…. )
PARTITION BY RANGE | LIST (<expression>)
SUBPARTITION BY HASH | KEY (<expression)
SUBPARTITION <nom_partition> (
<definition_des_partitions>
)
Structure de la table:
Chargement de la table:
Verification physique:
12) Gestion des comptes utilisateurs
a) Gestion des utilisateurs
Presentation
Basé sur un système de privilèges simple et performant
Chaque utilisateur qui souhaite se connecter doit s’authentifier auprès du serveur MySQL
Aucun lien entre les utilisateurs MySQL et les utilisateurs Linux ou Windows
L’identificatin est une combinaison de trois critères
-l’hôte (la machine) depuis lequel la connexion et initiée
- un nom d’utilisateur
- un mot de passe.
Caractéristiques
Deux utilisateurs sont créés après l’installation
- root : super utilisateur (sans mot de passe)
- L’utilisateur anonyme, c’est-à-dire tout utilisateur non connu du système.
Système d’authentification
Les utilisateurs et les privilèges sont stockés la base de données MySQL
Les tables suivantes sont utilisées pour gérer les privilèges des utilisateurs
Etape1 :
- MySQL utilise la table user pour vérifier qu’un utilisateur est autorisé à se connecter
- Les champs (Host, User et Password) sont utilisées pour valider la connexion.
Etape2 :
-MySQL vérifie chaque requête envoyée afin de s’assurer que l’utilisateur a les privilèges
nécessaires à son exécution.
- Ces privilèges sont vérifiés à partir des tables user, db, table_priv et columns_priv
Syntaxe :
CREATE USER ‘utilisateur’@’hôte’ IDENTIFIED BY ‘mot_de_passe’;
Modification du mot de passe
Syntaxe :
SET PASSWORD FOR ‘utilisateur’@’hôte’=PASSWORD(‘mot_de_passe’);
Suppression d’un compte utilisateur
Syntaxe:
DROP USER ‘utilisateur’@’hôte’;
Caractères génériques :
GRANT
Permet d’attribuer des privilèges
Permet de créer des utilisateurs
Syntaxe générale
GRANT privilèges [columns], …
ON item | [*] | [*.*]
TO username [IDENTIFIED] BY ‘password’]
[WITH GRANT OPTION]
Ensuite, se connecter en tant que david dans la base de données fact et puis faire nos selects :
REVOKE
Permet de retirer des privilèges
Ne permet pas de supprimer des utilisateurs
Syntaxe :
REVOKE privilèges [columns] | ALL, …
ON item | [*] | [*.*]
FROM username ;
Syntaxe générale
SHOW GRANTS FOR username ;
En donnant à David, le privilège de select sur tous les objets de toutes les bases de données, on
aura :
Pour retirer le privilège de select à david sur l’ensemble des objets de toutes les bases, on
procède comme suit :
Les privilèges au niveau bases
Stockés dans la table db de la base MySQL
Liste
- ALTER, CREATE, CREATE TEMPORARY TABLE, CREATE WIEW, DROP, EVENT, GRANT
OPTION, INDEX, INSERT, LOCK TABLES, SELECT, SHOW VIEW et UPDATE.
Octroie de privilège d’update, insert et delete à Adam dans la base données fact.
Retrait de privilèges :
Attribution d’un mot de passe à l’utilisateur root : elle se fait via la commande set password :
Suppression de l’accès aux bases de données dont le nom commence par test :
Pour ça, on procède comme suit :
Ensuite, suppression les bases de données test via la commande delete :
La commande flush privilèges : oblige MySQL à relire les tables privilèges pour prendre en compte les
modifications effectuées.
Tout utilisateur qui a un privilège FILE peut écrire ou lire des fichiers sur disque dur.
Vérification des utilisateurs qui ont le privilège file_priv : on procède comme suit :
Les plug-ins
Plug-ins d’authentification (à partir de MySQL 5.6)
Mysql_native_password
-par défaut
Mysql_old_password
-méthode de hachage des versions < MySQL 4.1.1
Sha256_password
- Utilisation de l’algorithme de hachage SHA-256
- Paramètre authentification-plugin de la section on [mysqld]
- Paramétrable lors de la création de l’utilisateur
En faisant un show plugins, on se rencontre que validate_password n’existe pas donc on va l’installer
via :
La fonction VALIDATE_PASSWORD_STRENGTH()
-Permet de renvoyer un code en fonction du niveau de sécurité du mot de passe
. 0 : taille < 4
. 25 : <= 4 et < à la valeur de validate_password_length
. 50: si validate_password_policy_number=’LOW’ est respectée
. 75: si validate_password_policy_number=’MEDIUM’ est respectée
. 100: si validate_password_policy_number=’STRONG’ est respectée
[Link] est un fichier crypté. Pour afficher les informations qui se trouvent dans ce fichier, on va
utiliser la commande :
Connexion avec :
Connexion avec :
Syntaxe
CHECK TABLE table1 [, table2 ][option [option]]
Options
-QUICK : ne cherche pas les enregistrements orphelins
-FAST : Ne vérifie pas les tables dont la fermeture ne s’est pas effectuée proprement.
-CHANGED : Ne vérifie que les tables qui ont subi des modifications depuis la dernière
vérification.
- MEDIUM (défaut) : vérifie les enregistrements et calcule une clé d’intégrité (checksum).
- EXTENDED : vérifie les enregistrements et calcule une clé d’intégrité pour chaque
enregistrement.
Pour l’option quick seul l’index est réparé. Extended permet de mieux gérer les indexes formés de
chaine longue et USE_FRM est disponible à partir de la version 4.2 MySQL, elle permet de récréer le
fichier d’index à partir des informations contenues dans le fichier qui contient la structure de la
table .frm.
La commande repair table ne supporte pas le moteur Innodb c’est pourquoi, on va créer des tables via :
La commande CHECKSUM TABLE
Calcul la somme de contrôle (checksum) d’une table (droit de select)
Moteur supporté
-InnoDB, CSV
Syntaxe
CHECKSUM TABLE table1 [, table2] [QUICK] [EXTENDED]
-MyISAM
Syntaxe
OPTIMISE [ NO_WRITE_TO_BINLOG] TABLE table1 [, table2]
Utilitaire myisamchk
Équivalent à [CHECK | REPAIR | ANALYZE] TABLE
Travail directement sur les fichiers MyISAM au niveau système
Syntaxe
Myisamchk [options] table1 [table2]
Sur les indexes on peut utiliser : dans ce cas MySQL ne fait que l’opération de vérification.
Sur tables :
Nb : myisamchk permet de réaliser les différentes opérations de maintenance d’une table à savoir :
l’analyse, la réparation, la vérification et l’optimisation.
Utilitaire mysqlcheck
Équivalent à [CHECK | REPAIR | ANALYZE] TABLE
Travail directement au niveau base ou table
Syntaxe
Mysqlcheck [options] | --all-databases | databases base1 [base2]
Vérification de toutes les tables de la base de données fact : on procède comme suit
Pour exporter les données de la table article vers un fichier du système d’exploitation, on
procède comme suit :
Rechargement de données à partir d’un fichier plat dans une table : pour ça, on va d’abord
supprimer tous les éléments de la table article via :
Mysqldump
Outil de sauvegarde logique
Syntaxe
Mysqldump -u username -p [OPTIONS] dbname [tables]
Mysqldump [OPTIONS] - -databases [OPTIONS] dbname1 [dbname2, …]
Mysqldump [OPTIONS] - -all-databases [OPTIONS]
Redirection du résultat de mysqdump vers le client mysql ou le serveur cible : on va utiliser la syntaxe ci-
dessous :
LANGUAGE SQL | [NOT] DETERMINISTIC | {CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL
DATA} | SQL SECURITY {DEFINER | INVOKER} | COMMENT ‘string’
2. Creation de la procedure:
Affichage de l’ordre de création d’une procédure stockée :
Affichage de l’ordre de création d’une procédure stockée :
Vérification :
Création d’une procédure stockée qui supprime une table : on procède comme suit :
Suppression :
b) Les fonctions
Qu’est-ce qu’une fonction ?
Programme (routine) qui renvoi un résultat
Syntaxe
CREATE
[DEFINER = {user |CURRENT_USER}]
FUNCTION nom_fonction ([parametre1 [, …]])
[RETURNS type]
[caractéristique]
[BEGIN] corps_routine [END]
Les caractéristiques
LANGUAGE SQL | [NOT] DETERMINISTIC | {CONTAINS SQL | NO SQL |READS SQL DATA |MODIFIES SQL
DATA} |SQL SECURITY {DEFINER |INVOKER} | COMMENT ‘string’
Pour obtenir beaucoup plus d’information sur la fonction, on procède comme suit :
c) Les triggers
Qu’est-ce qu’un trigger (déclencheur)
Associé à une table
S’active lorsqu’un événement particulier survient
- BEFORE (avant) ou AFTER (après),
. INSERT, UPDATE, DELETE
Cas d’utilisation
Log des utilisateurs/changements
Exécuter des règles métiers
Renforcer les contraintes d’intégrité
Dupliquer des données
Améliorer les performances et les changements
Création d’un trigger
Syntaxe
CREATE TRIGGER déclencheur
BEFORE | AFTER
INSERT | DELETE | UPDATE ON nom_table
FOR EACH ROW
[condition]
Action
Un trigger qui va empêcher la suppression d’un employer tant que cet employer se trouve dans le
champ no_employe de la commande : on va procéder comme suit :
1. Faire des copies des tables employés et commandes
2. Création du trigger
d) Le planificateur d’événements
Qu’est-ce que le planificateur d’événements
Permet d’automatiser des tâches
-Intervalles réguliers
- Heure fixe
Tourne sous forme de processus léger (thread)
Nécessite le privilège EVENT
Activation
SHOW GLOBAL VARIABLES LIKE ‘event_scheduler’;
SET GLOBAL event_scheduler =1;
Moment:
AT timestamp [+ INTERVAL intervalley] …
| EVERY interval
[STARTS timestamp [+ INTERVAL intervalley] …]
[ENDS timestamp [+ INTERVAL intervalley] …]
Création d’un événement qui va pouvoir insérer une ligne dans la table test_events dans 1min :
Que sauvegarder
A quelle fréquence
La tolérance de perte des données
La durée de rétention des sauvegardes
Les bonnes pratiques
Sauvegarder le fichier de configuration de MySQL
Activer les journaux binaires (log-bin)
Tester les sauvegardes
b) Les sauvegardes logiques
Les outils de sauvegardes
SELECT … INTO OUTFILE
Mysqldump
Sauvegarde cohérente avec mysqldump
Options
Moteur MYSIAM
--opt (intègre l’option –lock-tables)
--lock-all-tables (pour les exports multi bases)
Moteur InnoDB
--single-transaction
Exportation des tables qui utilisent uniquement le moteur InnoDB d’une manière cohérente :
c) Les sauvegardes physiques
Caractéristiques
Copie physique de tous les fichiers (datadir) au niveau OS
Peut être réalisée base ouverte ou fermée
Sauvegardes MyISAM
Les étapes
Pose d’un verrou sur les tables à sauvegarder
LOCK TABLE
Forcer la synchronisation entre le cache MySQL et les fichiers
FLUSH TABLE
Copie des fichiers .frm, .MYD et .MYI (tar, cp, gzip, cpio, …)
Déverrouillage des tables
UNLOCK TABLES ;
On va sauvegarder l’ensemble des fichiers pour les tables commandes_myisam et employes_myisam via
la commande tar :
Cela étant, on fait le unlock table dans la première session pour mettre aux utilisateurs de pouvoir
travailler sur les deux tables commandes_myisam et employes_myisam.
Les fichiers à sauvegarder ce sont des fichiers qui portent l’extension .frm et .ibd
Affichage du tar :
d) La restauration
Dépend du type de sauvegarde
-Restauration à partir d’une sauvegarde à froid
Réalisation d’une sauvegarde : mais avant tout, on vérifie d’abord si le répertoire bakup existe.
Ensuite, on réalise le backup full avec l’outil mysqldump.
Éditer le fichier via :
Le premier fichier journal qu’on devrait réappliquer si on restaure le fichier /bakup/backup_pitr.sql est :
‘mysql3306-binlog.000003’
Ensuite, on fait trois insertions dans la table catégories de la base de données fact via :
Rejouer l’ensemble des fichiers journaux qui contient les différentes transactions que nous avons tapés.
On procède comme suit :
18) Réplication
a) Introduction
Qu’est-ce que la réplication ?
Permet de disposer de plusieurs serveurs avec les mêmes données
Utilise les logs binaires
Pourquoi utiliser la réplication
Montée en charge
Répartition de la charge
Haute disponibilité
Sauvegarde
Les différentes topologies
Maître/Esclave
Maître/Maître
-Actif – Actif
-Actif – Passif
Les modes de réplication
SBR (Statement Based Replication : antérieure à MySQL 5.1)
RBR (Row Based Replication : à partir de MySQL 5.1)
La réplication semi-synchrone (depuis la version 5.5)
-Nécessite l’activation sur le maître et les esclaves
Installation du plugin :
b) Mise en œuvre de la réplication :
Les étapes
Configuration du maître
-Désactivation des firewalls
- logbin, bind-address, server-id
-Création d’un utilisateur avec les droits REPLICATION SLAVE et REPLICATION CLIENT
Configuration de l’esclave
-Désactivation des firewalls
-Bind-address, server-id
-Création d’un utilisateur avec les droits REPLICATION SLAVE et REPLICATION CLIENT
-Configuration avec CHANGE MASTER TO MASTER_HOST, …;
-Démarrage de la réplication avec START SLAVE ;
c) Switchover
Les principales variables de configuration
Server-id
Log-bin
Binlog-do-db, binlog-do-table, binlog-ignore-db, binlog-ignore-table
Replicate-do-db, replicate-ignore-db, replicate-do-table, replicate-ignore-table
Expire_log_days
Sync_binlog
…
Les commandes SQL
SHOW MASTER STATUS
SHOW SLAVE STATUS
START | STOP SLAVE {IO_THREAD |SQL_THREAD}
SHOW BINARY LOGS
PURGE BINARY LOG options
RESET MASTER
RESET SLAVE
CHANGE MASTER TO
Les étapes
Arrêter les écritures sur le nouveau maître et activer les logs binaires
Relever la position des journaux binaires sur le futur maître (SHOW MASTER STATUS)
Configurer la réplication sur l’ancien maître (CHANGE MASTER TO)
Configurer la réplication sur l’ancien maître (START SLAVE)
Arrêter la réplication sur le nouveau maître (STOP SLAVE)
Éléments logiciels
Le cache de requête
-query_cache_type (active ou pas le cache de requête)
0= pas de cache
1= met en cache toutes les requêtes sauf celles qui ont le flag SELECT S_NO_CACHE
2= met en cache seulement les requêtes qui comportent le flag SELECT SQL_CACHE
- query_cache_size (taille du cache de requête)
-RESET QUERY CACHE (réinitialise le cache de requête)
-query_cache_limit (taille maximale des données mis en cache)
Le cache de table
-table_open_tables
-open_table_definitions
Le query_cache_type est désactivé. Pour l’activer, on va d’abord arrêter l’instance puis rajouter le
paramètre query_cache_type=1 dans le fichier /etc/[Link] et ensuite redémarrer l’instance.
Cette requête ne permet pas de stocker le résultat dans le cache. On peut forcer la requête à stocker le
résultat dans le cache en utilisant la syntaxe ci-dessous :
MyISAM
-key_buffer_size (taille du cache d’index)
InnoDB
-innodb_buffer_size (taille du cache mémoire)
-innodb_log_buffer_size (taille du tampon de log)
Paramètre par client
-sort_buffer_size (taille du tampon de tri)
Élément applicatif
Les indexes
Quand créer un index ?
Sur un champ utiliser dans une clause WHERE, ORDER BY ou GROUP BY
Sur des tables assez volumineuses
Sur les clés étrangères
Un index implicite est créé lors de la création d’un PRIMARY KEY
Explain permet d’afficher le plan d’exécution. Elle permet aussi de vérifier si une requête utilise ou non
un index.
4. Création d’index
@