MySQL

Un article de WindowsLinux.net - Astuces pour Windows et Linux !.

Sommaire

Installation

L'installation sous Debian se fait très simplement :

aptitude install mysql-server-5.0


Un script très intéressante se trouve alors à cet emplacement :

/usr/bin/mysql_secure_installation

Vérifier la version installée

Vous pouvez afficher la version de MySQL avec la commande suivante :

# mysql -V
mysql  Ver 14.12 Distrib 5.0.51a, for debian-linux-gnu (i486) using readline 5.2



Pour visualiser l'état de fonctionnement de la base de données

# /etc/init.d/mysql status
/usr/bin/mysqladmin  Ver 8.41 Distrib 5.0.32, for unknown-linux-gnu on arm
Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL license

Server version          5.0.32-Debian_7etch5-log
Protocol version        10
Connection              Localhost via UNIX socket
UNIX socket             /var/run/mysqld/mysqld.sock 
Uptime:                 10 days 3 hours 34 min 59 sec 

Threads: 1  Questions: 471  Slow queries: 0  Opens: 142  Flush tables: 1  Open tables: 24  Queries per second avg: 0.001.


Comment démarrer/arrêter/redémarrer une base de données

  • Dans le cas d'une base de données classique :
# /etc/init.d/mysql (start|stop|restart|reload|force-reload)
  • Dans le cas d'un noeud de cluster :
# /etc/init.d/mysql-ndb (start|stop|restart|reload|force-reload)
  • Dans le cas d'un médiateur de cluster :
# /etc/init.d/mysql-ndb-mgm (start|stop|restart|reload|force-reload)

Fichiers de configuration

Tous les fichiers se trouvent dans le dossier /etc/mysql :

  • debian.cnf : fichier de configuration généré automatiquement par Debian, contient le login de l'utilisateur système Debian dans MySQL ainsi que son mot de passe. Cet utilisateur permet à Debian de faire la maintenance des bases de MySQL.

Exemple :

Automatically generated for Debian scripts. DO NOT TOUCH!
[client]
host     = localhost
user     = debian-sys-maint
password = XXXXXXXXXXXXXXXX
socket   = /var/run/mysqld/mysqld.sock


  • debian-log-rotate.conf : Définit la quantité de fichiers de logs à stocker.

Exemple :

KEEP_BINARY_LOGS=2


  • debian-start : Script qui contient la liste des opérations de maintenance à effectuer lors du démarrage de MySQL.

Exemple :

#!/bin/bash
 #
 # This script is executed by "/etc/init.d/mysql" on every (re)start.
 #
 # Changes to this file will be preserved when updating the Debian package.
 #
 
 source /usr/share/mysql/debian-start.inc.sh
 
 MYADMIN="/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf"
 MYCHECK="/usr/bin/mysqlcheck --defaults-file=/etc/mysql/debian.cnf"
 MYCHECK_SUBJECT="WARNING: mysqlcheck has found corrupt tables"
 MYCHECK_PARAMS="--all-databases --fast --silent"
 
 # Put commands in the background if they should not block the server start.
 (
   mycheck;
 ) &
 
 exit 0


  • my.cnf : Tous les paramètres de configuration de MySQL comme les ports/sockets d'écoute, les interfaces réseaux autorisées, le tuning de la base, l'emplacement des logs et des fichiers de base de données... Enfin, ce fichier définit si le serveur MySQL est un noeud de cluster ou un le maître du cluster. Les commentaires dans ce fichier sont assez détaillés.

Exemple :

