• Aucun résultat trouvé

MySQL - Administration et Transactions - Cours et TP

N/A
N/A
Protected

Academic year: 2022

Partager "MySQL - Administration et Transactions - Cours et TP"

Copied!
60
0
0

Texte intégral

(1)

Bases de données

MySQL - Administration

Installation – configuration – Moteurs Bertrand LIAUDET

SOMMAIRE

SOMMAIRE 1

0 - PROBLEMATIQUE D’ADMINISTRATION 5

0-1 : Introduction 5

Typologie des utilisateurs d’une BD : 5

Les 7 compétences d’administration 5

La maîtrise du serveur : le manuel de référence ! 5

0-2 - Les outils pour l’administration 7

Remarque générale 7

mysql 7

MySQL Shell (nouveauté post 2015 environ) 7

MySQLWorkbench 7

PHP-MyAdmin 8

MySQL Entreprise Edition 8

MySQLCluster 8

0-3 - Télécharger et installer MySQL Community Edition 10

Téléchargement 10

Installation sous Windows 10

Installation sous linux 10

1 - RESULTATS DE L’INSTALLATION 11

1.1 : Les 2 principaux répertoires : basedir et datadir 11

basedir 11

datadir 12

1.2 : BD et utilisateurs par défaut 13

Versions 5.5 et 5.6 13

Versions 5.7 et 8.0 14

1.3 : Les programmes installés 16

4 programmes pour le démarrage 16

La calculettes SQL 16

2 programmes d’administration 16

(2)

1 programme de sauvegarde 17

1 programme d’importation 17

4 programmes d’optimisation et de réparation (tous indépendants du serveur) 18

2 programmes utilitaires 18

2 - A FAIRE APRES INSTALLATION 19

2.1 : Démarrer le serveur 19

Remarque générale 19

Démarrage sous Windows 19

Démarrage sous Linux 20

2.2 : Arrêter le serveur – « Pinguer » le serveur 21

Remarque générale 21

Arrêter et pinguer le serveur sous Windows 21

Arrêter et pinguer le serveur sous Linux 21

2.3 : Sécuriser les comptes MySQL initiaux 22

2.4 : Démarrer le serveur automatiquement 24

Sous Windows 24

Sous Linux 24

3 - CONFIGURATION DU SERVEUR 26

3.1 : Les fichiers de configuration : my.cnf (linux) ou my.ini (Windows) 26

Présentation 26

Où placer les fichiers de configuration ? 27

Les fichiers types 27

3.2 : Les variables systèmes 28

Présentation 28

Variables globales et variables locales 28

Consultation des variables système 28

Modifications des variables système 29

Quelques variables système du serveur 30

Exemple : choix d’un moteur InnoDB par défaut 31

Exercice 31

3.3 : Les variables d’état du serveur 32

Consultation des valeurs des variables d’état 32

Consultation de certaines valeurs des variables d’état 32

Remise à zéro des variables d’état 32

Quelques variables d’état du serveur 32

3.4 : Options mysqld en ligne de commande 34

Présentation 34

Quelques options de mysqld 34

3.5 : Les modes SQL du serveur : sql-mode 36

Présentation 36

Regroupement de modes : ANSI et STRICT_TRANS_TABLES 36

(3)

ONLY_FULL_GROUP_BY 37 Standardisation de MySQL : exécution en mode ONLY_FULL_GROUP_BY 37

Exercices 38

4 - MYSQLADMIN ET CALCULETTE MYSQL 39

4.1 : Mysqladmin 39

Présentation 39

Syntaxe 39

Commandes 39

4.2 : La calculette mysql 41

Présentation 41

Syntaxe 41

Options 41

Utiliser un fichier contenant des commandes, produire des résultats dans un

fichier 42

Exporter les données à partir de MySQL : SELECT … INTO OUTFILE 42 Importer les données à partir de MySQL : LOAD DATA INFILE 43

5 - MYSQLDUMP - SAUVEGARDE 44

C:\ mysql dump 44

6 - LA COMMANDE SHOW 46

META-BASE 46

DDL 46

VARIABLES SYSTEME 46

DROITS 46

CARACTERES 46

MOTEUR 46

DEBOGAGE 47

7 – STOCKAGE ET MOTEURS DE STOCKAGE 48

7.1 : Consultation des données sur le disque 48

Principes 48

Exercices 48

7.2 : Les différents moteurs de stockage 48

Présentation 48

Avantages et inconvénients 49

7.3 : Le moteur MyISAM 49

Caractéristiques principales 49

Type par défaut 49

Quelques caractéristiques particulières des tables MyISAM 49

Format de stockage des tables MyISAM 50

7.4 : Le moteur MERGE 52

(4)

7.5 : Le moteur MEMORY 52

7.6 : Les tables compressées : myisampack 52

7.7 : Le moteur ARCHIVE 53

7.8 : Le moteur InnoDB 53

Caractéristiques principales 53

8 - PROGRAMMATION DES TABLES : RAPPELS 54

Gestion des bases de données 54

Création des tables 54

Création des tables 54

Les contraintes d’intégrité 55

Paramétrage des contraintes d’intégrité référentielle 56 Nommer les contraintes : CONSTRAINT nomContrainte 57

Modification des tables 57

Modification des attributs 57

Modification des contraintes d'intégrité 57

Suppression de la clé primaire 58

Destruction des tables 58

Récupération du code sous mysql : show create table 58

Exemple 1 : mysql> show create table dept; 58

Exemple 2 : mysql> show create table emp; 59

Passage d’un moteur à un autre 59

MyISAM et InnoDB 59

9 - TP 60

EXERCICES d’ADMINISTATION MySQL 60

Prise en main en ligne de commande : 60

Edition janvier 2019

(5)

0 - PROBLEMATIQUE D’ADMINISTRATION

0-1 : Introduction

Typologie des utilisateurs d’une BD :

• L’utilisateur final

• Le développeur

• L’administrateur

Les 7 compétences d’administration

1) Installation, configuration et contrôle du serveur. Architecture du SGBD.

2) Politique de sécurité 1 : Gestion des utilisateurs. Les utilisateurs et les privilèges.

Dictionnaire des données.

3) Politique de sécurité 2 : Gestion des sauvegardes et des restaurations. Organisation des fichiers. Outils adaptés. Gestion des journaux.

4) Amélioration des performances : Optimisation – Tuning (paramétrage, accordage). Index et plan d’exécution (explain). Paramétrage du serveur. Choix d’un moteur de stockage (spécifique MySQL).

5) Migration et intégration des données : Importer des données. Exporter des données.

6) Réplication (duplication des données-BD) – Cluster (plusieurs serveurs-machines pour une même BD-données)

7) Savoir se documenter ! Utiliser la documentation officielle en ligne.

La maîtrise du serveur : le manuel de référence !

Le manuel de référence offre de nombreuses ressources pour une bonne maîtrise du serveur. Il faut s’en servir !

http://bliaudet.free.fr/IMG/pdf/MySQL-refman-5.0-fr.pdf https://dev.mysql.com/doc/refman/5.5/en/

https://dev.mysql.com/doc/refman/5.5/en/server-administration.html https://dev.mysql.com/doc/refman/5.6/en/

https://dev.mysql.com/doc/refman/5.6/en/server-administration.html https://dev.mysql.com/doc/refman/5.7/en/

https://dev.mysql.com/doc/refman/5.7/en/server-administration.html https://dev.mysql.com/doc/refman/8.0/en/

https://dev.mysql.com/doc/refman/8.0/en/server-administration.html La page d’accueil présente le plan détaillé.

On trouve aussi la liste des chapitres de niveau 1 sur la gauche.

(6)

Par exemple :

MySQL Server Administration : ce chapitre contient les principaux éléments d’administration, dont le mysql system database (la BD mysql).

On trouve aussi :

• MySQL Data Dictionnary

• MySQL Perfomance Schema

• Replication

• Optimization

• The InnoDB Storage Engine

• Backup and Recovery

• Etc.

