You are on page 1of 12

TP Administration de MYSQL

TP 1 Gnralits

Quelle est la version de Mysql installe ? root passe la commande : mysqld -V Le serveur MySql est-il actuellement en fonctionnement ? :
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 serveur mysqld ont t lancs, sous la proprit de l'utilisateur mysql (un utilisateur standard, par souci de scurit)

Le contrle du serveur, son dmarrage, son arrt sont assurs, comme pour tous les services, par un script /etc/init.d/mysql qui attend un paramtre start, stop ou reload Examen du fichier de configuration Sur Debian, il se trouve /etc/mysql/my.cnf Attention, par dfaut, le serveur Mysql ne travaille qu'en local, ne rpond qu'aux requtes locales, envoys par des scripts PHP (comme Phpmyadmin) grs par un serveur Apache hberg par la mme machine. Que donne une commande nmap ip ? Commentez avec un # la ligne bind-address =127.0.0.1. Redmarrez Mysql par /etc/init.d/mysql restart Examinez de nouveau les ports ouverts, en coute du rseau. Conclusion.

Examen des logs, dans le fichier /var/log/syslog Par exemple le dmarrage du serveur a gnr une ligne comme :
date heure hote mysqld_safe: starting mysqld daemon with databases from /var/lib/mysql/

Mais o sont places les bases de donnes ? o Ds le dbut de son fonctionnement le serveur a install la base mysql. IL s'agit de la base de donnes interne du serveur, elle est destine grer les utilisateurs, l'authentification et leurs droits d'accs (appels privilges). o Constatez que chaque base de donnes occupe un sous-rpertoire de /var/lib/mysql qui porte le nom de la base. o Et que dans un tel rpertoire, chaque table de la base correspond 3 fichiers qui portent le nom de cette table (voir annexe)

Un autre moyen de connaitre les bases s'obtient avec la commande mysqlshow Documentation En ligne et en franais : http://dev.mysql.com/doc/mysql/fr/ Voir en particulier le tutoriel introductif au langage SQL
o

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 trs apprciable 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 excute un utilitaire client, qui permet de dialoguer avec le serveur MYSQL Ce mode d'accs 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 !
2. 3. 4. 5. 6. mysql Welcome to the MySQL monitor. Commands ends with ; or \g Your Mysql connection id is ... tape help; ou \h for help mysql>

On peut aussi se connecter distance travers une session ssh Connectez-vous un serveur voisin par connexion ssh, puis commande mysql 7. Requtes 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 interprteur de commandes SQL ! Remarque : par dfaut la casse n'est pas prise en compte; et par convention il est d'usage courant d'crire les mots-cls SQL en majuscules. Petit test (attention les ; de fin de commande sont obligatoires en syntaxe SQL)
8. mysql 9. mysql> SHOW databases; 10. mysql> USE test; 11. mysql> SHOW tables; 12. mysql> USE mysql; 13. mysql> SHOW tables; 14. mysql> SHOW columns FROM user; 15. mysql> SELECT host, user, password FROM user; 16. mysql>quit

17. Stockage des tables

Comparer les tables de la base mysql, avec les fichiers contenus dans le rpertoire /var/lib/mysql/mysql. Conclusion : quels sont les fichiers ncessaires la description de chaque table d'une base ? 18. Scuriser le compte administrateur o Mettre un mot de passe pour l'administrateur root@localhost (homonyme du superviseur Linux, mais tout--fait distinct)
o mysqladmin -u root password fctice

Le mot de passe de l'administrateur "root" de mysql est maintenant fctice.


o o o o o o o o o o o o

la connexion anonyme est alors interdite


mysql --> access denied for user root@localhost

Dsormais, il faut prciser login et mot de passe interactivement


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 prsent dans le champ password de la table user - On aurait pu attribuer ce mot de passe root, par l'intermdiaire de phpmyadmin (voir en annexe) 19. Supprimer l'utilisateur anonyme Sur certains installations, un compte anonyme est cr. Il est vivement recommand de le supprimer ... pas vraiment pour une question de scurit car ses privilges sont trs limit, mais pour viter des confusions lies la procdure d'authentification. Pour le supprimer, root se connecte directement la basemysql (le "mysql" la fin de la commande, en fait effectue une commande USE mysql). Puis root passe une requete SQL de suppression
20. 21. 22. 23. mysql -u root mysql> DELETE mysql> DELETE mysql> SELECT -p mysql FROM user WHERE user=''; FROM user WHERE password=''; host, user, password FROM user;