#
 # The MySQL database server configuration file.
 #
 # You can copy this to one of:
 # - "/etc/mysql/my.cnf" to set global options,
 # - "/var/lib/mysql/my.cnf" to set server-specific options or
 # - "~/.my.cnf" to set user-specific options.
 # 
 # One can use all long options that the program supports.
 # Run program with --help to get a list of available options and with
 # --print-defaults to see which it would actually understand and use.
 #
 # For explanations see
 # http://dev.mysql.com/doc/mysql/en/server-system-variables.html
 
 # This will be passed to all mysql clients
 # It has been reported that passwords should be enclosed with ticks/quotes
 # escpecially if they contain "#" chars...
 # Remember to edit /etc/mysql/debian.cnf when changing the socket location.
 [client]
 port		= 3306
 socket		= /var/run/mysqld/mysqld.sock
 
 # Here is entries for some specific programs
 # The following values assume you have at least 32M ram
 
 # This was formally known as [safe_mysqld]. Both versions are currently parsed.
 [mysqld_safe]
 socket		= /var/run/mysqld/mysqld.sock
 nice		= 0
 
 [mysqld]
 #
 # * Basic Settings
 #
 user		= mysql
 pid-file	= /var/run/mysqld/mysqld.pid
 socket		= /var/run/mysqld/mysqld.sock
 port		= 3306
 basedir		= /usr
 datadir		= /var/lib/mysql
 tmpdir		= /tmp
 language	= /usr/share/mysql/english
 skip-external-locking
 #
 # For compatibility to other Debian packages that still use
 # libmysqlclient10 and libmysqlclient12.
 old_passwords	= 1
 #
 # Instead of skip-networking the default is now to listen only on
 # localhost which is more compatible and is not less secure.
 bind-address		= 127.0.0.1
 #
 # * Fine Tuning
 #
 key_buffer		= 16M
 max_allowed_packet	= 16M
 thread_stack		= 128K
 #
 # * Query Cache Configuration
 #
 query_cache_limit	= 1048576
 query_cache_size        = 16777216
 query_cache_type        = 1
 #
 # * Logging and Replication
 #
 # Both location gets rotated by the cronjob.
 # Be aware that this log type is a performance killer.
 #log		= /var/log/mysql.log
 #log		= /var/log/mysql/mysql.log
 #
 # Error logging goes to syslog. This is a Debian improvement :)
 #
 # Here you can see queries with especially long duration
 #log-slow-queries	= /var/log/mysql/mysql-slow.log
 #
 # The following can be used as easy to replay backup logs or for replication.
 #server-id		= 1
 log-bin			= /var/log/mysql/mysql-bin.log
 # See /etc/mysql/debian-log-rotate.conf for the number of files kept.
 max_binlog_size         = 104857600
 #binlog-do-db		= include_database_name
 #binlog-ignore-db	= include_database_name
 #
 # * BerkeleyDB
 #
 # According to an MySQL employee the use of BerkeleyDB is now discouraged
 # and support for it will probably cease in the next versions.
 skip-bdb
 #
 # * InnoDB
 #
 # InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.
 # Read the manual for more InnoDB related options. There are many!
 #
 # * Security Features
 #
 # Read the manual, too, if you want chroot!
 # chroot = /var/lib/mysql/
 #
 # If you want to enable SSL support (recommended) read the manual or my
 # HOWTO in /usr/share/doc/mysql-server/SSL-MINI-HOWTO.txt.gz
 # ssl-ca=/etc/mysql/cacert.pem
 # ssl-cert=/etc/mysql/server-cert.pem
 # ssl-key=/etc/mysql/server-key.pem
 
 
 
 [mysqldump]
 quick
 quote-names
 max_allowed_packet	= 16M
 
 [mysql]
 #no-auto-rehash	# faster start of mysql but no tab completition
 
 [isamchk]
 key_buffer		= 16M
 
 #
 # * NDB Cluster
 #
 # See /usr/share/doc/mysql-server-*/README.Debian for more information.
 #
 # The following configuration is read by the ndbd storage daemons,
 # not from the ndb_mgmd management daemon.
 #
 # [MYSQL_CLUSTER]
 # ndb-connectstring=127.0.0.1


Localisation physique des données

  1. Déterminer la localisation dans l'arborescence système des bases de données à partir du fichier de configuration. Par exemple pour MySQL, il se situe dans /var/lib/mysql
  2. Taper :
# mount

pour connaître le point de montage des partitions.

Exemple :

/dev/md0 on / type reiserfs (rw,notail)
/dev/sda6 on /home type ext3 (rw)
  • Si le fichier du périphérique commence par /dev/md, alors il s'agit d'une partition en RAID software. Pour connaître la localisation physique des fichiers, il faut regarder le fichier : /etc/mdadm/mdadm.conf

Exemple :

DEVICE partitions
ARRAY /dev/md0 level=raid1 num-devices=2 UUID=8402604e:5b65bb45:f6c894f0:906c8b43
  devices=/dev/hda1,/dev/hdd1
MAILADDR example@example.com

Dans cet exemple, on peut voir que /dev/md0 est un RAID réparti entre deux partitions, hda1 et hdd1. L'adresse de l'administrateur à avertir en cas de défaillance d'une des deux partitions est également indiqué.

  1. La commande :
# df -h

