• Aucun résultat trouvé

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

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]

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.

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 à :

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.

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

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;

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

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.

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.

Uptime

Durée de fonctionnement du serveur, en secondes.

Uptime_since_flush_status

Durée depuis le dernier flush statut.

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

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 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

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 |

|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.

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 |

+---+

| | +---+

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.

Documents relatifs