Cours MySQL pdf avec travaux diriges


Télécharger Cours MySQL pdf avec travaux diriges

★★★★★★★★★★3.5 étoiles sur 5 basé sur 1 votes.
Votez ce document:

Télécharger aussi :


Cours MySQL pdf avec  travaux dirigés

Premiers pas

nInstallation de MySQL

n Lancement du serveur

nArrêt du serveur

nConfiguration de MySQL

nConnexion au serveur mysqld

 Installation

  à partir des RPM

 rpm -ivh

 rpm -qa | grep -i MySQL

  • php-mysql-4.3.2-3mdk
  • Libmysql12-4.0.15-1mdk
  • perl-Mysql-1.22_19-8mdk
  • MySQL-4.0.15-1mdk
  • MySQL-client-4.0.15-1mdk
  • MySQL-common-4.0.15-

1mdk

 Installation des binaires

~ A partir des binaires proposés sur le site de MySQL

http://dev.mysql.com/downloads/mysql/4.1.html

shell> useradd -g mysql mysql

shell> cd /usr/local

shell> gunzip < /PATH/TO/MYSQL-VERSION-OS.tar.gz | tar xvf

-

shell> ln -s FULL-PATH-TO-MYSQL-VERSION-OS mysql

shell> cd mysql

shell> scripts/mysql_install_db --user=mysql

shell> chown -R root .

shell> chown -R mysql data

shell> chgrp -R mysql .

shell> bin/mysqld_safe --user=mysql &

Installation de la base d'administration

~ Dans l'installation à partir des rpm, la base d'administration mysql est installée par défaut dans /

var/lib/mysql (paramètre –datadir du daemon mysqld)

~ Si on installe à partir des binaires, ou que l'on souhaite recréer une nouvelle bases d'administration

qLancer le script

n ./bin/mysql_install_db

 Lancement

n Créer un utilisateur et un groupe « mysql » qui servira à définir l'identité du serveur “mysqld”. Il faut faire appartenir les bases à cet utilisateur afin qu'il ait toutes les permissions dans les tables

Il $ chown -R mysql.mysql /opt/mysql/var/

n Lancer le daemon serveur mysqld

~ $ /opt/mysql/bin/mysqld_safe --basedir=/opt/mysql --

datadir=/opt/mysql/var/ --user=mysql --log --log_isam -¬

log-update&

Starting mysqld daemon with databases from /opt/mysql/var/

 Lancement de MySQL

$ /etc/rc.d/init.d/mysql -?

Utilisation : /etc/rc.d/init.d/mysql {start | stop | status | reload | restart}

$ ps ax |grep mysql 1944 ? S 0:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql –

pid-file=/var/lib/mysql/localhost.pid –log --log-update 1977 ? S 0:00 /usr/sbin/mysqld --basedir=/ --datadir=/var/lib/mysql

--user=mysql --pid-file=/var/lib/mysql/localhost.pid –skip-locking 1978 ? S 0:00 /usr/sbin/mysqld --basedir=/ --datadir=/var/lib/mysql -¬ user=mysql --pid-file=/var/lib/mysql/localhost.pid –skip-locking

--log-update permet de loguer toutes les changements dans une base

et de réaliser des backup incrémentaux. Toute l'histoire d'une base

peut etre logguée dans /var/lib/mysql/localhost.log

 Lancement de MySQL

Comment est lancé le serveur dans /etc/rc.d/init.d/mysql?

$ cat /etc/rc.d/init.d/mysql

o gprintf "Starting MySQL Server"

o $bindir/mysqld_safe --datadir=$datadir --pid-file=$pid_file 2>&1 |

logger -t mysqld_safe & success

$ opt/mysql/bin/mysqld_safe --basedir=/opt/mysql/ --

datadir=/opt/mysql/var/ --user=mysql --log --log_isam --log

update

Starting mysqld daemon with databases from /opt/mysql/var/

Pour connaître l'ensemble des options de mysqld

o man mysqld

o man mysqld_safe

 Arrêt du serveur MySQL

n $ mysqladmin -u root -p shutdown

n $ /etc/rc.d/init.d/mysql stop

n $ killall mysqld

n $ mysqld_pid=`cat /opt/mysql/var/localhost.pid`