affiche l'espace disponible pour chaque partition

Exemple :

Sys. de fich.         Tail. Occ. Disp. %Occ. Monté sur
/dev/md0              186G  163G   23G  88% /
/dev/sda6             9,2G  1,7G  7,1G  20% /home

Cette commande :

# du -hs /var/lib/mysql/*

affiche des informations précises sur la taille de chaque fichier.

Interfaces de connexion à la base de données

Web

  • PhpMyAdmin est l'interface web la plus utilisée pour gérer une base de données MySQL.

Graphique

MySQL Administrator

Charge de la base de données

Connaître la charge moyenne d'une base de données permet d'anticiper la montée en charge et la migration de la base de données vers un nouveau serveur ou un cluster de serveurs. Le logiciel Nagios fournit une interface web afin d'afficher un état détaillé du serveur. Il permet également d'envoyer une alerte mail ou SMS à l'administrateur système en cas de panne ou de saturation du serveur.

MySQL

  • MySQLAR est un logiciel qui génère des courbes à partir de l'activité du serveur MySQL, très utile pour auditer des engorgements dans le temps. (Site officiel | Démonstration)

Logs

Les logs sont des fichiers textes qui contiennent tout ce qui se passe dans le logiciel. Ces fichiers sont importants pour détecter et localiser une panne.

Les logs des distributions linux sont dans le dossier : /var/log Le fichier de log le plus important est : /var/log/syslog

  • /var/log/mysql.log contient toutes les erreurs autour du serveur MySQL. C'est le premier fichier à regarder quand le serveur ne MySQL démarre pas.

Il est possible d'activer des logs pour sauvegarder toutes les requêtes, les modifications dans les tables ou pour identifier les requêtes les plus lentes. (Détails sur les types de logs)

Sauvegardes

  1. à chaud :

La procédure recommandée pour sauvegarder est :

# mysqldump --tab=/emplacement/du/fichier.sql --opt nom_bdd

Ceci génère un fichier SQL de la base de données qui est facile à compresser et à sauvegarder. (Documentation détaillée)

  1. à froid :

Sauvegarder le dossier où MySQL stocke ses bases de données. (Généralement /var/lib/mysql)

Restauration

Si la sauvegarde a été effectuée à chaud :

# mysql < nom_du_fichier.sql

Sinon : Arrêter le serveur, et copier la sauvegarde dans le dossier de travail MySQL, puis démarrer le serveur.



Réplication MySQL

La procédure décrite ci-dessous explique la mise en place d'une sauvegarde de l'intégralité d'un serveur MySQL avec une mise à jour automatique entre les deux serveurs.

De nombreuses informations sont disponibles ici : http://dev.mysql.com/doc/refman/5.0/fr/replication-howto.html

Pré-requis

  • Deux serveurs MySQL.
  • Un compte root MySQL pour chaque serveur.
  • Accès ssh.
  • Adresse IP ou nom d’hôte du maitre MySQL.


Le Maitre est le serveur à sauvegarder, l'Esclave est le serveur de sauvegarde.

Préparation du Maitre

Il faut :

  • Un compte de réplication (à créer), ayant l'autorisation de connexion afin d'obtenir les mises à jour.
  • Modifier la configuration du serveur.
  • Faire une sauvegarde complète des données à un instant T connu.
  • Sauvegarder le fichier de configuration debian.cnf.

Création du compte de réplication

Cette étape peut être fait avec PHPMyAdmin, ou en ligne de commande (console mysql).


Concernant PHPMyAdmin, la gestion des comptes via le lien Privilèges.


On accède tout à la console MySQL de la manière suivante :

maitre:~# mysql -u root -p

Puis saisissez votre mot de passe.


Pour information :

  • % désigne le host.
  • % désigne aussi les bases de données.
  • Utilisation de REPLICATION SLAVE pour les privilèges de l'utilisateur de réplication.


En utilisant ces paramètres :

  • le compte de réplication peut accéder à l'ensemble des bases de données.
  • depuis n'importe quelle machine.


Afin de définir l'IP du serveur Esclave, ou de définir les bases sauvegardées, reportez vous à la documentation MySQL sur le site officiel .


Ensuite il faut saisir :

CREATE USER 'esclave'@ '%' IDENTIFIED BY '***';

GRANT REPLICATION SLAVE ON * . * TO 'esclave'@ '%' IDENTIFIED BY '***' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;