(7)

0-2 - Les outils pour l’administration

Remarque générale

L’administration est une tâche de gestion d’un existant : la BD et ses utilisateurs.

Les outils professionnels sont payants. Leur utilisation nécessite un contexte professionnel : une ou plusieurs BD déjà utilisées par des utilisateurs (des applications ou des développeurs ou plus rarement des utilisateurs finaux).

On va présenter dans ce document les principales notions permettant d’administrer la BD en les mettant en œuvre dans des contextes très simplifiés et avec un simple client mysql.

mysql Présentation

mysql est le client de base fourni à l’installation du SGBD mysql.

Il permet de se connecter à un serveur local ou distant.

Il permet de passer toutes les commandes comprises par le SGBD.

Il permet aussi de passer des commandes dans des scripts sans IHM comme par exemple le chargement d’une BD.

MySQL Shell (nouveauté post 2015 environ)

https://dev.mysql.com/doc/refman/5.5/en/mysql-shell-userguide.html https://dev.mysql.com/doc/refman/8.0/en/mysql-shell-userguide.html Présentation

MySQL Shell is an advanced client and code editor for MySQL Server.

In addition to the provided SQL functionality, similar to mysql, MySQL Shell provides scripting capabilities for JavaScript and Python and includes APIs for working with MySQL.

Site

https://dev.mysql.com/downloads/shell/

MySQLWorkbench

https://dev.mysql.com/doc/refman/5.5/en/workbench.html https://dev.mysql.com/doc/refman/8.0/en/workbench.html Présentation

MySQL Workbench provides a graphical tool for working with MySQL servers and databases.

MySQL Workbench fully supports MySQL versions 5.5 and higher.

MySQL Workbench fournit aux DBAs et aux développeurs un environnement de développement intégré pour :

(8)

• La conception de la BD

• Le développement SQL (MySQL Workbench remplace MySQL Query Browser)

• L’administration de la BD Site

http://www.mysql.fr/downloads/workbench/

PHP-MyAdmin Présentation

Les environnements intégrés PHP-MySQL (LAMP, WAMP, XAMPP, EasyPHP) offrent toujours un outil d’administration de la BD type « PHP-MyAdmin ».

MySQL Entreprise Edition

https://dev.mysql.com/doc/refman/5.5/en/mysql-enterprise.html https://dev.mysql.com/doc/refman/8.0/en/mysql-enterprise.html Présentation

MySQL Entreprise Edition est la version « entreprise » payante de MySQL. Elle offre des outils d’administration plus performants et permet d’atteindre les niveaux de sécurité, de fiabilité et de disponibilité les plus élevés.

Site

https://www.mysql.com/fr/products/enterprise/

Fiche produit en français

http://www.mysql.fr/products/enterprise/mysql-datasheet.fr.pdf Démo

https://www.youtube.com/watch?v=A7dBB8_yNJI

MySQLCluster Présentation

MySQL Cluster Edition est la version « entreprise » payante de MySQL. Elle offre, en plus de MySQL Entreprise Edition, une meilleure disponibilité des données par du clustuting et de la réplication. Elle est utile pour des usages critiques de la BD.

Comme MySQL Entreprise Edition, MySQL Cluster offre des outils d’administration performant avec des outils de clustering et de réplication.

Site

https://www.mysql.com/fr/products/cluster/

Fiche produit en français

Ø http://www.mysql.fr/products/cluster/mysql-cluster-datasheet.fr.pdf

(9)

Démo

https://www.youtube.com/watch?v=A7dBB8_yNJI

(10)

0-3 - Télécharger et installer MySQL Community Edition

Téléchargement Site

https://dev.mysql.com/downloads/

Version GA

La version GA est la « Generally Available Releases

En janvier 2019, c’est la MySQL Community Server 5.8.0.14 (c’était la .13 en décembre 2018).

Anciennes versions 5.5

5.6 5.7

Installation sous Windows

Article de novembre 2018 : http://bliaudet.free.fr/article.php3?id_article=307

Installation sous linux

Les versions varient selon les versions de Linux (Ubuntu, Debian, Suse, etc.).

Eléments d’installation pour une version Suse : fichier RMP On utilise un fichier RPM.

Pour voir tous les fichiers présents dans un paquet RPM, lancez :

shell> rpm -qpl MySQL-VERSION.i386.rpm

Pour effectuer une installation standard minimale, lancez :

Shell> rpm –i MySQL-server-VERSION.i386.rpm Shell> rpm –i MySQL-client-VERSION.i386.rpm

Le fichier RPM fait l’installation et particulièrement : 1. Place les données dans /var/lib/mysql

2. Crée un compte de connexion pour un utilisateur nommé mysql (s’il n’existe pas déjà) afin de l’utiliser pour exécuter le serveur MySQL.

3. Crée les entrées appropriées dans /etc/init.d/ (ou dans /etc/rc.d/init.d selon la version linux) pour lancer le serveur automatiquement au démarrage.

Remarque : si vous avez déjà effectué une installation auparavant, on a intérêt à faire une sauvegarde des fichiers de démarrage précédents.

(11)

1 - RESULTATS DE L’INSTALLATION

Résultats de l’installation :

• 1.1 : Les 2 principaux répertoires : basedir et datadir

• 1.2 : Les BD et les utilisateurs d’origine selon les versions

• 1.3 : Les programmes installés

1.1 : Les 2 principaux répertoires : basedir et datadir

basedir Présentation

Le basedir est le répertoire d’installation du serveur (donc du programme serveur, mysql.exe sous Windows), des bibliothèques dont il a besoin et des outils qu’il propose.

Afficher la valeur de basedir dans un client mysql

C’est une variable de niveau Serveur : on y accède par @@

Select @@basedir; //

Ou

Show variables like ‘%basedir%’; //

On peut aussi filtrer seulement sur dir, et on obtient toutes les variables concernant les « dir »

Show variables like ‘%dir%’; //

Sous Windows

Ø Valeur du basedir sous Windows C:\mysql\mysql-5.5.62-winx64 C:\mysql\mysql-5.6.42-winx64 C:\mysql\mysql-5.7.24-winx64 C:\mysql\mysql-8.0.13-winx64 Ø Contenu du basedir sous Windows

Sous Linux

Ø Valeur du basedir sous Linux /usr : contient les programmes.

Ø Contenu sous Linux

/usr/sbin : mysqld, mysqlmanager /usr/bin : tous les autres programmes

/usr/scripts : contient éventuellement les scripts (mysqld_safe, etc.)

(12)

datadir Présentation

Le datadir est le répertoire qui contient les données. Par défaut il est installé dans le basedir. Mais on pourra ensuite le mettre ailleurs.

Afficher la valeur de datadir dans un client mysql

C’est une variable de niveau Serveur : on y accède par @@

Select @@datadir; //

Ou

Show variables like ‘%datadir%’; //

On peut aussi filtrer seulement sur dir, et on obtient toutes les variables concernant les « dir »

Show variables like ‘%dir%’; //

Sous Windows

Ø Valeur du datadir sous Windows C:\mysql\mysql-5.5.62-winx64\data C:\mysql\mysql-5.6.42-winx64\data C:\mysql\mysql-5.7.24-winx64\data C:\mysql\mysql-8.0.13-winx64\data Sous Linux

Ø Valeur du datadir sous Linux

/var/lib/mysql : contient les bases de données.

Contenu technique du datadir

L’organisation des fichiers et des répertoires dans le datadir est propre à MySQL. On aborde cette question dans un autre chapitre.

(13)

1.2 : BD et utilisateurs par défaut

L’installation du serveur crée des BD et des utilisateurs par défaut. La situation est différentes selon les versions installées.

Versions 5.5 et 5.6 Les BD

Affichage des BD installées par défaut

show databases ;

Ø la BD « mysql »

Elle contient une première version du dictionnaire des données, particulièrement les tables d’utilisateurs et de droits. Les tables de la BD mysql sont de type MyISAM.