n $ kill $mysqld_pid

Configuration de MySQL

n Options du serveur mysqld :

  • Soit au lancement sur la ligne de commande
  • Soit dans un fichier de conf « /etc/my.cnf »
  • mysqld lit ses options dans les sections [mysqld] et

[server].

  • mysqld_safe lit ses options dans les sections [mysqld],

[server], [mysqld_safe], et [safe_mysqld]

  • mysql.server lit ses options dans la partie [mysqld] et

[mysql.server]

n Pour voir les options que l'on peut placer dans ces sections :

mysqld –help

Options disponibles de my.cnf

 [client]

  • host=localhost

[safe_mysqld]

  • err-log=/var/log/mysqld.log
  • pid-file=/var/run/mysqld/mysqld.pid

Connexion au serveur

 Connexion au serveur MySQL

 mysql -u root -h localhost

 La première fois pas de mot de passe pour se connecter !!

Mettre tout de suite un mot de passe pour

l'utilisateur « root » de MySQL !

 /opt/mysql/bin/mysqladmin -u root password 'titi'

 Quelques commandes intéressantes:

 $ mysqladmin variables | mysql> show variables

 $ mysqladmin version

 $ mysqladmin status | mysql> show status

Utiliser une base courante

n Pour spécifier l'utilisation d'une base particulière :

q1. Au lancement du client

n Mysql -u root -p CHOCOLATS

q2.1 Sous l'interpreteur mysql

n Mysql> Use CHOCOLATS

n Mysql> select * from CLIENTS

q2.2 En notation « pointée » en préfixant les tables par le

nom de base [BASE.table]

qMysql> select * from CHOCOLATS.CLIENTS;

 Gestion des comptes utilisateurs

nGestion des Accès à la Base

 Sécurité des accès

n MySQL utilise sa propre base d'administration

“/var/lib/mysql/mysql” pour gérer la sécurité des accès aux autres bases.

n Seul le user “ root ” de MySQL doit avoir accès à cette base!

n La base « mysql » utilise 5 tables pour décider « qui » a la permission de faire « quoi » sur quelle « base », à partir « de quelle machine »

n La base « mysql » contient 5 tables d'administration

q $ ls /var/lib/mysql/mysql/

n user.frm , host.frm , db.frm

n columns_priv.frm func.frm tables_priv.frm

 Sécurité des accès

q La table « user » contient les informations de sécurité qui s'appliquent à tout le serveur.

q La table « host » contient les machines qui ont le droit d'accéder au serveur

q Les tables db, tables_priv et columns_priv contiennent les droits d'accès pour une base, une table ou une colonne.

q L'ordre des contrôles d'accès est le suivant (cf doc. Texte word)

 Les permissions MySQL

n mysql> SHOW PRIVILEGES;

n SELECT : droit d'effectuer des recherches avec “select »

n INSERT : droit d'effectuer des insertions avec « insert »

n UPDATE : droit d'effectuer des mises à jour avec « update »

n DELETE : droit d'effectuer des destructions d'enregistrements dans des tables

n INDEX : droit de créer ou détruire des index de tables

n ALTER : droit de modifier la structure des tables avec « alter »

n CREATE : droit de créer des bases ou des tables avec « create »

n USAGE : droit de se connecter au serveur, sans rien faire d'autre

n ( utile uniquement pour changer le mot de passe de connexion )



n LOCK : droit de verrouiller/déverrouiller des tables

 Les permissions MySQL

n Drop : droit de détruire des bases ou des tables

n Grant : permet d'affecter des droits et permission à un utilisateur

n References : (droit lié aux « foreign keys », inutilisé encore dans

les version actuelle de mysql.. )

n Privilèges globaux, ne s'appliquent pas à UNE base particulière

  • Reload : permission de relancer le serveur mysql et d'ecrire les tables sur disques.
  • Shutdown : droit d'arrêter le serveur “mysqld »
  • Process : droit de contrôler les processurs utilisateurs.
  • File : droit d'écrire ou lire dans des fichiers ascii avec les

commandes « load data » et « into outfile »

 Allouer des permissions:GRANT