GRANT ALL PRIVILEGES ON `esclave_%` . * TO 'esclave'@ '%';


Vérification de la configuration

Vérifier que les paramètres suivants sont présents dans le fichier :

/etc/mysql/my.cnf
[mysqld]
log-bin
server-id=master_id


Le master_id est un entier compris entre 1 et 2^32 − 1.


Si ces informations ne sont pas présentes, et qu'elles sont ajoutées, il faut relancer (ou arrêter et lancer) MySQL :

/etc/init.d/mysql stop
/etc/init.d/mysql start


Exporter les données

La réplication ne se fait que si :

  • Il existe un référentiel de temps commun.
  • Une copie des données exactes à cet instant T.


Pour réaliser cette copie, il existe plusieurs solutions. Ici encore la documentation officielle de MySQL vous guidera dans les choix.


Quelque soit votre configuration MySQL (Myisam, innodb, ...) cette solution, bien que lente, devrait fonctionner :

ServeurMaitre:~# mysqldump -u root -p --all-databases --master-data > export.sql

--all-databases indique une copie de toutes les bases du serveur.


--master-data exporte aussi le référentiel temps au moment de la copie, de plus il verrouille les bases le temps de la sauvegarde.

Utilisateur(s) (Debian)

Toute la base sera copiée, y compris les données présentes dans la table mysql. Cette base contiens les paramètres des comptes.


Pour éviter toute erreur, il faut copier le fichier /etc/mysql/debian.cnf .

Configuration de l'Esclave

La configuration de l'Esclave se fait en plusieurs étapes :

  • Importer les données du Maitre vers l'Esclave.
  • Mise à jour du fichier debian.cnf.
  • Indiquer l’adresse du Maitre.
  • Lancer la synchronisation.

Importer

Importez les données en ligne de commande :

Esclave:~# mysql -u root -p < dump.sql

Utilisateur(s) (Debian)

Toutes les données du MySQL Exclave sont remplacées, il font donc aussi remplacer les paramètres de connexion MySQL utilisés par Debian.


Copiez debian.cnf depuis le Maitre vers l'Esclave.

Puis relancez MySQL :

Esclave:~# /etc/init.d/mysql stop
Esclave:~# /etc/init.d/mysql start


Configuration de l'Esclave

Il faut :

  • Donner à l'Esclave un identifiant serveur différent du Maitre dans /etc/mysql/my.cnf
  • Indiquer la localisation du Maitre.


Pour changer l'identifiant :

Esclave:~# vi /etc/mysql/my.cnf
[mysqld]
server-id=slave_id


slave_id doit être un entier compris entre 1 et 2^32−1, et différent de l'ID du Maitre.


Depuis la ligne de commande MySQL lancée ainsi :

Esclave:~# mysql -u root -p

Nous indiquons les paramètres de connexion :

CHANGE MASTER TO
       MASTER_HOST='nom d'hôte du maitre ou IP',
       MASTER_USER='compte esclave',
       MASTER_PASSWORD='mot de passe'


Les paramètres de synchronisation MASTER_LOG_FILE et MASTER_LOG_POS ont déjà été sauvegardé lors de l’importation, pour plus d'informations lisez la documentation officielle.

Synchronisation

A cette étape, le Maitre est prêt à transmettre ses mises à jours à l'Esclave, depuis l'instant T.


La synchronisation se fait à l'aide de :

START SALVE;

Le contrôle du comportement du serveur peut se faire par la lecture du fichier système :

Esclave:~# tail -f -n 50 /var/log/syslog
<date> Esclave mysqld[3600]: <date> [Note] Slave SQL thread initialized, starting replication in log 'mysql-bin.XYZ' at position ABCD, relay log './mysqld-relay-bin.000001' position: 4
<date> Esclave mysqld[3600]: <date> [Note] Slave I/O thread: connected to master 'Esclave@hote.maitre.tld:3306',  replication started in log 'mysql-bin.XYZ' at position ABCD


N'hésitez pas à lire la documentation officielle en cas d'erreurs.

Commandes utiles

Voici quelques commandes utiles :

mysql> SHOW MASTER STATUS
mysql> SHOW SLAVE STATUS
mysql> SHOW MASTER LOGS

Scripts utiles

Script de nettoyage des logs sur le serveur esclave (source : Zataz.net ) :