https://dev.mysql.com/doc/refman/5.5/en/system-database.html https://dev.mysql.com/doc/refman/5.6/en/system-database.html

Ø la BD « information schéma »

Elle contient le dictionnaire des données. Les tables de la BD info sont de type MyISAM.

https://dev.mysql.com/doc/refman/5.5/en/information-schema.html https://dev.mysql.com/doc/refman/5.6/en/information-schema.html

Ø la BD « performance schéma »

Elle contient des informations sur l’exécution du serveur. Les tables de la BD perf. sont de type

« performance_schema ». https://dev.mysql.com/doc/refman/5.5/en/performance-schema.html https://dev.mysql.com/doc/refman/5.6/en/performance-schema.html

Ø la BD « test »

Elle ne contient aucune table. Elle est là pour faire des tests.

Les utilisateurs

Affichage des utilisateurs installés par défaut

select user, host, password from mysql.user ;

Par défaut, il n’y a aucun password pour aucun utilisateur.

Ø 3 utilisateurs root :

Ils sont équivalents. Ils ne peuvent se connecter que de la machine serveur.

• root@127.0.0.1

• root@::1

• root@localhost Ø 1 utilisateur anonyme:

Il peut se connecter à partir de la machine serveur, sans nom et sans mot de passe.

• ‘’@localhost

(14)

Versions 5.7 et 8.0 Les BD

Affichage des BD installées par défaut

show databases ;

Ø la BD « mysql »

Elle contient une première version du dictionnaire des données, particulièrement les tables d’utilisateurs et de droits. Les tables de la BD mysql sont de type MyISAM.

https://dev.mysql.com/doc/refman/5.7/en/system-database.html https://dev.mysql.com/doc/refman/8.0/en/system-database.html

Ø la BD « information schéma »

Elle contient le dictionnaire des données. Les tables de la BD info sont de type ENGINE ou des vues. https://dev.mysql.com/doc/refman/5.7/en/information-schema.html

https://dev.mysql.com/doc/refman/8.0/en/information-schema.html

Ø la BD « performance schéma »

Elle contient des informations sur l’exécution du serveur. Les tables de la BD perf. sont de type

«PERFORMANCE_SCHEMA».

https://dev.mysql.com/doc/refman/5.7/en/performance-schema.html https://dev.mysql.com/doc/refman/8.0/en/performance-schema.html

Ø la BD « sys»

Elle contient des vues qui facilitent l’utilisation de performance schéma. Les tables de la BD sys sont des vues. https://dev.mysql.com/doc/refman/5.7/en/sys-schema.html

https://dev.mysql.com/doc/refman/8.0/en/sys-schema.html

Les utilisateurs

Ø Affichage des utilisateurs installés par défaut

select user, host from mysql.user ;

Par défaut, il n’y a aucun password pour aucun utilisateur.

Ø 3 ou 4 utilisateurs système:

Ils ne peuvent se connecter que de la machine serveur.

• mysql.infoschema@localhost : que sur la version 8.0

• mysql.session@localhost

• mysql.sys@localhost

• root@localhost Ø Remarques

• Il n’y a plus de password visible dans la table « mysql.user » : c’est un choix de sécurité.

• Il n’y a plus d’utilisateur anonyme : c’est choix de sécurité.

• Il n’y a qu’un seul utilisateur root.

(15)

• Les 3 utilisateurs mysql.infoschema, mysql.session et mysql.sys sont des utilisateurs pour le système. On ne peut pas s’y connecter. Ils servent à manipuler les tables dictionnaire.

• Si ces utilisateurs viennent à manquer, on peut les récréer :

+---+

| Grants for mysql.sys@localhost | +---+

| GRANT USAGE ON *.* TO 'mysql.sys'@'localhost' |

| GRANT TRIGGER ON `sys`.* TO 'mysql.sys'@'localhost' |

| GRANT SELECT ON `sys`.`sys_config` TO 'mysql.sys'@'localhost' |

+---+

| Grants for mysql.session@localhost | +---+

| GRANT SUPER ON *.* TO 'mysql.session'@'localhost' |

| GRANT SELECT ON `performance_schema`.* TO 'mysql.session'@'localhost' |

| GRANT SELECT ON `mysql`.`user` TO 'mysql.session'@'localhost' | +---+

GRANT supplémentaire pour la version 8.0

GRANT PERSIST_RO_VARIABLES_ADMIN,SYSTEM_VARIABLES_ADMIN ON *.* TO `mysql.session`@`localhost`

+---+

| Grants for mysql.infoschema@localhost | +---+

| GRANT SELECT ON *.* TO `mysql.infoschema`@`localhost` | +---+

(16)

1.3 : Les programmes installés

https://dev.mysql.com/doc/refman/8.0/en/programs-client.html

Chaque programme MySQL accepte différentes options. Mais chaque programme dispose de l'option --help qui vous donne une description complète des options du programme.

4 programmes pour le démarrage

https://dev.mysql.com/doc/refman/8.0/en/programs-server.html mysqld

Le démon SQL (c’est-à-dire, le serveur MySQL). Pour utiliser les programmes clients, ce programme doit fonctionner, car les clients viendront se connecter dessus. See Section 5.2, « Configuration de MySQL ».

mysqld_safe

Un script de démarrage du serveur. mysqld_safe tente de démarrer mysqld-max s'il existe, et sinon mysqld. See Section 5.1.3, « safe_mysqld, le script père de mysqld ».

mysql.server

Un script de démarrage du serveur. Ce script est utilisé sur les systèmes qui ont un dossier contenant des services système. Il invoque mysqld_safe pour démarrer le serveur.

mysqld_multi

Un script de démarrage qui peut lancer ou arrêter différentes instances du serveur, installées sur le système.

La calculettes SQL

https://dev.mysql.com/doc/refman/8.0/en/mysql.html mysql

Le client en ligne de commande, pour envoyer des requêtes à MySQL, interactivement, ou en batch.

2 programmes d’administration mysqladmin

https://dev.mysql.com/doc/refman/8.0/en/mysqladmin.html

Un utilitaire pour réaliser des opérations d'administration de la base, telles que les créations de bases, le rafraîchissement des tables de droits, l'écriture des tables sur le disque et la réouverture des fichiers de log. à mysqladmin permet aussi de lire la version, les processus et les informations de statut du serveur. See Section 8.4, « mysqladmin, administration d'un serveur MySQL ».

mysqladmin permet de faire ce qu’on fait avec mysql mais en passant les commandes en lignes (on peut donc écrire des scripts).

Ex : suppression de la BD test : mysqladmin –u root –p password drop test

(17)

mysqlshow

https://dev.mysql.com/doc/refman/8.0/en/mysqlshow.html

mysqlshow permet de faire ce qu’on fait avec mysql et le show mais en passant les commandes en lignes (on peut donc écrire des scripts).

1 programme de sauvegarde

https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html mysqldump

Exporte une base de données MySQL dans un fichier sous la forme de requêtes SQL, ou de fichiers texte, avec la tabulation comme séparateur. See Section 8.8, « mysqldump, sauvegarde des structures de tables et les données ».

1 programme d’importation

https://dev.mysql.com/doc/refman/8.0/en/mysqlimport.html mysqlimport

Importe les fichiers textes dans les tables, en utilisant la commande LOAD DATA INFILE. See Section 8.10, « mysqlimport, importer des données depuis des fichiers texte ».

(18)

4 programmes d’optimisation et de réparation (tous indépendants du serveur) mysqlcheck

Un client d'entretien de tables, qui vérifie, répare, analyse et optimise les tables. See Section 8.7,

« Utiliser mysqlcheck pour l'entretien et la réparation ».

Ce programme est indépendant du serveur mysqld.

myisamchk

Un utilitaire pour décrire, vérifier, optimiser et réparer les tables MyISAM.

Ce programme est indépendant du serveur mysqld.

myisampack

Un utilitaire qui compresse les tables MyISAM pour produire des tables en lecture seule très compactes. See Section 8.2, « myisampack, le générateur de tables MySQL compressées en lecture seule ».

