Académique Documents
Professionnel Documents
Culture Documents
TP 1 Généralités
ps ax | grep mysql
--> root a lancé le processus initial /usr/bin/mysqld_safe
--> puis a transmis à syslog, la gestion des logs
--> ensuite x processus clonés ont été lancés, sous la propriété de
l'utilisateur mysql
(un utilisateur standard, par souci de sécurité)
• Le contrôle du serveur, son démarrage, son arrêt sont assurés, comme pour
tous les services, par un script /etc/init.d/mysql
(sur Red-Hat ou Mandrake, démarrage/arrêt par appel à ce script : service
mysqld start | stop)
(Sur Debian : /etc/init.d/mysql start | stop)
• Documentation
En ligne et en français : http://dev.mysql.com/doc/mysql/fr/
Voir en particulier le tutoriel introductif au langage SQL
TP 2 Gestion locale en mode commande
Remarque : on pourrait avoir tout de suite recours à une interface WEB, par exemple
Phpmyadmin pour dialoguer avec le serveur. Bien entendu le confort dans l'utilisation
quotidienne est très appréciable par rapport à une gestion en ligne de commande,
mais finalement toute interface PHP de ce genre (ou autre langage), finalement ne
transmet que des commandes SQL au serveur.
1. Connexion cliente
La commande mysql exécute un utilitaire client, qui permet de dialoguer avec
le serveur MYSQL
Ce mode d'accès effectué en ligne de commande, est appelé le mode console.
Lorsque l'on lance cette commande, aucun login, ni mot de passe n'est
demandé. On peut ainsi se connecter en fait comme administrateur de mysql,
et sans mot de passe !
mysql
Welcome to the MySQL monitor. Commands ends with ; or \g
Your Mysql connection id is ...
tape help; ou \h for help
mysql>
2. Requêtes au serveur
Le serveur Mysql ne comprend que le langage SQL. Il faut s'adresser à lui
exclusivement par commandes SQL !
Or justement, le client mysql est un interpréteur de commandes SQL !
Remarque : par défaut la casse n'est pas prise en compte; et par convention il
est d'usage courant d'écrire les mots-clés SQL en majuscules.
Petit test (attention les ; de fin de commande sont obligatoires en syntaxe SQL)
mysql
mysql> SHOW databases;
mysql> USE test;
mysql> SHOW tables;
mysql> USE mysql;
mysql> SHOW tables;
mysql> SHOW columns FROM user;
mysql> SELECT host, user, password FROM user;
mysql>quit
3. Stockage des tables Comparer les tables de la base mysql, avec les fichiers
contenus dans le répertoire /var/lib/mysql/mysql.
Conclusion : quels sont les fichiers nécessaires à la description de chaque table
d'une base ?
mysql -u root -p
Enter password : fctice (il n'apparait pas à l'écran)
Welcome to the MySQL monitor
mysql>USE mysql
mysql>SELECT host, user, password FROM user;
mysql>quit
• Remarques :
- Observez maintenant le mot de passe crypté présent dans le champ
password de la table user
- On aurait pu attribuer ce mot de passe à root, par l'intermédiaire de
phpmyadmin (voir en annexe)
TP 3 Accès distant
mysql -h ip -u root -p
Password ..
Refus !! lisez bien le motif du refus, il explique pourquoi ..
mysql -u root -p
Password ..
mysql>GRANT all privileges ON *.* TO 'root'@'%' IDENTIFIED BY 'fctice'
mysql -h ip -u root -p
Password ..
mysql>CREATE DATABASE essais ;
Bien sûr tout pourrait être géré en mode console, même à distance avec une session
ssh
Mais phpmyadmin écrit pour nous toutes ces lignes de commandes SQL
La structure de la base cdi ainsi que la totalité de ses enregistrements ont été
préalablement sauvegardés sous forme de fichier cdi.sql. Au préalable, lire et
comprendre le contenu du fichier cdi.sql
En mode console
mysql -u root -p cdi < /chemin/cdi.sql
Sous Phpmyadmin
sélectionner la base cdi
"Emplacement du fichier texte"
chercher le fichier cdi.sql sur le système de fichier local
Exécuter
Bien comparer ce fichier à la structure et aux contenus des tables.
En mode console
mysqldump - u root -p cdi > /chemin/cdi1.sql
--> donner le mot de passe
Sous Phpmyadmin
Comme root, sélectionner la base cdi
"Afficher le schéma de la base de données"
Structure et données
Transmettre
Exécuter
choix du répertoire, nom du fichier : cdi1.sql
Comparer avec le fichier d'origine cdi.sql
1. Création d'une table à partir d'une exportation d'une
table msaccess ou msexcel
Sauvegarder --> La nouvelle table glossaire est alors créée dans la base
test ( ou dans votre base webmestre)
4. Gestion de la table
Phpmyadmin permet maintenant de gérer la table
Observer les rubriques : Supprimer (la table), Insérer (des
enregistrements) et la possibilité de modifier ou suppression de champs
2. Examiner le fichier fourni glossaire.txt
Il a été obtenu en exportant une table access au format délimité, avec le
séparateur ; sans délimitateur de texte.
3. Dans Phpmyadmin, cliquer sur insérer des données provenant d'un fichier de
texte dans la table. Renseigner le formulaire:
1. Commandes SQL
• Attention ! Par défaut l'accès à la gestion des bases par phpMyAdmin n'est pas
protégé. Donc tout utilisateur peut lancer l'URL vers phpMyAdmin, et à travers
cette interface agir comme root
Il faut donc placer rapidement dans le répertoire un processus
d'authentification par mot de passe.
• Examiner la base mysql, la structure de la table user et ses enregistrements
root.
Il s'agit d'une situation initiale particulière. Attention, en l'absence de mot de
passe sur root, il y a une totale insécurité !
Pour protéger l'accès en root par un mot de passe (fctice par exemple)
- sur la ligne de root sur localhost, activer le lien Modifier
- sur le champ Password, sélectionner la fonction PASSWORD, et mettre la
valeur fctice
exécuter, et observer maintenant la présence du mot de passe crypté pour root
dans la table user
• Si on relance le serveur, maintenant Phpmyadmin ne fonctionne plus ! "accès
refusé pour l'utilisateur root@localhost"
En effet le serveur Mysql réclame maintenant un mot de passe ..mais comment
le lui donner ?
Pour cela, il faut effectuer une petite modification du paramètrage dans le
fichier de configuration config.inc.php.
(explications détaillées dans le fichier Documentation.html accessible sur la
page d'accueil)
Choisir l'authentification par le serveur http. A l'utilisation, une boite
d'authentification s'ouvrira pour saisir login et mot de passe de l'utilisateur
voulant accéder au serveur mysql :
$cfgServers[$i]['auth_type'] = 'http'
$cfgServers[$i]['user'] = 'root'
$cfgServers[$i]['password'] = ''
• Pour créer la table carnet dans la base essais, il faut se connecter au serveur, et
passer la commande console de description de la structure de la table :
• On constate que 3 fichiers portant le nom de cette table carnet sont créés dans
le répertoire de la base /var/lib/mysql/essais
Il en sera de même pour nouvelle table incluse dans cette base.
contient les données (vide
carnet.MYD
à la création)
décrit la structure de la
carnet.frm
table
Le systèmes de droits (ici appelés privilèges) sont inclus dans les 5 tables de la base
de données mysql. Sa gestion doit demeurer le privilège exclusif de root. Il doit donc
être le seul :
Shutdown_pri
Y/N Arreter mysql
v
• La table mysql.db contient les privilèges d'un utilisateur (autre que root) sur
chaque base de données créée (donc pas la table mysql). Elle est consultée à
chaque commande SQL de cet utilisateur portant sur les tables de cette base,
pour examiner s'il a le droit le "privilège" de pouvoir utiliser cette commande.
Voici la structure cette table :
Db Base de données
User Utilisateur
Utilitaires d'administration
mysqladmin -p status
Enter password :
Uptime: 4153 Treads: 1 Questions 76 ......
mysqladmin -p processlist
Enter password :
Id User Host db Command Time State Info
mkdir /home/mysql.svg
mysqldump -p essais > /home/mysql.svg/essais.sql
less essais.sql
• Ici, le gestionnaire admin ne sauvegarde que les structures des tables (option
-d), et place le résultat dans son rép.personnel.
• L'utilitaire myisamchk est surtout utilisé pour retrouver l'intégrité d'une table
endommagée. Il doit être lancé pendant un arrêt du serveur, et il faut lui
indiquer le chemin vers la table :
myisamchk -d /var/lib/mysql/cdi/eleves
ISAM files: eleves
Data records : 150 Deteted blocks: 0
.........
myisamchk -r cdi.eleves