n Les permissions des tables se manipulent avec les commandes sql GRANT et REVOKE ou bien avec l'utilitaire mysqlaccess

n GRANT permet de créer un utilisateur, lui allouer des droits et changer son mot de passe

GRANT priv_type [(column_list)] [, priv_type [(column_list)]] ON {tbl_name | * | *.* | db_name.*} TO user [IDENTIFIED BY [PASSWORD] 'password']

n mysql> GRANT all ON test.* TO momo IDENTIFIED BY “titi ”;

n mysql> GRANT select,insert ON mysql.* TO [email protected] identified by "titi" [with GRANT OPTION]; les privilèges « file », « reload », “shutdown” sont globaux pour tout le serveur et non pas pour une base particulière affichage des droits d'accès

Les exemples précédents insèrent le user « momo » avec son mot

de passe, et la machine autorisée, dans la table « user », de la base

mysql, sans aucun droit. Les droits sont placés pour la base mysql

dans la table « db »

 Vérification des permissions pour un utilisateur

Les 2 privilèges SELECT,INSERT sont placés dans la table « DB » pour une base particulière

  • Mysql> select * from db where user= »momo »

| localhost | mysql | momo | Y | Y | N | N | N | N | N | N

| N | N | N | N |

  • Mysql> select * from user where user= »momo »

| localhost | momo | 398e7500242ab90c | N | N | N | N | N | N | N

| N | N | N | N | N | N | N | N | N | N

| N | N | N | N | |

  • mysql> SHOW GRANTS FOR root;
  • mysql> SHOW GRANTS FOR 'root'@'localhost' ;
  • $ mysqlaccess -t -d CHOCOLATS -u momo -U root -P

 2 commandes utiles

n Changer le mot de passe d'un utilisateur

q GRANT USAGE ON *.* TO [email protected] IDENTIFIED BY

'titi'

n Créer un super-utilisateur (~root)

q GRANT ALL PRIVILEGES ON *.* TO [email protected]>

IDENTIFIED BY 'titi' WITH GRANT OPTION;

q L'option GRANT donne le droit d'utiliser la commande GRANT et

donc de permettre à un utilisateur d'en créer d'autre

q (NB: ne pas multiplier les « super-utilisateurs !!)

Oter des permissions: REVOKE

~REVOKE permet de supprimer des droits pour des utilisateurs

REVOKE priv_type [(column_list)] [, priv_type [(column_list)]]

ON {tbl_name | * | *.* | db_name.*}

FROM user [, user]

mysql> REVOKE ALL on *.* FROM momo ;

mysql> REVOKE ALTER,DELETE,DROP on mysql.* FROM momo

mysql> REVOKE GRANT OPTION on mysql.* [email protected]>

mysql> REVOKE SELECT on mysql.* FROM 'momo'@'pcml.dom.fr'

Enlever un utilisateur