Ce programme est indépendant du serveur mysqld.

mysqlbinlog

Utilitaire de lecture des requêtes au format binaire. Peut être utilisé après un crash, sur une vieille sauvegarde. See Section 8.5, « mysqlbinlog, Exécuter des requêtes dans le log binaire ».

Ce programme est indépendant du serveur mysqld.

2 programmes utilitaires perror

Un utilitaire qui affiche la signification des codes d'erreur MySQL. See Section 8.12, « perror, expliquer les codes d'erreurs ».

Ce programme est indépendant du serveur mysqld.

replace

replace modifie des chaînes dans des fichiers, ou sur l'entrée standard. See Section 8.13, « L'utilitaire de remplacement de chaînes replace ».

(19)

2 - A FAIRE APRES INSTALLATION

A faire après l’installation :

• 1.1 : Démarrer le serveur.

• 1.2 : Arrêter le serveur, « pinguer » le serveur.

• 1.3 : Sécuriser les comptes MySQL initiaux.

• 1.4 : Paramétrer le démarrage automatique du serveur.

2.1 : Démarrer le serveur

Remarque générale

Il y a de nombreuses façons de démarrer le serveur. On peut le faire avec des outils ou directement en ligne de commandes. Dans le paragraphe 3 on verra comment faire en sorte que le serveur démarre automatiquement au démarrage de l’OS.

Si on a installé MySQL avec un logiciel d’installation (un .MSI sous Windows), il est possible que tout soit déjà fait.

Démarrage sous Windows Principes généraux

Ø Le serveur

Pour démarrer le serveur, il faut passer des options avec « -- » derrière le nom du serveur.

Pour démarrer le serveur en console, on écrit :

mysqld –-console

Si l’OS ne reconnaît pas le serveur (mysqld), c’est que le PATH n’a pas été paramétré.

On peut le paramétrer en y ajoutant le chemin : basedir/bin.

On peut aussi démarre le serveur en console en précisant le chemin. Par exemple :

C:\mysql\mysql-5.5.62-winx64\bin\mysqld –-console

A noter que le programme lancé ne « rend pas la main » : c’est un serveur. Il attend une commande d’un client. Il ne rend pas la main car il n’est pas démarré « en arrière plan ». Pour ça, il faudra utiliser les services Windows.

A noter que le démarrage peut ne pas fonctionner. Dans ce cas, il faut lire les messages dans l’ordre. Certains messages disent des choses du genre : « Please use -- explicit_defaults_for_timestamp ». Dans ce cas, il faut ajouter l’option derrière le – console.

D’autres messages disent des choses du genre :

C:\mysql\mysql-5.7.24-winx64\bin\mysqld --initialize-insecure

Pour initiliser le répertoire des données.

Remaque : pour connaître la version du serveur du fichier mysqld, on peut faire :

C:\mysql\mysql-5.5.62-winx64\bin\mysqld --version

(20)

Ø Un client

Une fois le serveur démarré, on démarre un client :

mysql –uroot –p

ou

C:\mysql\mysql-5.5.62-winx64\bin\mysql –uroot -p

Dans le client, on vérifie qu’on est connecté :

Select version() ; // donne la version du serveur.

Select @@basedir ; // affiche le basedir.

Show databases ; // affiche les bases enregistrées dans le serveur.

Versions 5.5 et 5.6

mysqld --console

Version 5.7 et 8.0

mysqld --initialize-insecure mysqld --console

Démarrage sous Linux

Attention : il faut travailler directement avec mysqld et / ou mysqld_safe, et non pas avec un

« restart » ou un script du même genre.

shell>bin/mysqld_safe

(21)

2.2 : Arrêter le serveur – « Pinguer » le serveur

Remarque générale

Une fois le serveur démarré, on peut l’arrêter ou vérifier qu’il tourne.

Arrêter et pinguer le serveur sous Windows

Vérifier que le serveur tourne : chercher mysqld.exe dans les tâches

C:> tasklist /FI "IMAGENAME eq mysqld.exe"

Pinguer le serveur

C:> mysqladmin ping –uroot -p

Autres communication avec le serveur via mysqladmin :

C:> mysqladmin -- version

C:> mysqladmin version status proc –uroot -p C:> mysqladmin variables

Arrêter le serveur

C:> mysqladmin shutdown –uroot –p

Exercice

Démarrez le serveur Pinguez le serveur Arrêter le serveur Pinguez le serveur Démarrer le serveur Démarrez 2 clients

Affichez les processus en cours

Arrêter et pinguer le serveur sous Linux

Vérifier que le serveur tourne : chercher mysqld dans les processus

shell>ps –ef | grep mysqld

Pour le reste, les commandes sont identiques sous Linux et sous Windows, ou le contraire !

(22)

2.3 : Sécuriser les comptes MySQL initiaux L’utilisateur anonyme

En version 5.5 et 5.6, il y a un utilisateur anonyme qui peut se connecter à partir de localhost.

Quels sont les droits de cet utilisateur :

mysql> show grants for ''@localhost;

+---+

| Grants for @localhost | +---+

| GRANT USAGE ON *.* TO ''@'localhost' | +---+

Il n’a que le droit de se connecter.

A quelle BD peut-il accéder ?

mysql> show databases;

+---+

| Database | +---+

| information_schema |

| test | +---+

Il ne peut accéder qu’aux BD information_schema et test.

La BD information_schema c’est le dictionnaire pour ses données et les données système. Il peut consulter le contenu de la BD mais pas le modifier.

La BD test est par contre à sa disposition. Il peut créer des tables et des tuples à l’intérieur.

Cet utilisateur est sécurisé : il ne peut pas faire grand chose et ne peut se connecter qu’à partir de localhost. Il sert à faire des tests.

Si on veut le supprimer, on peut toujours faire un :

mysql> drop user ‘’@localhost;

Attribuer des mots de passe aux comptes root via mysqladmin Dans toutes les versions, le compte root n’a pas de mot de passe.

On peut donner des mots de passe avec mysqladmin :

C:> mysqladmin password motDePasse –u root -p

motDePasse sans apostrophes.

Si on veut retirer le password, on écrira :

C:> mysqladmin password –u root -p

Attribuer des mots de passe aux comptes root via un set password, versions 5.5 et 5.6

mysql> set password for 'root'@'localhost' = password('root');

Si on veut retirer le password, on écrira :

mysql> set password for 'root'@'localhost' = password('');

A noter l’usage de la fonction “password” qui permet de crypter le password.

Si on veut visualiser l’utilisateur avec son password, on écrira :

mysql> select user, host, password from mysql.user where user

='root';

(23)

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

| user | host | password | +---+---+---+

| root | localhost | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |

| root | 127.0.0.1 | |

| root | ::1 | | +---+---+---+

Ø En passant par la BD mysql

mysql> update mysql.user set password = password('mdp') where user='root';

mysql> flush privileges;

La fonction password permet de cripter le password.

Flush privileges permet la prise en compte effective de la modification.

Il faut éviter de faire ça !!! On évite de manipuler directement la BD mysql !!!

Attribuer des mots de passe aux comptes root via un set password, versions 5.7 et 8 Pour ajouter un password à l’utilisateur root on écrira :

ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';

La valeur du IDENTIFIED BY correspond au password. Il sera crypté automatiquement.

Il n’y a plus d’attribut “password” dans la table mysql.user.

On ne peut plus afficher le password.

Si on veut retirer le password, on écrira :

ALTER USER 'root'@'localhost' IDENTIFIED BY '';

Exercice

Attribuez un mot de passe à root.

Vérifiez en ouvrant un nouveau client.

Remettez l’ancien mot de passe (rien).

Vérifiez en ouvrant un nouveau client.

(24)

2.4 : Démarrer le serveur automatiquement

Sous Windows

Il faut gérer un service Windows.

En cherchant « services » on accède à la fenêtre de gestion des services.

La commande :