TP 3 Accs distant 1. Essai de connexion distante Le client mysql peut tenter une connexion distante, partir d'une station voisine (on donne l'adresse IP du serveur ou un nom de machine rsolvable)

mysql -h ip -u root -p Password .. Refus !! lisez bien le motif du refus, il explique pourquoi ..

2. Crer des comptes distants En fait un compte utilisateur est toujours attach une machine, partir de laquelle la connexion est sollicite. Et le compte root maintenant protg par mot de passe, est un compte local attach l'hte localhost. Il s'agit de crer un compte root accessible d'un serveur voisin dont vous connaissez l'ip (pour un serveur en production cela est trs peu recommand !). Pour cela relancer le client mysql localement (ou travers une connexion ssh)
3. mysql -u root -p 4. Password .. 5. mysql>GRANT all privileges ON *.* TO 'root'@'ip' IDENTIFIED BY 'fctice'

6. Retester Sur la station voisine, redemander la connexion avec le nouveau compte root, et l'utiliser pour crer une nouvelle base, nomme essais, puis la supprimer (vous constatez qu'aucune confirmation n'est demande !)
mysql -h ip -u root -p Password .. mysql>CREATE DATABASE essais ;

7. Cration d'un compte restreint accessible de partout En adaptant la commande grant prcdente, il s'agit de crer un compte stage (mot de passe stage) accessible de n'importe o (y compris localement), mais limit la commande SQL d'affichage select.
mysql -u root -p Password .. mysql>GRANT all privileges ON *.* TO 'root'@'ip' IDENTIFIED BY 'fctice'

Tester ensuite une connexion cliente quelconque. Est-ce possible ? Se connecter localement avec phpmyadmin, puis passer des commandes d'affichage, d'insertion et de suppression sur une table (par exemple db) de la base systme mysql. Que vrifiez-vous ? TP 4 Installation, sauvegarde et restauration d'une base Bien sr tout pourrait tre gr en mode console, mme distance avec une session ssh Mais phpmyadmin crit pour nous toutes ces lignes de commandes SQL !
1. Crer une base

Se connecter comme root et crer une nouvelle base cdi - create database cdi, directement dans la fentre SQL de phpmyadmin - ou dans le formulaire de la page d'accueil "Crer une base de donnes" Constater qu'un nouveau sous-rp. cdi vide a t cr dans /var/www/mysql.
2. Importation de la structure et des donnes

La structure de la base cdi ainsi que la totalit de ses enregistrements ont t pralablement sauvegards sous forme de fichier cdi.sql. Au pralable, lire et comprendre le contenu du fichier cdi.sql
En mode console mysql -u root -p cdi < /chemin/cdi.sql Sous Phpmyadmin slectionner la base cdi "Emplacement du fichier texte" chercher le fichier cdi.sql sur le systme de fichier local Excuter Bien comparer ce fichier la structure et aux contenus des tables.

3. Sauvegarde d'une base au format SQL

Le mode console est indispensable pour programmer une sauvegarde automatique avec crontab
En mode console mysqldump - u root -p cdi > /chemin/cdi1.sql --> donner le mot de passe Sous Phpmyadmin Comme root, slectionner la base cdi "Afficher le schma de la base de donnes" Structure et donnes Transmettre Excuter choix du rpertoire, nom du fichier : cdi1.sql Comparer avec le fichier d'origine cdi.sql

4. Cration d'une table partir d'une exportation d'une table msaccess ou msexcel

1. Crer la table glossaire dans la base test