n à partir de la version 4.1.1 (nécessité d'enlever tous les

privileges avant de détruire l'utilisateur)

mysql> SHOW GRANTS FOR [email protected]>

mysql> REVOKE ALL PRIVILEGES FROM

[email protected]

mysql> DROP USER toto;

n Pour des versions antérieures

mysql> DELETE FROM mysql.user WHERE

user='user_name' and Host='host_name';

n Les permissions ont été placées dans la table mysql.*, il faut les recharger en mémoire pour le serveur

mysql> FLUSH PRIVILEGES;

 Création & destruction d'une base

n Création d'une base = créer un répertoire

  1. $ mysqladmin -u root -p create NOMDEBASE
  2. $ mkdir /var/lib/NOMDEBASE && chown mysql /

var/lib/NOMDEBASE

  1. $ mysql -u root -p
  • mysql> CREATE DATABASE ma_base

n Destruction d'une base

~$ mysqladmin -p drop NOMDEBASE

  • mysql> DROP DATABASE ma_base

n Regarder le script script_creation_tables_base_confiseurs.txt

n Se créer une base vierge

q /opt/mysql/bin/mysqladmin -u root -p create CHOCO

n Créer les tables en batch avec le script

q /opt/mysql/bin/mysql -u root -p <

script_creation_tables_base_confiseurs.txt

n Connexion en tant que “root”... Quelques vérifications

q Mysql> show tables

q Mysql> desc BOITES

q Mysql> select * from BOITES

TP : Mettre des droits sur la Base

n Créer plusieurs utilisateurs et affecter des droits différents à ces utilisateurs par GRANT et REVOKE

q Un utilisateur qui aura tous les droits sur la Base

q Un utilisateur qui n'aura que le droit de sélectionner

q Un utilisateur qui aura le droit d'écrire dans les tables et les modifier et récupérer les sélections dans un fichier

q Conclusions?

q GRANT all ON test.* TO [email protected] IDENTIFIED BY “titi ”;

q Ou

q insert into host (host,Db,Select_priv) values

("localhost","CHOCOLATS","Y");

q delete from user where host="localhost" and user="";

TP : Les droits sur la Base

nModifier un mot de passe pour un utilisateur

n Enlever le droit update et file pour l'utilisateur qui les a.

 Maintenance et

Administration de MySQL

 Structures des tables

 Instructions de maintenance des Tables

 BACKUP TABLE

 RESTORE TABLE

 REPAIR TABLE

 CHECK TABLE

 ANALYZE TABLE

 OPTIMIZE TABLE

 La structure des Tables MySQL

  • Une table au format MyISAM (séquentiel indexé) se décompose en 3 fichiers :

qtable.MYD

qtable.MYI

qtable.frm

n Le fichier .MYD contient les données réelles (D-ata)

n Le fichier .MYI contient les informations sur les clés et index des tables. Toutes les informations pour retrouver rapidement les données sont dans le fichier .MYI. Ce fichier est capital pour optimiser les accès aux tables.

n Le fichier .frm contient la structure de la table elle même (n'a pas d'impact sur les performances)

 Structure des tables

n Le fichier .MYI contient les index, et est le plus important pour les performances des accès aux tables.

n La commande « myisamchk» est entièrement consacrée aux opérations sur ce fichier

n Les opérations vont concerner:

~ L'analyse et le listage des clés,

~La réparation de tables endommagées, la re-création et destruction des clés...

 Backup des bases

  • Les bases sont des répertoires, et les tables des fichiers... les opérations de sauvegarde et de backup sont donc simples!

Avec un serveur en activité, pour assurer des copies sécurisées:

  • mysql>LOCK TABLES;
  • mysql>FLUSH TABLES

( assure que tous les index et données sont bien écrits avant de commencer la copie.)



  • Hors du contrôle du serveur, et serveur arrété, on peut faire régulièrement (cron) une simple copie des bases:

$ rsync -av /var/lib/mysql/unebase /opt/SAUVEBASE/

Backup des bases

L'utilitaire mysqldump permet de faire des sauvegardes complètes en ascii

n Backup : $ mysqldump --opt database [table] >backup-file.sql

n $ /opt/mysql/bin/mysqldump -u root -ptoto

CHOCOLAT BOITES

n Restoration:

n $ mysql database < backup-file.sql

 Backup avec mysqlhotcopy

  • Sauvegarde d'une base complète avec toutes les tables dans –datadir (/var/lib/mysql/)

$ /usr/bin/mysqlhotcopy --debug -u root –password='titi'

CHOCOLATS CHOCOLATS-SAV

  • Sauvegarde de la table CLIENTS de la base

CHOCOLATS dans un répertoire extérieur à /

var/lib/mysql

$ /usr/bin/mysqlhotcopy --debug --addtodest -u root -¬ password='aaa' CHOCOLATS./CLIENTS/ "/home/momo"

 BACKUP / RESTORE

 Mysql> BACKUP TABLE COMMANDES to

'/var/lib/mysql/SAUVE/';

  • (NB1:le user « mysql » doit avoir le droit d'écrire dans le répertoire indiqué)
  • NB2:cette commande n'est plus supportée... Il est préférable d'utiliser la commande mysqlhotcopy
  • NB3: Ne sauvegarde que .frm et .MYD, les index doivent etre reconstruits (avec REPAIR TABLE matable USE_FRM)
  • NB4: Ne fonctionne que sur des tables myisam

 La commande RESTORE TABLE sert à remettre en service des tables sauvegardées par BACKUP TABLES

mysql> RESTORE TABLE BOITES FROM

Maintenance de Tables

n Pour vérifier et réparer des tables MyISAM

n CHECK TABLE

n REPAIR TABLE

n Pour optimiser des tables MyISAM :

n OPTIMIZE TABLE

n ANALYZE TABLE

n L'utilitaire « myisamchk » hors du contrôle du serveur

Les problèmes avec les Tables MyISAM

 Le format des tables MyISAM est très sûr. Mais on peut avoir des tables corrompues dans quelques cas malchanceux:

  • le serveur mysqld s'arrête pendant une écriture
  • Arrêt brutal de l'ordinateur
  • Erreur hardware (contrôleur de disque...)
  • Utilisation d'un programme externe (myisamchk) sur une table

qui est en train d'être modifiée par le serveur en même temps..

 Les symptômes lors de l'accès à une table

 Incorrect key file for table: '...'. Try to repair it

 Utiliser

  • CHECK TABLE
  • REPAIR TABLE
  • Myisamchk

Verification des tables : check

n En cas de problème tel que les données semblent corrompues,

ou si l' on obtient constamment des erreurs lors d'accès à une table, il faut essayer de réparer la table suspecte avec l'utilitaire de ligne de commande myisamchk ou les commandes SQL CHECK TABLE et REPAIR TABLE.

n Vérification de la structure des tables... calcul et recherche des index, tests de corruption sur les tables MyISAM

CHECK TABLE BOITES {QUICK | FAST | MEDIUM | EXTENDED |

CHANGED}

n identique à :

q $ myisamchk --medium-check /path/tbl_name

c myisamchk --medium-check /opt/mysql/var/CHOCOLAT/BOITES

 Verification des tables : check

n En cas de corruption de tables, les problèmes viennent le plus souvent du fichier des index et non pas des données.

n Pour vérifier simplement une table il faut utiliser l'option

QUICK. Si MYSQL trouve un erreur dans la table des données, la table est marquée comme étant « Corrupted » et ne peut plus être utilisée jusqu'à ce qu'elle soit réparée!!!

n FAST and CHANGED doivent être utilisée dans des scripts pour vérifier régulièrement l'etat des tables

n MEDIUM passe en revue chaque ligne pour vérifier que les liens vers les index sont corrects. Calcule un checksum pour chaque ligne et le compare avec un checksum calculé sur les clés

n EXTENDED doit être utilisé après détection d'une erreur qui pourrrait subsister

 Réparation des tables : repair

REPAIR TABLE répare une table potentiellement corrompue.

En cas de désastre, REPAIR TABLE devrait réussir à récupérer les données à partir de la table. Dans la majeure partie des cas on ne devrait pas avoir besoin de cette

commande.

REPAIR [LOCAL | NO_WRITE_TO_BINLOG] TABLE

tbl_name... [QUICK] [EXTENDED] [USE_FRM]

Cette commande a le même effet que :

n $ myisamchk [ --recover | safe_recover ] tbl_name

n Cette commande ne fonctionne QUE sur des tables MyISAM

Réparation des tables : repair

n Si l'option QUICK est donnée, REPAIR TABLE essaye de réparer uniquement l'arbre des index. La commande est equivalente à ~ myisamchk --recover --quick.

Si l'option EXTENDED est donnée, MySQL recalcule et re  crée les index ligne par ligne. Équivalent à :

n myisamchk –safe-recover.

n A partir de MySQL 4.0.2, l'option USE_FRM de REPAIR

TABLE permet de recréer le fichier des index `.MYI' à partir du fichier `.frm'

Optimisation des tables

n ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name

n Cette instruction analyse et stocke la distribution des clés d'une table. (Pendant l'analyse la table est « verrouillée » (lock table))

n L'instruction fonctionne sur les tables MyISAM et InnoDB

Pour les tables MyISAM l'instruction est équivalente à:

~ myisamchk -a --description –verbose /path/vers/latable

n MySQL utilise la distribution des clés stockées pour décider de l'ordre dans lequel seront faites les jointures des tables.

Optimisation des tables

n ANALYSE TABLE recalcule les clés et utilise la distribution des clés stockées pour décider de l'ordre dans lequel seront faites les jointures des tables.

n Il est recommendé d'exécuter « myisamchk -a » régulièrement lors de la création d'une base (insertion des données dans les tables). En effet la majeure partie des données sont insérées au début de la création des bases.

n En exécutant une analyse de table « myisamchk -a » régulièrement lors de l'insertion de données, on permet à ce que les données soient conservées le plus efficacement possible

Optimisation des tables

OPTIMIZE TABLE réorganise une table en récupérant les espace

vides et en défragmentant la table.

Syntaxe: OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE

tbl_narre [, tbl_narre] ...

OPTIMIZE TABLE doit être utilisé dans les cas où :

n on a détruit une grande quantité de données dans les tables.

n On a fait des changements de types sur les données (lignes de longueur variables comme VARCHAR, TEXT ou BLOB)

Les enregistrements détruits sont conservés dans une liste chainée et les futures insertions de données pourront réutiliser les anciennes

positions d'enregistrements détruits..

Optimisation des tables

OPTIMIZE TABLE effectue les opérations suivantes :

  1. répare la table en récupérant la place laissée par des lignes vides
  2. trie les index, s'ils ne sont pas triés
  3. met à jour les statistiques des tables

L'utilitaire myisamchk

n Commande entièrement consacrée à l'analyse et la maintenance (réparation) du fichier d'index .MYI et de données .MYD

n Myisamchk peut être utilisé pour obtenir de l'information sur les tables, pour les vérifier, les réparer ou les optimiser.

n On préconise d'effectuer des backups des bases avant d'effectuer des réparations sur les fichiers d'index.

n La plupart des actions de myisamchk sont également réalisées par les commandes SQL précédentes (check, repair, analyse optimize) sous le contrôle du serveur mysqld.

L'utilitaire myisamchk



n Myisamchk est une commande qui est exécutée sous le shell et n'est donc pas sous le contrôle du serveur MySQL. Les modifications engendrées nécessiteront alors un « reload » du serveur ou un FLUSH des tables .

n L'avantage des commandes SQL est que les opérations effectuées sont sous le contrôle du serveur (les locks de tables sont effectués, vidage des tampons)

n Avec myisamchk, on doit s'assurer que le serveur n'utilise pas les tables en même temps.

n Si le serveur tourne, il faut forcer l'écriture des tables qui sont bufferisées en mémoire en utilisant FLUSH TABLES. Il faut s'assurer que personne n'utilise les tables pendant qu'on exécute myisamchk. CHECK TABLE est préférable à myisamchk pour vérifier les tables.

Myisamchk pour «vérifier»

Sans option : simple vérification des erreurs dans les tables

$ myisamchk /opt/mysql/var/CHOCOLAT/*.MYI

q --check, -c : cherche des erreurs dans la table (option par défaut)

q --check-only-changed, -C : vérifie les tables qui ont changées depuis la dernière vérification

q --extend-check, -e : Vérification complète et approfondie des tables.Opération d'autant plus longue que la table a beaucoup d'index. Option à utiliser dans des cas extrèmes. myisamchk -¬ medium-check devrait suffire pour trouver des erreurs dans la table.

q --extend-check : nécessite beaucoup de mémoire. On peut mettre la variable key_buffer_size a une plus grande valeur pour accélérer les calculs.

n --force, -f provoque une réparation automatique des tables si myisamchk trouve des erreurs. Le type de réparation est celui spécifié dans l'option. --repair ou -r.

n --information, -i : affiche des informations statistiques sur la table

n --medium-check, -m : vérification plus rapide qu'avec l'option --extend  check .

n --update-state, -U : stocke les informtions dans le fichier .MYI pour indiquer quand la table a été vérifiée. Option inéressante pour tirer bénéfice de l'option --check-only-changed. On ne doit pas utiliser cette option si le serveur mysqld utilise la table sans l'option --skip-external

locking .

Myisamchk pour chercher des erreurs

n myisamchk tbl_name : trouve 99.99% des erreurs.

n myisamchk -m tbl_name trouve 99.999% des erreurs. Vérification des index de chaque ligne :

Calcul d'un checksum pour chaque clé des lignes et vérifie que cette valeur de checksum est égale au checksum des clés dans l'arbre des index.

n myisamchk -e tbl_name :

Vérification complète des données (̏extended check"). Vérification en lecture de toutes les clés de chaque ligne pour vérifier qu'elles pointnt sur la bonne ligne.

n myisamchk -e -i tbl_name idem ci dessus mais avec l'option “-i” affiche des informations statistiques supplémentaires.

=

Myisamchk pour «réparer»

--recover , -r : répare une table endommagée. Défragmente les tables.

Cette option convient à presque tous les cas de problèmes.

Essayer l'option « -o » si les problèmes persistent. Si la machine a beaucoup de mémoire, on peut augmenter la valeur du paramètre

« sort_buffer_size »

q /opt/mysql-4.1/bin/mysqladmin -u root -p variables |grep sort_buffer réparation avec une autre méthode, qui lit toutes les lignes dans l'ordre et mets à jour tous les index basés sur les lignes trouvées.

Méthode plus lente qu'avec -r et qui utilise plus de place disque

n Essayer d'abord les réparations avec -r puis avec -o si échec.

 Myisamchk pour «analyser»

--analyse , -a : Analyse la distribution des clés. Cela améliore les performances de jointure en permettant à l'optimiseur de mieux choisir l'ordre dans lequel sera faite la jointure des tables et quelle clé sera utilisée.

c SHOW KEYS FROM tbl_narre .

--description, -d : donne les principales informations sur la table. Les informations les plus importantes sont :

Data records: 18 Deleted blocks: 0

Recordlength: 320

Key Start Len Index Type

1 2 4 unique char

--sort-index, -S

tri l'arbre des index. Cela optimize les recherches par clé et les rends plus rapides.

Myisamchk en cas de crash

n Etre sur que personne n'utilise les tables à travers le serveur, pendant qu'on utilise myisamchk. Faire un backup avant d'utiliser myisamchk.

n faire mysqladmin flush-tables avant de commencer à vérifier les tables. Sinon arréter le serveur mysqld pendant les vérifications et réparations de tables.

n La plupart des problemes surviennent sur les fichiers d'index .MYI ou de données .MYD.

n Myisamchk crée une copie du fichier`.MYD' ligne à ligne. Il termine la réparation en détruisant l'ancien fichier .MYD et en renommant le nouveau

n Avec l'option --quick, myisamchk ne crée pas le fichier .MYD temporaire , il considère que le fichier .MYD est correct, et ne recrée que le fichier des index

n On peut spécifier l'option --quick 2 fois. Dans ce cas , myisamchk essaye de resoudre les erreurs en modifiant le fichier `.MYD' .

 Conclusions sur myisamchk

n Commande utile pour conserver des Bases de données sans anomalies et réparer les erreurs éventuelles :

n Inspecter : Exécuter quotidiennement myisamchk -d -c -i –s conserver le compte rendu et le consulter

n Réparer : Lors de problème de crash (disque, serveur, machine..)  analyser les tables des bases et passer myisamchk -a -r –e

n Défragmenter : Lancer régulièrement myisamchk -r -o ... d'autant plus souvent que les mises à jour des tables (insert, update, delete) sont intenses et fréquentes

n Optimiser,analyser : myisamchk-a -d

 TP sur maintenance et analyse des tables

n Faire une sauvegarde avec mysqldump

n Faire une sauvegarde avec mysqlhotcopy

n Faire une sauvegarde avec backup

n Utiliser les commandes

qCheck

qRepair

qAnalyse

qOptimize

qmysqlchk

Surveillance du serveur

n Le serveur MySQL gère les connexion des clients. Pour chaque client mysqld crée un processus fils (un thread) qui prend en charge les requêtes de ce client. Il y a donc autant de threads que de connexions.

n Chaque thread accède aux données des tables en fonction des requêtes de son client

n Le serveur gère un ensemble de base de données (chacune étant un répertoire placé sous la racine du serveur, indiquée par l'option

–datadir au lancement du serveur)

n Mysql fournit un ensemble d'utilitaires pour surveiller l'état du

serveur :mysqladmin, kill, show

Mysqladmin – KILL

 Charge et status du serveur

  • $ mysqladmin -u user -p [ status | extended-status | variables ]

Uptime: 36707 Threads: 2 Questions: 65 Sl



241