sc create mysql5562 binpath= "c:\mysql\mysql-5.5.62 winx64\bin\mysqld.exe --console " type=own

permet de créer un service nommé : mysql5562

Ce service est visible dans la fenêtre de gestion des services. On peut faire passer son type de démarrage à automatique.

Pour supprimer un service Windows :

sc delete mysql5562

Pour démarrer un service Windows en ligne de commande :

sc start mysql5562

A noter que la commande n’est pas envoyée en arrière plan.

Exercice

Créer un service windows et contrôler le.

Sous Linux Démarrage

http://dev.mysql.com/doc/refman/5.0/fr/automatic-start.html On peut démarrer le serveur

• en lançant mysqld directement

• en lançant mysql_safe qui fait appel à mysqld : http://dev.mysql.com/doc/refman/5.0/fr/mysqld-safe.html

• en lançant mysql_server qui fait appel à mysql-safe : http://dev.mysql.com/doc/refman/5.0/fr/mysql-server.html

shell>mysql.server start

Arrêt

shell>bin/mysqladmin –u root shutdown

ou

shell>mysql.server stop

(25)

Démarrage automatique

Pour lancer et arrêter automatiquement MYSQL sur votre serveur, vous devez ajouter les commandes de lancement et d'arrêt dans les bons endroits de vos fichiers /etc/rc*.

Avec les paquets Linux RPM (MySQL-server-VERSION.rpm), le script mysql.server est installé sous le nom /etc/init.d/mysql.

Après installation du script, les commandes doivent être activées pour fonctionner au lancement du système, sur votre système d'exploitation. Sous Linux, vous pouvez utiliser chkconfig :

shell> chkconfig --add mysql

Sur certains systèmes Linux, les commandes suivantes sont aussi nécessaires pour activer totalement le script mysql :

shell> chkconfig --level 345 mysql on

Pour d’autres systèmes, consultez la documentation de votre système d’exploitation.

(26)

3 - CONFIGURATION DU SERVEUR

3.1 : Les fichiers de configuration : my.cnf (linux) ou my.ini (Windows) Dans le datadir, regardez les fichiers de configuration par défaut qui sont proposés.

On trouve le lien suivant :

http://dev.mysql.com/doc/mysql/en/option-files.html

Ca ramène à la vesion 8, et on trouve l’équivalent dans les autres versions.

https://dev.mysql.com/doc/refman/8.0/en/option-files.html https://dev.mysql.com/doc/refman/5.7/en/option-files.html https://dev.mysql.com/doc/refman/5.6/en/option-files.html https://dev.mysql.com/doc/refman/5.5/en/option-files.html

Présentation Principes

https://dev.mysql.com/doc/refman/5.5/en/glossary.html#glos_configuration_file https://dev.mysql.com/doc/refman/5.6/en/glossary.html#glos_configuration_file https://dev.mysql.com/doc/refman/5.7/en/glossary.html#glos_configuration_file https://dev.mysql.com/doc/refman/8.0/en/glossary.html#glos_configuration_file

Les fichiers my.cnf (Linux) ou my.ini (Windows) sont des fichiers de configuration appelés aussi

« option file ».

Ils permettent de définir des éléments de configuration du serveur ou des clients.

Syntaxe

Ils sont au format ASCII

Ils sont constitués de plusieurs sections.

Chaque section commence par l’option : [section]

Les sections correspondent au serveur ou à des clients : [mysqld], [mysql], [mysqladmin], etc.

Les lignes de commentaires commencent par un # Exemple

# Example MySQL config file for small systems.

[client]

port = 3306

socket = /tmp/mysql.sock [mysqld]

port = 3306

socket = /tmp/mysql.sock language = french

(27)

Où placer les fichiers de configuration ?

On peut ajouter un fichier my.ini dans le BASEDIR et préciser dedans ce qu’on souhaite ajouter à la configuration par défaut.

Exemple et exercice : modification de la langue Modifier la langue du serveur.

Le fichier peut dont par exemple ne faire que 2 lignes :

[mysqld]

language = french

Vérifiez que le serveur a bien pris en compte la nouvelle langue.

Les fichiers types

La version 5.5 de MySQL propose 4 fichiers types : my-small.ini, my-medium.ini, my-large.ini, my-huge.ini, my-innodb-heavy-4G.ini

Les configuration « small » jusqu’à « huge » servent en fonction de la mémoire vive nécessaire pour faire tourner le serveur. “huge” est adaptée à un serveur entièrement dédié à MySQL.

La configuration « innodb-heavy » est adapté à : 4GB RAM, InnoDB only, ACID, few connections, heavy queries.

(28)

3.2 : Les variables systèmes

Présentation

Le serveur (mysqld) et les clients (mysql) conservent des variables système qui indiquent de quelle manière ils se trouvent configurés.

Toutes les variables système ont des valeurs par défaut : elles peuvent valoir ‘’. Elles ne valent jamais NULL.

Variables globales et variables locales Il existe deux sortes de variables :

• Les variables globales valent pour tous les clients du serveur : « global ».

• Les variables locales valent uniquement pour un client donné : « local » ou « session ».

Certaines variables ont une valeur locale et une valeur globale.

Certaines variables n’ont qu’une valeur globale.

A noter que la majorité des variables ont la même valeur en global et en local.

Consultation des variables système Afficher toutes les variables de la session

mysql> Show variables

C’est un équivalent à :

mysql> Show session variables

C’est un équivalent à :

mysql> Show local variables

Afficher toutes les variables du serveur

mysql> Show global variables

C’est un équivalent à :

shell>mysqladmin variables –uroot -p

Afficher certaines variables locales

Pour repérer informations sur des répertoires :

mysql> Show variables like ‘%dir%’;

Pour connaître la taille des buffers :

mysql> Show variables like ‘%buffer%’;

Pour les informations sur les tables :

mysql> Show variables like ‘%table%’;

Afficher une variable locale

mysql> Show variables like ‘sql_mode’;

C’est un équivalent à :

mysql> Select @@sql_mode;

C’est un équivalent à :

(29)

mysql> Select @@session.sql_mode;

C’est un équivalent à :

mysql> Select @@local.sql_mode;

Afficher une variable global

mysql> Show global variables like ‘sql_mode’;

C’est un équivalent à :

mysql> Select @@global.sql_mode;

Modifications des variables système

La valeur d’une variable système peut être définie de trois façons :

• au démarrage du serveur

• en paramétrant le fichier de configuration

• dynamiquement dans la calculette SQL avec la commande SET. Cette dernière possibilité n’est pas possible pour toutes les variables système (par exemple, la langue ne peut pas être modifiée dynamiquement).

Au démarrage du serveur

Option --nom_var=valeur au lancement de mysqld.

Ø Exemple

shell> mysqld –-key_buffer_size=32M

Via la commande SET de la calculette SQL Passer localement en InnoDB par défaut :

mysql> set local default_storage_engine = “InnoDB”;

C’est un équivalent à :

mysql> set @@default_storage_engine = “InnoDB”;

C’est un équivalent à :

mysql> set @@local.default_storage_engine = “InnoDB”;

C’est un équivalent à :

mysql> set @@session.default_storage_engine = “InnoDB”;

Passer globalement en InnoDB par défaut :

mysql> set global default_storage_engine = “InnoDB”;

Via les fichiers de configuration Mettre les messages en français :

[mysqld]

language = French

Définition de valeur maximum

On peut ajouter le préfixe « maximum-» devant le nom d’une variable pour définir la valeur maximum pour cette variable.

Option --maximum-nom_var=valeur au lancement de mysqld.

(30)

Quelques variables système du serveur basedir

Chemin vers le répertoire d’installation.

datadir

Chemin vers le répertoire des données.

language

Langue utilisée.

log

Il existe de nombreuses variables contenant le mot clé « log ». Certaines permettent de définir des répertoires pour des fichiers de log. Par exemple le fichier de log des requêtes lentes (slow_query_log), le fichier général de log.

max_connections

Cette option permet de définir le nombre maximum de clients.

skip_show_database

