|
Configuration de MySQL Comment créer une table ?
- Pour créer la table carnet dans la base essais, il faut se connecter au serveur, et passer la commande :
mysql> CREATE TABLE essais.carnet (num int, nom varchar(30), email varchar(30) );
- On constate que 3 fichiers portant le nom de la table 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.
| carnet.MYD |
contient les données (vide à la création) |
| carnet.MYI |
contient la descripton des index |
| carnet.frm |
décrit la structure de la table |
Comment connaitre l'état du serveur ? utilitaire mysqladmin
- L'utiitaire mysqladmin est spécialisé dans la gestion interne du serveur (mais aussi des bases et des utilisateurs)
Ainsi, pour arrêter 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 écoulées depuis le lancement du serveur mysqld, Threads le nombre de processus fils, c'est-à-dire à peu près le nombre de connexions ouvertes par des clients
- Pour connaitre le détail 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 préférable d'utiliser un outil spécialisé mysqldump , qui génére le source écrit en commandes SQL. La restauration consiste alors à exécuter ce fichier de commandes.
- Cet utilitaire posséde 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 > /home/mysql.svg/essais.sql $ less essais.sql
- Pour restaurer la base essais , si nécessaire procéder d'abord à sa (re)création, puis importer le fichier sauvegardé précédemment essais.sql , en entrée de la commande mysql . La ligne suivante va alors produire l'exécution des commandes SQL qu'il contient, et donc reconstituer les structures des tables et y réinsérer 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 résultat dans son rép.personnel. $ mysqldump -u admin -p -d essais > ~/essais.sql $ less /home/admin/essais.sql
- On peut sauvegarder séparément la structure et les données de chaque table de la base essais, dans un répertoire /home/mysql.svg Pour chaque table de la base essais, 2 fichiers sont générés. Ainsi carnet.sql et carnet.txt contiennent respectivement les commandes de création de la table carnet, et ses enregistrements. # mysqldump -p essais -T /home/mysql.svg # cd /home/mysql.svg ; ll
Comment vérifier et réparer les bases ? utilitaire myisamchk
- 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 indiquer le chemin. # myisamchk -d /var/lib/mysql/cdi/eleves ISAM files: eleves Data records : 150 Deteted blocks: 0 .........
- L'option -r défragmente le fichier si nécessaire (en cas de nombreux Deteted blocks )
# myisamchk -r cdi.eleves
Droits d'accès aux bases Ils sont inclus dans les 5 tables de la base de données mysql , dont la gestion est le privilège de root.
L'administrateur général root est le seul à pouvoir y accéder (et il doit demeurer le seul !), c'est donc le seul
- à créer des utilisateurs (login, mot de passe)
- à les supprimer
- à fixer leur droits (on dit dans le contexte "privilèges") sur les bases, et à les modifier.
Ce qui ne signifie pas qu'il soit impossible de déléguer des tâches d'administration de bases à d'autres utilisateurs.
Description des droits d'accès MySQL
- La table mysql.user contient la liste des comptes pouvant accéder au serveur et détermine les droits au niveau serveur sur l'ensemble des bases. Elle est consultée lors de chaque demande de connexion (essentiellement par l'utilitaire mysql, et par la fonction PHP mysql_connect()). Voici la structure de cette table
Attribut Valeur Signification
| Host |
|
La machine de laquelle on tente la connexion (host=localhost par défaut) |
| User |
|
nom de connexion de l'utilisateur |
| Password |
|
mot de passe mysql de l'utilisateur |
| Select_priv |
Y/N |
droit de sélection |
| Insert_priv |
Y/N |
droit d'insertion |
| Update_priv |
Y/N |
droit de modification |
| Delete_priv |
Y/N |
droit de suppression |
| Index_priv |
Y/N |
Indexation |
| Alter_priv |
Y/N |
droit de modification (table, champ) |
| Create_priv |
Y/N |
droit de création |
| Drop_priv |
Y/N |
Suppression |
| Grant_priv |
Y/N |
Permission |
| Reload_priv |
Y/N |
Relancer mysql |
| Shutdown_priv |
Y/N |
Arreter mysql |
| Process_priv |
Y/N |
Processus |
| File_priv |
Y/N |
Lecture et écriture de fichiers (import/export) |
- 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 :
Attribut Valeur Signification
| Host |
|
machine de laquelle on tente la connexion |
| Db |
|
Base de données |
| User |
|
Utilisateur |
| Select_priv |
Y/N |
droit select, de passer des commandes sql SELECT |
| Insert_priv |
Y/N |
droit insert, de passer des commandes INSERT |
| Update_priv |
Y/N |
droit update, de mise à jour des enregistrements d'une table |
| Delete_priv |
Y/N |
droit delete, d'effacement des enregistrements d'une table |
| Index_priv |
Y/N |
droit d'utiliser INDEX pour créer ou supprimer des index |
| Alter_priv |
Y/N |
droit alter, pour utiliser ALTER TABLE pour modifier la structure d'une table (ou la renommer) |
| Create_priv |
Y/N |
droit create, d'utiliser CREATE pour créer de nouvelles bases ou tables |
| Drop_priv |
Y/N |
droit drop, d'utiliser DROP pour supprimer une base existante (ou une table) |
| Grant_priv |
Y/N |
droit grant, attribue à d'autres utilisateurs Mysql les permissions que l'on possède |
Les tables mysql.tables_priv et mysql.columns_priv déterminent des droits plus précis des utilisateurs respectivement sur une table d'une base et sur un champ d'une table, dont on ne parlera pas ici.
- Root peut tout-à-fait intervenir par requête SQL dans la base mysql afin d'administrer les comptes
Exemple en mode moniteur mysql :
Il s'agit de créer un utilisateur jean , de mot de passe jeannot qui doit posséder tous les privilèges (uniquement) sur les tables de la base etablissement . Puis on change son mot de passe pour lapin
root passe les commandes SQL suivantes à la base système mysql
mysql>USE mysql mysql>INSERT INTO user (host, user, password) VALUES ('localhost', 'jean', PASSWORD('jeannot') ); mysql>INSERT INTO db VALUES ('localhost', 'etablissement', 'jean', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y' ); mysql>UPDATE user SET password = PASSWORD('lapin') WHERE user='jean' ;
- Ou root peut utiliser les commandes GRANT et REVOKE déjà présentées. mysql>USE mysql mysql>GRANT ALL PRIVILEGES ON etablissement.* TO jean IDENTIFIED BY 'jeannot' ;
Méthode de détermination des privilèges Comment le moteur Mysql utilise t-il les tables précédentes pour déterminer les réponses à des requêtes de connexion d'un utilisateur à une base, puis face à une requête SQL portant sur les tables de cette base ?
Pour plus de détail, consulter dans la doc, la page manuel_Privileges. html
Gestion à distance
- Le problème
Toto est l'administrateur de la base de données appelée films , située sur la machine appelée serveur.bahut.fr . Il souhaite la gérer à l'aide du moniteur mysql, mais à distance, à partir de n'importe quelle station du réseau de l'établissement (dont le nom de domaine est supposé bahut.fr ).
Pour le moment, il n'est répertorié dans la table d'administration mysql.user que comme l'utilisateur local toto@localhost
Quelle commande root devra t-il passer ?
- root crée un nouvel utilisateur de nom toto et d'hôte %.bahut.fr
Le symbole % est ici un caractère générique qui signifie "toute station du domaine" $ mysql -u root -p ..... mysql> GRANT ALL PRIVILEGES ON films.* TO 'toto@%.bahut.fr' IDENTIFIED BY "toto" ;
- toto teste son nouveau privilège à partir de la station pc12. Quelle question pose t-il ?
On suppose que le nom de machine bahut est connue (par fichier /etc/hosts ou DNS) [toto@pc12 toto] $ mysql -h serveur -u toto -p films Welcome ... mysql> SELECT nom_realisateur, duree, annee FROM realisateur, mesFilmsPreferes WHERE titre LIKE '%titanic% AND mesFilmsPreferes.num_film = realisateur.num_film ;
Administration par phpMyAdmin
phpMyAdmin est un ensemble de scripts PHP permettant de gérer complètement ses bases de données par le truchement d'une interface WEB distante.
- 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.
- 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 mysql : $cfgServers[$i]['auth_type'] = 'http' $cfgServers[$i]['user'] = 'root' $cfgServers[$i]['password'] = ''
- Accès réseau
- Il faut préciser l'URL absolue du répertoire d'accueil des scripts PHP de Phpmyadmin sur le serveur WEB
A partir du paramétrage par défaut à l'installation
$cfg['PmaAbsoluteUri'] = 'http://127.0.01/phpMyAdmin-2.4.0/';
remplacer 127.0.0.1 par l'ip ou le nom DNS du serveur Web qui l'héberge
- Il n'y a aucune raison que le serveur MYSQL que Phpmyadmin doit gérer, se trouve sur la meme machine (ce qui est le cas d'une installation "globale" réalisée par un portage du type EASYPHP sur machine Windows).
[Precédent] [Sommaire] [Suivant] [Haut] |
|