2. Avec Phpmyadmin, slectionner la base test 3. "Crer une nouvelle table sur la base test" : 4. Nom : glossaire Champs : 3 5. Excuter 6. 7. A l'aide du formulaire propos, dfinir sa structure 8. Champ Type Null primaire 9. ---------------------------------10. sigle varchar(12) not null x 11. descriptif varchar(50) not null 12. type char(1) not null 13. 14. Sauvegarder --> La nouvelle table glossaire est alors cre dans la base test ( ou dans votre base webmestre)

15. Remarquer que la requte SQL envoye par phpmyadmin pour crer la table est :

16. 17. 18. 19. 20. 21.

CREATE TABLE glossaire ( sigle VARCHAR(12) NOT NULL, descriptif VARCHAR(50) default NOT NULL, type VARCHAR(1) default NOT NULL, PRIMARY KEY (sigle) );

22. Gestion de la table Phpmyadmin permet maintenant de grer la table Observer les rubriques : Supprimer (la table), Insrer (des enregistrements) et la possibilit de modifier ou suppression de champs 23. Examiner le fichier fourni glossaire.txt Il a t obtenu en exportant une table access au format dlimit, avec le sparateur ; sans dlimitateur de texte. 24. Dans Phpmyadmin, cliquer sur insrer des donnes provenant d'un fichier de texte dans la table. Renseigner le formulaire:
25. 26. 27. 28. Emplacement du fichier texte : glossaire.txt Champs termine par ; Supprimer les autres choix Excuter

Observer les 283 enregistrements imports et supprimer le premier. TP 5 Crer de comptes, accorder des "privilges"
1. Cration des comptes d'accs

Il s'agit de crer 2 comptes pour la base cdi, l'aide de phpmyadmin : public (sans mot de passe) et admin/admin Ces utilisateurs ne doivent possder aucun droit d'administration globaux sur le serveur lui-mme, mais uniquement des droits d'accs grand public (public) et d'administration (admin) sur la base cdi
2. Cration des comptes d'accs cdi

Dans la base Mysql, table user, lien insrer un nouvel enregistrement


Base mysql; table user; action "insrer" - host localhost localhost - user public admin - mdp ..... admin -- avec fonction=PASSWORD Laisser tous les droits (globaux) No Ne pas oublir de relancer le serveur

Se connecter sous le compte admin/admin en mode console ou avec phpmyadmin; admin peut-il alors accder la gestion des utilisateurs ? Conclusion.
3. Commandes SQL

Ce sont les commandes SQL grant et revoke qui permettent d'attribuer et de retirer des droits. Exemple :

Accorder admin le privilge d'tre gestionnaire de la base cdi, avec droit d'accs distance (@% = de partout), avec certains privilves (ALL PRIVILEGES pour les attribuer tous) sur toutes (*) les tables de cdi
mysql> GRANT select,insert,update,delete ON cdi.* TO 'admin'@'%' IDENTIFIED BY "admin";

4. Attribution des privilges pour la base cdi

Conformment aux informations suivantes, l'aide de phpmyadmin (ou si on a le courage avec grant !)
Comptes | droits attribuer ----------------|-----------------------------------------------------------------admin/admin | - droits select,insert,update,delete, au niveau de la base CDI ----------------|-----------------------------------------------------------------public/... | - accs la base cdi, sans aucun privilge global | - droit SELECT (exclusivement) sur les tables inscrits, documents | - droit INSERT sur la table demande ----------------|------------------------------------------------------------------

Relancer le serveur et bien vrifier l'application de ces droits, comme admin et comme public. Remarque : il est aussi facile d'utiliser la commande grant (si on la maitrise). Ecrire les commandes grant pour crer le compte pub/pub, avec les memes droits que public. TP 6 Rapide introduction au langage SQL On peut consulter ce TP introduction SQL

ANNEXES
Accs scuris Mysql par phpmyadmin est un ensemble de scripts PHP permettant de grer compltement ses bases de donnes par le truchement d'une interface WEB distante.
phpMyAdmin