Cette option permet de limiter la visibilité des databases aux utilisateurs qui ont les droits.

sql-mode

Permet de donner une valeur à sql-mode. Cf § suivant.

tmpdir

Chemin vers le répertoire des fichiers temporaires.

default_storage-engine

Type de table (c’est-à-dire moteur de stockage) par défaut. Equivalent à table-type.

version

Affiche les informations sur la version

(31)

Exemple : choix d’un moteur InnoDB par défaut

Les installations standard de MySQL paramètrent le moteur InnoDB par défaut.

Toutefois, dans les installations WAMP, c’est le moteur MyISAM qui est paramétré par défaut.

Comment passer à un moteur InnoDB par défaut ? En paramétrant le fichier de configuration

[mysqld]

default_storage_engine=InnoDB

Si le fichier my.ini n’existe pas, on peut le créer avec ces seules instructions.

Puis on place le fichier dans le datadir.

Cette solution est facile à mettre en œuvre avec WAMP.

On démarrant le serveur avec une option

On peut aussi lancer le serveur avec une option :

shell> mysqld -–default_storage_engine =InnoDB

Cette solution est compliquée à mettre en œuvre avec WAMP.

En paramétrant le client ou le serveur pendant qu’ils fonctionnent

La plupart des paramètres de mysqld (options de démarrage) peuvent être définis sans arrêter le serveur en modifiant des variables du système.

Mysql> SELECT @@global.default_storage_engine;

+---+

| @@global.default_storage_engine | +---+

| MyISAM | +---+

1 row in set (0.00 sec)

Mysql> SET GLOBAL default_storage_engine = ‘InnoDB’ ; Mysql> SET LOCAL default_storage_engine = ‘InnoDB’ ; Mysql> SELECT @@global.default_storage_engine;

+---+

| @@global.default_storage_engine | +---+

| InnoDB | +---+

1 row in set (0.01 sec)

Le GLOBAL affecte les opérations de tous les clients qui se connecteront. Mais ça n’affecte pas le client courant.

Le LOCAL affecte le client courant.

Exercice

Vérifiez votre quel est votre moteur par défaut.

Créer une BD et une table sans préciser le moteur. Vérifiez qu’elle a été créée avec le moteur par défaut.

Changer de moteur par défaut. Créez une deuxième table. Vérifiez qu’elle a été crée avec le nouveau moteur par défaut.

(32)

3.3 : Les variables d’état du serveur

http://dev.mysql.com/doc/refman/5.0/fr/show-status.html

http://dev.mysql.com/doc/refman/5.0/fr/server-status-variables.html

Le serveur conserve de nombreuses variables d’état qui fournissent des informations concernant ses opérations.

Consultation des valeurs des variables d’état

mysql> Show status

C’est un équivalent à :

shell> mysqladmin extended-status

Consultation de certaines valeurs des variables d’état

mysql> Show status like ‘threads%’;

Remise à zéro des variables d’état

mysql> flush status

Quelques variables d’état du serveur Aborted_clients

Nombre de connexions interrompus parce que le client était mort sans fermer correctement la connexion.

Flush_commands

Nombre de flush exécutés Handler_update

Nombre de mises à jour de la BD Innodb_rows_updated

Nombre de mises à jour de la BD en InnoDB Sort_rows

Nombre de lignes triées.

Threads_connected

Nombre de connexions en cours Threads_created

Nombre maximum de connexions qu’il y a eu.

(33)

Uptime

Durée de fonctionnement du serveur, en secondes.

Uptime_since_flush_status

Durée depuis le dernier flush statut.

(34)

3.4 : Options mysqld en ligne de commande

Présentation

http://dev.mysql.com/doc/refman/5.0/fr/command-line-options.html mysqld est lancé automatiquement par certains scripts dont le « restart ».

Toutefois, en tant qu’administrateur, il faut pouvoir contrôler l’usage direct de « mysqld ».

On peut lancer mysqld, mysql_safe et tous les scripts appelant mysqld avec des options.

Les options de lancement du serveur correspondent pour la plupart aux variables système du serveur.

On liste ici quelques options importantes. Pour plus de détails, il faut se référer au manuel de référence.

Les options se passent avec « -- » suivi du nom complet, ou un « - » suivi de l’initiale.

Quelques options de mysqld - - ansi

utilise la syntaxe standard ANSI au lieu de la syntaxe MySQL. Cette option intègre le

« ONLY_FULL_GROUP_BY »

- - basedir=chemin, -b chemin

Chemin vers le répertoire d’installation.

- - datadir=chemin, -h chemin

Chemin vers le répertoire des données.

- - default-table-type=type

Type de table (c’est-à-dire moteur de stockage) par défaut.

- - language=nom_langue, -L nom_langue

- - log[=fichier], -l chemin [fichier]

Journalise les connexions et les requêtes dans le fichier spécifié. Par défaut : nom_hôte.log est le fichier de log.

Il y a d’autres sorte de fichiers de log. Cf. documentation.

- - skip-grant-tables

Permet de relancer le serveur sans gestion des droits des utilisateurs. Utile quand on a perdu le mot de passe de root !

- - skip-innodb

Désactive le moteur de stockage innodb. Cette option économise de la mémoire et accélère certaines opérations. A utiliser uniquement si on n’a pas de tables innodb.

- - skip-show-database

(35)

Cette option permet de limiter la visibilité des databases aux utilisateurs qui ont les droits.

- - sql-mode=valeur[,valeur …]

Permet de donner une valeur à sql-mode. Cf § suivant.

- - transaction-isolation=niveau

Définit le niveau d’isolation des transactions, qui peut-être READ-UNCOMMITTED, READ- COMMITTED, REPEATABLE-READ ou SERIALIZABLE.

- - tmpdir=chemin, -t chemin

Chemin vers le répertoire des fichiers temporaires.

- - user={nom_utilisateur | id_utilisateur }, -u {nom_utilisateur | id_utilisateur }

Exécuter mysqld sous une identité précisé par un nom ou un id. Cette identité fait référence à un compte de connexion système (linux) et non pas à un utilisateur MySQL.

Cette option est obligatoire quand mysqld est démarré sous l’identité root.

Cf. le chapitre sur la sécurité.

- - version, -V

Affiche les informations sur la version et quitte.

Equivalent à mysqladmin - V

(36)

3.5 : Les modes SQL du serveur : sql-mode

Présentation

Les modes SQL du serveur :

https://dev.mysql.com/doc/refman/5.5/en/sql-mode.html https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html

MySQL inclut des extensions qu’on ne trouve pas dans d’autres bases de données SQL.

Si elles sont utilisées, le code ne sera pas portable vers d’autres serveurs SQL.

La variable « sql-mode » peut prendre plusieurs valeurs qu’on appelle des « modes » et qui paramètrent les caractéristiques du SQL du serveur et qui permettent de mieux gérer la compatibilité entre SGBD.

Les valeurs de sql_mode par défaut Version 5.5 : slq_mode = ‘’

Version 5.6 : sql_mode= ‘NO_ENGINE_SUBSTITUTION’

Version 5.7

mysql> select @@sql_mode;

+---+

| @@sql_mode | +---+

|ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE, |

|NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER, |

|NO_ENGINE_SUBSTITUTION | +---+

Version 8 :

mysql> select @@sql_mode;

+---+

| @@sql_mode | +---+

|ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE, |

|NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION | +---+

Regroupement de modes : ANSI et STRICT_TRANS_TABLES

https://dev.mysql.com/doc/refman/5.5/en/sql-mode.html#sql-mode-important Mysql définit des mots clés regroupant plusieurs « modes ».

ANSI

Equivalent à :

REAL_AS_FLOAT, PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, ONLY_FULL_GROUP_BY, ANSI

Le mode ANSI contient un ONLY_FULL_GROUP_BY STRICT_TRANS_TABLES

Equivalent à un ensemble de mode élémentaires.

(37)

Pour gérer un environnement transactionnel de type InnoDB.