#!/usr/bin/php
 <?php
 
 # mysql-reset-master-replication-log.php
 
 $master_quota = 3;
 exec("mysqladmin flush-logs");
 
 $dbh = mysql_connect("localhost", "root", "passwd") or die(mysql_error($dbh));
 $resp = mysql_query("SHOW MASTER STATUS;", $dbh) or die(mysql_error($dbh));
 $row = mysql_fetch_assoc($resp);
 
 if (preg_match("/^([^\.]+)\.(\d+)$/", $row["File"], $matches))
 {
        $fileprefix = $matches[1];
        $filesufix = $matches[2];
 
        $delind = $filesufix - $master_quota;
        if ($delind > 0)
        {
                while (strlen($delsufix.$delind) < strlen($filesufix))
                        $delsufix .= "0";
                $delsufix .= $delind;
                $logfilename = "$fileprefix.$delsufix";
                echo "Delete binary logs up to $logfilename\n";
                mysql_query("PURGE MASTER LOGS TO '$logfilename';", $dbh) or die(mysql_error($dbh));
        }
        else
                echo "No binary logs to delete\n";
 }
 ?>

Requêtes / Syntaxes utiles

Mise en forme des informations avec export dans un fichier

SELECT `username` , `password`
FROM `UsersTable`
INTO OUTFILE/tmp/fichierDetravail.txt’
FIELDS TERMINATED BY ‘:’
LINES TERMINATED BY ‘\n’

JOIN

Voici un exemple de ce que la commande JOIN peut faire.


Tout d'abord, on crée une table t1 et une table t2, avec différentes informations.

CREATE TABLE t1 ( a INT );
CREATE TABLE t2 ( b INT );
INSERT INTO t1 VALUES (1), (2), (3);
INSERT INTO t2 VALUES (2), (4);

Ensuite effectuons ces requêtes :

SELECT * FROM t1 INNER JOIN t2 ON t1.a = t2.b;
SELECT * FROM t1 CROSS JOIN t2;
SELECT * FROM t1 LEFT JOIN t2 ON t1.a = t2.b;
SELECT * FROM t2 LEFT JOIN t1 ON t1.a = t2.b;

Les deux premiers SELECTs sont, pour la compréhension, écris d'une manière ancienne :

SELECT * FROM t1, t2 WHERE t1.a = t2.b;
SELECT * FROM t1, t2;


L'utilisation d'INNER JOIN produit un résultat qui affiche seulement les commandes qui ont un résultat donné, dans les deux tables (t1 et t2), pour des conditions spécifiques.

SELECT * FROM t1 INNER JOIN t2 ON t1.a = t2.b;
 ------ ------ 
| a    | b    |
 ------ ------ 
|    2 |    2 |
 ------ ------ 
1 row IN SET (0.00 sec)

L'utilisation de CROSS JOIN produit un résultat dans lequel chaque colonne dans une table est fusionnée à chaque colonne dans l'autre table, ceci est aussi nommé "produit cartésien".

SELECT * FROM t1 CROSS JOIN t2;
 ------ ------ 
| a    | b    |
 ------ ------ 
|    1 |    2 |
|    2 |    2 |
|    3 |    2 |
|    1 |    4 |
|    2 |    4 |
|    3 |    4 |
 ------ ------ 
6 rows IN SET (0.00 sec)


L'utilisation de LEFT JOIN, produit un résultat avec toutes les informations contenues dans la table de gauche (left, ici t1). Les valeurs contenues dans la colonne de l'autre table (t2) dépend de la présence ou non de résultats dans celle-ci. Si aucun résultat n'est trouvé, le résultat retourné est NULL.


SELECT * FROM t1 LEFT JOIN t2 ON t1.a = t2.b;
 ------ ------ 
| a    | b    |
 ------ ------ 
|    1 | NULL |
|    2 |    2 |
|    3 | NULL |
 ------ ------ 
3 rows IN SET (0.00 sec)


SELECT * FROM t2 LEFT JOIN t1 ON t1.a = t2.b;
 ------ ------ 
| b    | a    |
 ------ ------ 
|    2 |    2 |
|    4 | NULL |
 ------ ------ 
2 rows IN SET (0.00 sec)


Source : http://hashmysql.org/


Pour faire des requêtes "correctes" avec les versions récentes de MySQL (voir un peu "meilleures"), reportez vous à cet article : http://hashmysql.org/index.php?title=Comma_vs_JOIN

Serveur de base de données.

Changer le mot de passe root

Si vous avez oublié votre mot de passe de l'utilisateur root de MySQL, voici la procédure à suivre pour le changer.