Attention ! Par dfaut l'accs la gestion des bases par phpMyAdmin n'est pas protg. Donc tout utilisateur peut lancer l'URL vers phpMyAdmin, et travers cette interface agir comme root Il faut donc placer rapidement dans le rpertoire 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 particulire. Attention, en l'absence de mot de passe sur root, il y a une totale inscurit ! Pour protger l'accs 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, slectionner la fonction PASSWORD, et mettre la valeur fctice excuter, et observer maintenant la prsence du mot de passe crypt pour root dans la table user Si on relance le serveur, maintenant Phpmyadmin ne fonctionne plus ! "accs refus pour l'utilisateur root@localhost" En effet le serveur Mysql rclame maintenant un mot de passe ..mais comment le lui donner ? Pour cela, il faut effectuer une petite modification du paramtrage dans le fichier de configuration config.inc.php. (explications dtailles 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 accder au serveur mysql :
$cfgServers[$i]['auth_type'] = 'http' $cfgServers[$i]['user'] = 'root' $cfgServers[$i]['password'] = ''

Sauvegarder, relancer le navigateur, s'authentifier comme root/fctice, prendre en main cet utilitaire. En particulier, parcourir la base systme mysql Organisation d'une base

Pour crer 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 :
mysql> USE essais mysql> CREATE TABLE carnet (num int, nom varchar(30), email varchar(30) );

On constate que 3 fichiers portant le nom de cette table carnet sont crs dans le rpertoire de la base /var/lib/mysql/essais Il en sera de mme pour nouvelle table incluse dans cette base.
carnet.MYD carnet.MYI carnet.frm contient les donnes (vide la cration) contient la descripton des index dcrit la structure de la table

Gestion des utilisateurs et systme de droits

Jusqu'ici on ne s'est intress qu' root l'administrateur du serveur. Et on a vu que les utilisateurs sont grs par l'intermdiaire de leur inscription dans la base de donnes systme mysql
Droits d'accs des utilisateurs aux bases

Le systmes de droits (ici appels privilges) sont inclus dans les 5 tables de la base de donnes mysql. Sa gestion doit demeurer le privilge exclusif de root. Il doit donc tre le seul :

crer et supprimer des utilisateurs (login, mot de passe) crer et supprimer les bases de donnes fixer les privilges des utilisateurs sur ces bases et leurs composants.

Mais il est tout--fait recommand de dlguer des tches d'administration d'une base particulire des gestionnaires (uniquement alors des privilges de cration et de mises jour des tables : ajout, suppression, modification).
Description des droits

La table mysql.user contient la liste des comptes pouvant accder au serveur et dtermine les droits GLOBAUX au niveau serveur sur l'ENSEMBLE des bases. Elle est consulte lors de CHAQUE demande de connexion, que ce soit par l'utilitaire mysql, ou tout autre mode d'accs, par exemple avec la fonction PHP mysql_connect(). Voici la structure de cette table :
Attribut Host User Password Select_priv Insert_priv Update_priv Delete_priv Index_priv Alter_priv Create_priv Drop_priv Grant_priv Y/N Y/N Y/N Y/N Y/N Y/N Y/N Y/N Y/N Valeur Signification La machine de laquelle on tente la connexion (host=localhost par dfaut) nom de connexion de l'utilisateur mot de passe mysql de l'utilisateur droit de slection droit d'insertion droit de modification droit de suppression Indexation droit de modification (table, champ) droit de cration Suppression Permission

Reload_priv Shutdown_priv Process_priv File_priv

Y/N Y/N Y/N Y/N

Relancer mysql Arreter mysql Processus Lecture et criture de fichiers (import/export)

La table mysql.db contient les privilges d'un utilisateur (autre que root) sur chaque base de donnes cre (donc pas la table mysql). Elle est consulte chaque commande SQL de cet utilisateur portant sur les tables de cette base, pour examiner s'il a le droit le "privilge" de pouvoir utiliser cette commande. Voici la structure cette table :
Attribut Host Db User Select_priv Insert_priv Update_priv Delete_priv Index_priv Alter_priv Create_priv Drop_priv Grant_priv Y/N Y/N Y/N Y/N Y/N Y/N Y/N Y/N Y/N Valeur Signification machine de laquelle on tente la connexion Base de donnes Utilisateur droit select, de passer des commandes sql SELECT droit insert, de passer des commandes INSERT droit update, de mise jour des enregistrements d'une table droit delete, d'effacement des enregistrements d'une table droit d'utiliser INDEX pour crer ou supprimer des index droit alter, pour utiliser ALTER TABLE pour modifier la structure d'une table (ou la renommer) droit create, d'utiliser CREATE pour crer de nouvelles bases ou tables droit drop, d'utiliser DROP pour supprimer une base existante (ou une table) droit grant, attribue d'autres utilisateurs Mysql les permissions que l'on possde