Le mode STRICT_TRANS_TABLES ne contient pas de ONLY_FULL_GROUP_BY ONLY_FULL_GROUP_BY

Le mode ONLY_FULL_GROUP_BY n'autorise pas les requêtes dont la clause GROUP BY fait référence à une colonne qui n'est pas sélectionnée. C’est la situation standard du SQL (Toutefois ce mode est une nouveauté en MySQL 4.0.0.)

Sans ONLY FULL GROUP BY, on peut écrire :

SELECT O.NO, L.editeur, count(*) FROM Livres L

JOIN OEuvres O on O.NO=L.NO GROUP BY O.NO;

Ce qui ne veut rien dire.

Il aurait fallu écrire par exemple :

SELECT O.NO, count(*) FROM Livres L

JOIN OEuvres O on O.NO=L.NO GROUP BY O.NO;

A noter qu’on peut aussi écrire légitimement (avec un ONLY_FULL_GROUP_BY) :

SELECT O.NO, O.auteur, count(*) FROM Livres L

JOIN OEuvres O on O.NO=L.NO GROUP BY O.NO;

O.auteur n’est pas un attribut du GROUP BY mais le serveur se charge de savoir qu’il dépend fonctionnellement de O.NO : on peut donc le projeter sans risque d’incohérence.

Standardisation de MySQL : exécution en mode ONLY_FULL_GROUP_BY En paramétrant le fichier de configuration

[mysqld]

sql_mode=ONLY_FULL_GROUP_BY

On démarrant le serveur avec une option

shell> mysqld --ansi

C’est équivalent à :

--transaction-isolation =SERIALIZABLE

--sql-mode=REAL_AS_FLOAT, PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, ONLY_FULL_GROUP_BY

En paramétrant le client ou le serveur pendant qu’ils fonctionnent

La plupart des paramètres de mysqld (options de démarrage) peuvent être définis sans arrêter le serveur en modifiant des variables du système.

Ø Solution 1 :

Mysql> SELECT @@global.sql_mode ; +---+

| @@global.sql_mode |

(38)

+---+

| | +---+

Mysql> SET GLOBAL sql_mode = ‘ONLY_FULL_GROUP_BY’ ; Mysql> SET LOCAL sql_mode = ‘ONLY_FULL_GROUP_BY’ ; mysql> SELECT @@global.sql_mode ;

+---+

| @@global.sql_mode | +---+

| ONLY_FULL_GROUP_BY | +---+

Le GLOBAL affecte les opérations de tous les clients qui se connecteront. Mais ça n’affecte pas le client courant.

Le LOCAL affecte le client courant.

Ø Solution 2 :

On ajoute le ONLY_FULL_GROUP_BY à l’existant

set @@sql_mode = concat( @@sql_mode, ',ONLY_FULL_GROUP_BY');

set @@global.sql_mode =

concat( @@global.sql_mode, ',ONLY_FULL_GROUP_BY');

A noter la présence d’une virgule comme séparateur et le fait que le ONLY_FULL_GROUP_BY se retrouve à la fin.

A noter aussi que si l’ancien sql_mode contient déjà un ONLY_FULL_GROUP_BY, alors ça ne change rien.

Exercices

Testez les requêtes proposées.

Faîtes marcher la première requête.

Faites-en sorte que la première requête ne fonctionne plus.

(39)

4 - MYSQLADMIN ET CALCULETTE MYSQL

4.1 : Mysqladmin

https://dev.mysql.com/doc/refman/5.5/en/mysqladmin.html

Présentation

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.

Syntaxe

La syntaxe de mysqladmin est :

shell> mysqladmin [OPTIONS] command [command-option] command ...

Commandes

Le mysqladmin actuel supporte les commandes suivantes : shutdown

Eteint le serveur.

ping

Vérifie si mysqld fonctionne ou pas.

version

Affiche la version du serveur.

password new-password

Spécifie un nouveau mot de passe. Modifie l'ancien mot de passe en new-password pour le compte que vous utilisez lors de la connexion avec mysqladmin.

create databasename

Crée une nouvelle base.

drop databasename

Efface une base et toutes ces tables.

variables

Affiche les variable disponibles.

extended-status

Affiche un message de statut du serveur très complet.

flush-hosts

(40)

Vide tous les hôtes mis en cache.

flush-logs

Vide de la mémoire tous les logs.

flush-privileges

Recharger les tables de droits (identique à la commande reload).

flush-status

Remet à zéro les variables de statut.

flush-tables

Vide de la mémoire toutes les tables.

flush-threads

Vide les threads de cache. Nouveau en MySQL 3.23.16.

kill id, id,...

Termine un thread MySQL.

processlist

Affiche la liste des processus du serveur. Cela revient à la commande SHOW PROCESSLIST.

Si --verbose est utilisé, le résultat est le même que SHOW FULL PROCESSLIST.

reload

Recharge les tables de droits.

refresh

Vide de la mémoire toutes les tables, puis ferme et réouvre les fichiers de logs.

slave-start

Démarre l'esclave de réplication.

status

Affiche le message de statut court du serveur.

slave-stop

Eteint l'esclave de réplication.

(41)

4.2 : La calculette mysql

https://dev.mysql.com/doc/refman/5.5/en/mysql.html

Présentation

La calculette mysql est l’utilitaire qui permet d’exécuter toutes les commandes SQL.

Syntaxe

La syntaxe de mysql est :

shell> mysql [dbname] [–option] [-option] [...]

dbname pour se connecter directement à une base de données (équivalent d’un USE).

Options

-u username ou --user=username

spécifier le nom d’utilisateur

-p pwd ou --password=pwd

spécifier le nom d’utilisateur

-h hote ou --host=hote

spécifier le nom de l’hôte du serveur

-? ou --help

afficher l’aide -t

résultats sous forme de tableau (défaut) -H

résultats sous forme de tableau HTML -X

résultats en XML -E

résultats sous forme verticale (liste : mode « \G » par défaut) -B

version « batch » : il n’y a de résultats que pour les « select ». Les résultats sont des tableaux avec tabulations entre les champs.

database

mysql se connecte directement dans la database (fait un use database).

(42)

> toto.txt

idem que le précédent, mais les résultats des « select » vont dans le fichier toto.txt qu’on pourra ouvrir avec EXCEL.

< toto.txt

exécute le contenu du fichier dans myql

-e « requête »

exécute une requête et quitte mysql

Utiliser un fichier contenant des commandes, produire des résultats dans un fichier Dans l’OS:

C :> mysql dbname < fichier.sql –u user –p

La commande exécute les commandes contenues dans le fichier puis quitte mysql.

Mysql rentre directement dans la BD dbname.

Les résultats s’affiche à l’écran

On peut aussi renvoyer les résultats dans un fichier :

C :> mysql dbname < fichier.sql >resultat.txt –u user –p

A partir de mysql :

mysql> source fichier.sql

ou bien

mysql> \. fichier.sql

Exercice

Chargez la BD BiblioInnoDB.

Ecrivez un script qui fait un select des livres avec les œuvres.

En ligne de commande, récupérer le résultat du scipt dans un fichier « résultat.txt ».

Exporter les données à partir de MySQL : SELECT … INTO OUTFILE

mysql> SELECT * INTO OUTFILE ‘c:/dept.csv’

fields terminated by ‘,’

FROM dept;

Le fichier sera un .csv exploitable sous Excel, par exemple.

Chemin absolu

mysql> SELECT * INTO OUTFILE ‘c:/dept.csv’

fields terminated by ‘,’

FROM dept;

Chemin relatif : DATADIR

mysql> SELECT * INTO OUTFILE ‘./dept.csv’

fields terminated by ‘,’

FROM dept;

(43)

Chemin relatif : DATADIR / BDused

mysql> SELECT * INTO OUTFILE ‘dept.csv’

fields terminated by ‘,’

FROM dept;

Exercice

Chargez la BD BiblioInnoDB.

Exporter un select des livres avec les œuvres dans un fichier csv appelé livres.csv. Ouvrez le avec Excel ou un équivalent.