Tout d'abord il faut arrêter le serveur MySQL :

/etc/init.d/mysql stop

Puis il faut lancer le serveur avec l'option skip-grant-tables pour désactiver les logins/pass, et skip-networking pour éviter les connexions TCP/IP.

ATTENTION : Avec ces options, n'importe quelle personne se connectant à l'aide des sockets aura un accès total à la base ! Il ne faut pas laisser le serveur s'exécuter dans ce mode.


Voici la commande à taper :

/usr/sbin/mysqld --skip-grant-tables  --skip-networking --user=root &

Une fois ceci effectué, connectez vous à mysql en ligne de commande :

mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 330933
Server version: 5.0.38

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>'

Sélectionnez la base mysql ou sont inscrit les tables des privilèges :

mysql> USE mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed


Tapez ensuite la commande suivante en remplaçant "MotDePasse" par celui souhaité :

mysql> UPDATE user
    -> SET password=password("MotDePasse")
    -> WHERE user="root";
Query OK, 2 rows affected (0.00 sec)
Rows matched: 2  Changed: 2  Warnings: 0

Appliquez les changements de privilèges :

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

Sortez du client mysql:

mysql> exit

Redémarrez le serveur :

/etc/init.d/mysql restart


Affichage

Afficher le status

mysql> status
--------------
mysql  Ver 14.12 Distrib 5.0.51a, for debian-linux-gnu (i486) using readline 5.2

Connection id:          466801
Current database:
Current user:           root@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          
Using delimiter:        ;
Server version:         5.0.51a-24 (Debian)
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    latin1
Conn.  characterset:    latin1
UNIX socket:            /var/run/mysqld/mysqld.sock
Uptime:                 67 days 2 hours 7 min 11 sec

Threads: 5  Questions: 4053579  Slow queries: 552  Opens: 127041  Flush tables: 1  Open tables: 64  Queries per second avg: 0.699
--------------

Ajouts et modifications

Ajouter un champ à une table existante

alter table NomDeLaTable add column ChampAAjouter bigint default null;

Modifier une colonne en auto_increment

alter table NomDeLaTable modify column id bigint(20) auto_increment;

Ajouter NOT NULL à une colonne

ALTER TABLE user MODIFY name NOT NULL;

Backup

Backup global

mysqldump --all-databases > all_databases.sql

Optimisations

Optimiser les requêtes

Pour vérifier les requêtes trop consommatrices en ressources, effectuer les opérations suivantes :

logguer les requêtes dépassant un certains délai d’exécution ou bien celle n’ayant pas recours à des indexs.

Editer la configuration :

vi /etc/mysql/my.cnf

Editer les 3 propriétés suivantes :

log_slow_queries = /var/log/mysql/mysql-slow.logs

long_query_time = 5

log-queries-not-using-indexes


La 1ère ligne défini le fichier de log dans lequel on enregistre les requêtes "lentes".

La 2ème ligne indique en secondes le temps d’exécution à partir duquel les requetes seront logguées (compris entre 1 et 10)

La 3ème ligne permet quant à elle d’indiquer les requêtes effectuées sans utilisation d’index.


Après un redémarrage de MySQL, toutes les requêtes exécutées et "trop longues" seront logguées, avec des informations explicites sur :

  • le temps de la requete ;
  • le temps de vérouillage s’il existe ;
  • le nombre de lignes renvoyées ;
  • le nombre de lignes analysées.

Scripts / Utilitaires

Voir MaatKit sur http://www.maatkit.org (package debian : maatkit).


Ces outils permet d'effectuer des tâches complètes de manière simple.


Ainsi vous pouvez améliorer :

  • La réplication.
  • L'archivage des données, l'importation et l'exportation.
  • L'analyse des logs et la ré-exécution (permet de tester la charge d'une machine).
  • L'analyse des requêtes, schémas et paramètres.

Bugs

Le gestionnaire de bugs de MySQL permet de soumettre les bugs rencontrés lors de l'utilisation de MySQL.

Liens

Externes

Sources : WikiBooks

http://dev.mysql.com/doc/refman/5.0/fr/replication-howto.html

http://dev.mysql.com/doc/refman/5.0/en/mysqldump.html#option_mysqldump_all-databases

http://www.webexpertys.com/replication-maitre-esclave-mysql-5

http://www.zataz.net/docs/6894/documentation-replication-mysql.html