Les tables mysql.tables_priv et mysql.columns_priv dterminent des droits encore plus prcis des utilisateurs respectivement sur une table d'une base et sur un champ (colonne) d'une table

Utilitaires d'administration

Comment connaitre l'tat du serveur ? utilitaire mysqladmin

L'utiitaire mysqladmin est spcialis dans la gestion interne du serveur (mais aussi des bases et des utilisateurs) Ainsi, pour arrter le serveur : mysqladmin shutdown Pour connaitre la charge de travail du serveur et des statistiques, option status :
mysqladmin -p status Enter password : Uptime: 4153 Treads: 1 Questions 76 ......

Uptime donne le nombre de secondes coules depuis le lancement du serveur mysqld, Threads le nombre de processus fils, c'est--dire peu prs le nombre de connexions ouvertes par des clients

Pour connaitre le dtail de chaque connexion cliente, option processlist


mysqladmin -p processlist Enter password : Id User Host db Command Time State Info

Comment sauvegarder les bases ? utilitaire mysqldump

A la place de commandes de sauvegardes classiques comme tar, il est bien prfrable d'utiliser un outil spcialis mysqldump, qui gnre le source crit en commandes SQL. La restauration consiste alors excuter ce fichier de commandes. Cet utilitaire possde de nombreuses options : voir man mysqldump Pour sauvegarder le contenu de la base essais dans un fichier essais.sql, situ dans /home/mysql.svg (l'option -p pour faire demander le mot de passe )
mkdir /home/mysql.svg mysqldump -p essais > less essais.sql /home/mysql.svg/essais.sql

Pour restaurer la base essais, si ncessaire procder d'abord sa (re)cration, puis importer le fichier sauvegard prcdemment essais.sql, en entre de la commande mysql. La ligne suivante va alors produire l'excution des commandes SQL qu'il contient, et donc reconstituer les structures des tables et y rinsrer tous leurs enregistrements
mysql -p essais < /home/mysql.svg/essais.sql

Ici, le gestionnaire admin ne sauvegarde que les structures des tables (option -d), et place le rsultat dans son rp.personnel.
mysqldump -u admin -p -d essais > less /home/admin/essais.sql ~/essais.sql

On peut sauvegarder sparment la structure et les donnes de chaque table de la base essais, dans un rpertoire /home/mysql.svg Pour chaque table de la base essais, 2 fichiers sont gnrs. Ainsi carnet.sql et carnet.txt

contiennent respectivement les commandes de cration de la table carnet, et ses enregistrements.


mysqldump -p essais -T /home/mysql.svg cd /home/mysql.svg ll

Comment vrifier et rparer les bases ? utilitaire myisamchk

L'utilitaire myisamchk est surtout utilis pour retrouver l'intgrit d'une table endommage. Il doit tre lanc pendant un arrt 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

L'option -r dfragmente le fichier si ncessaire (en cas de nombreux Deteted blocks)


myisamchk -r cdi.eleves

Perte du mot de passe mysql

Voici une mthode pour rcuprer (ou plutt re-crer) le mot de passe de l'utilisateur root de Mysql .. en cas de perte .. 1. arrter le Serveur Mysql /etc/init.d/mysql stop 2. On relance en inhibant de l'authentification /usr/sbin/mysqld --skip-grant-tables & 3. Mettre le mot de passe en rentrant comme root dans phpmyadmin 4. ou en ligne de commande
mysql mysql> use mysql mysql> update user set password=PASSWORD("nouveau_mot_de_passe") where user='root'; mysql> quit

5. Relancer mysql /etc/init.d/mysql restart si problme, lancer d'abord killall mysqld

You might also like