Importer les données à partir de MySQL : LOAD DATA INFILE

mysql> LOAD DATA INFILE ‘c:/dept.csv’ INTO TABLE dept fields terminated by ‘,’;

http://dev.mysql.com/doc/refman/5.0/fr/load-data.html

On peut importer des données en précisant le format de séparation des champs.

Par exemple: les fichiers “csv” produit par Excel utilisent la virgule comme séparateur.

Attention :

La table correspondant au fichier importé doit avoir le même schéma que celle dans laquelle les tuples sont insérés.

Chemin absolu

mysql> LOAD DATA INFILE ‘c:/dept.csv’ INTO TABLE dept fields terminated by ‘,’;

Chemin relatif : DATADIR

mysql> LOAD DATA INFILE ‘./dept.csv’ INTO TABLE dept fields terminated by ‘,’;

Chemin relatif : DATADIR / BDused

mysql> LOAD DATA INFILE ‘dept.csv’ INTO TABLE dept fields terminated by ‘,’;

Chemin relatif : DATADIR / BD au choix

mysql> LOAD DATA INFILE ‘./empdept/dept.csv’ INTO TABLE dept fields terminated by ‘,’;

Avec les options REPLACE ou IGNORE, quand une donnée rentre avec une clé primaire existant déjà, elle remplacera l’ancienne ou elle sera ignorée. Sinon, l’opération s’arrête en erreur.

LOAD DATA INFILE ‘nomFichier’ REPLACE INTO TABLE nomTableOUTFILE

(44)

5 - MYSQLDUMP - SAUVEGARDE

C:\ mysql dump

https://dev.mysql.com/doc/refman/5.5/en/mysqldump.html https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html

Mysqldump est une commande qui permet de produire le code SQL permettant de recréer entièrement la BD.

Trois usages de mysqldump Ø Sauvegarder des BD

C:\ mysqldump [options] --databases DB1 [DB2 DB3...]

Ø Sauvegarder toutes les BD

C:\ mysqldump [options] --all-databases

Affichage à l’écran ou redirection dans un fichier

C:\ mysqldump –uroot –p nomBD

La commande affiche le code SQL de la BD nomBD.

C:\ mysqldump –uroot –p nomBD > nomFichier

La commande écrit le code SQL de la BD nomBD dans le fichier nomFichier.

Usage courant de MYSQLDUMP pour sauvegarder et recharger une BD Commande usuelle de sauvegarde d’une BD :

C:\ mysqldump --opt nomBD > backupFile.sql

L’option --opt inclut l’option --quick et l’option --lock-tables, entre autres.

Pour recharger le fichier de sauvegarde :

C:\ mysql nomBD < backupFile.sql

Usage courant de MYSQLDUMP pour sauvegarder toutes les BDs Commande usuelle de sauvegarde de toutes les BD :

C:\ mysqldump --opt --all-databases > allBD.sql

Pour recharger le fichier de sauvegarde de toutes les BD :

C:\ mysql < allBDql

Usage spécial de MYSQLDUMP : ne sauvegarder que le schéma de la BD -- no-data

Exercice

(45)

Chargez la BD biblio MyISAM et faites un DUMP de la BD avec les données, puis un DUMP de la seule structure.

Chargez la BD biblio InnoDB et faites un DUMP de toutes les BD.

(46)

6 - LA COMMANDE SHOW

META-BASE

SHOW TABLE STATUS [FROM nomBD]

Donne des informations sur toutes les tables d’une BD.

Exercice

Chargez la BD biblio et faites un show table status dessus.

DDL

SHOW DATABASES [LIKE …]

SHOW CREATE DATABASE nomBD SHOW TABLES

SHOW CREATE TABLE nomTable

SHOW COLUMNS FROM nomTable ó DESC nomTable SHOW INDEX FROM nomTable

VARIABLES SYSTEME

SHOW STATUS [ LIKE …]

SHOW VARIABLES [LIKE …]

SHOW [FULL] PROCESSLIST

https://dev.mysql.com/doc/refman/5.5/en/kill.html KILL CONNECTION id : pour arrêter une connection.

KILL QUERY id : pour arrêter les traitement d’une connection.

Exercice

Démarrez un serveur. Ouvrez 3 clients. Consulter les processus dans un client. Arrêtez un client avec un kill connection.

Chargez la BD biblio et faites un show table status dessus.

DROITS

SHOW GRANTS FOR user SHOW PRIVILEGES

CARACTERES

SHOW CHARACTER SET SHOW COLLATION MOTEUR

SHOW ENGINES

(47)

DEBOGAGE

SHOW ERRORS SHOW WARNINGS

(48)

7 – STOCKAGE ET MOTEURS DE STOCKAGE

7.1 : Consultation des données sur le disque

Principes

Selon le moteur choisi, MySQL enregistre différemment les données sur le disque.

Quel que soit le moteur, on trouve dans le datadir : Des dossiers qui correspondent aux BDs.

Dans les dossiers on trouve en MyISAM un fichier .MYD (MYData), un fichier .MYI (MYIndex) et un troisième ficher qui décrit la structure de la table (.frm, .sdi etc.)

En InnoDB, on ne trouve dans les répertoires que le fichier qui décrit la structure de la table.

Dans le datadir, on trouve aussi des gros fichiers dans lesquels les données sont organisées essentiellement en InnoDB (ib_logfile0, undo_001, ib_data1, etc.).

L’organisation est variable selon les versions.

Il faut éviter de toucher à ces données directement si on veut éviter de bloquer la BD.

Exercices

Chargez la BD biblioMyISAM et regardez le résultat dans le datadir.

Chargez la BD biblioMyInnoDB et regardez le résultat dans le datadir.

Comparez les résultats.

7.2 : Les différents moteurs de stockage

https://dev.mysql.com/doc/refman/5.5/en/storage-engines.html https://dev.mysql.com/doc/refman/5.6/en/storage-engines.html https://dev.mysql.com/doc/refman/5.7/en/storage-engines.html https://dev.mysql.com/doc/refman/8.0/en/storage-engines.html

Présentation

MySQL supporte plusieurs moteurs de stockage, qui gère différents types de tables.

Le moteur de tables originale était ISAM. Ce moteur a été remplacé par le moteur MyISAM.

• Le moteur MyISAM est une version améliorée de ISAM.

• Le moteur MEMORY (anciennement appelé HEAP) propose des tables stockées en mémoire.

• Le moteur MERGE permet le regroupement de tables MyISAM identiques sous la forme d'une seule table.

Ces trois moteurs sont non transactionnels.

Références

Documents relatifs

Avec le Programme départemental d’insertion 2021-2023, ActivitY’ et l’ensemble des membres du Groupement d’intérêt public s’engagent à proposer aux personnes éloignées

Insérez un trait comme sur la photo ci-dessous pour faire un panneau d'affichage, réglez la taille du trait en épaisseur 6, rajoutez lui de l'effet biseau, puis passez l'image

CREATE Serveur 2 : BD, Table Création (toutes les créations possible) DROP Serveur 2 : BD, Table Destruction de bases ou de tables ALTER Serveur 3 : Table

Dans le client 1, démarrez une transaction et ajoutez un tuple 10 dans la BD test sans faire de commit!. Affichez les tuples de la BD test dans les

Dans la grille, faites glisser le pointeur pour sélectionner le nombre de colonnes et de lignes à créer dans le tableau, puis relâchez le bouton de la souris.. Pour

Après la 9 ème année du secondaire, la Grande-Bretagne a mis en place une à deux semaines d’expériences pro- fessionnelles, les États-Unis des stages de travail dans les années

Cohérence : Comme pour le SELECT , dans la condition du HAVING doivent apparaître soit des attributs du GROUP BY ou qui sont identiques pour chaque élément du groupe, soit des

Lors de la journée de lancement du PTLI sur le SDSeI du Haut-Béarn, et à partir des éléments énoncés dans le portrait de territoire, les participants ont pu échanger de