PrésentationInstallation  |  Mise en place des utilisateurs   |    Création d'une base de données  ]

Dernière modif 7 mars 2007

MySQL

Manips diverses

Présentation

Cette n'a pas pour but de vous présenter ce qu'est un SGBD et encore moins de vous expliquer le langage SQL mais de vous présenter l'installation et la configuration de MySQL afin de pouvoir l'utiliser avec Apache+PHP.
Pour une installation de MySQL avec compilation complète voir la page correspondante.

Cette page concerne la Mandriva et la ubuntu, sauf mention du contraire les manips sont à faire quelque soit la distribution.

Le chapitre Installation concerne l'installation des packages binaires, pour une installation en utilisant les sources (version plus récente) voir ma page installation apache+PHP+MySQL.
Les autres chapitres concernent les deux types d'installation.

[Retour haut de la page]

Installation

Vous avez le choix d'installer les packages binaires, ou d'installer les sources, je préfère la dernière option car elle permet d'obtenir une version optimisée pour la machine. Pour plus d'info sur la compil, voir la page installation apache+PHP+MySQL
Pour une install par package un urpmi mysql devrait faire l'affaire (mysql-server sous ubuntu).

Cela va nous créer un ensemble d'exécutables sous /usr/sbin (ceux réservés à root) et sous /usr/bin (pour tous les utilisateurs), par ailleurs un répertoire /var/lib/mysql va être créé. Le fichier de démarrage du daemon MySQL se trouve sous /etc/rc.d/init.d pour une Mandriva et sous /etc/init.d sous ubuntu.

L'installation par rpm n'a pas lancé le daemon il faudra le faire manuellement en tapant

/etc/rc.d/init.d/mysql start

NOTE Vous noterez que si vous faites un:

ps aux | grep mysqld

L'utilisateur mysql est proprio du daemon mysqld. Vous vous rendrez compte que même si c'est root qui lance le daemon aussitôt après  c'est l'utilisateur mysql qui en devient le proprio, ainsi si jamais il y avait une faille de sécurité dans MySQL, le hacker ne se retrouverait pas root mais mysql avec les droits limités qui vont avec.


[Retour haut de la page]

Mise en place des utilisateurs

La première chose à faire est de mettre un mot de passe pour root pour l'accès à l'administration des bases de données. La commande à taper en tant que root est:

mysql_secure_installation

voilà le résultat

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!


In order to log into MySQL to secure it, we'll need the current
password for the root user.  If you've just installed MySQL, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MySQL
root user without the proper authorisation.

You already have a root password set, so you can safely answer 'n'.

Change the root password? [Y/n] n
 ... skipping.

By default, a MySQL installation has an anonymous user, allowing anyone
to log into MySQL without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] Y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] Y
 ... Success!

By default, MySQL comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] Y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] Y
 ... Success!

Cleaning up...



All done!  If you've completed all of the above steps, your MySQL
installation should now be secure.

Thanks for using MySQL!


Le mot de passe peut être différent de celui du login.

Maintenant on va créer un compte utilisateur (olivier dans mon exemple), pour cela on doit se connecter en tant qu'administrateur de la base à la base de donnée mysql contenant les infos sur les utilisateurs et leurs droits.

mysql -u root -p mysql
Enter password:

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

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4 to server version: 5.0.33

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

mysql>

A présent on va entrer l'utilisateur olivier qui sera un super utilisateur avec les mêmes droits que root:

mysql>  INSERT INTO user
        ->  VALUES('localhost','olivier',PASSWORD('mot-de-passe'),
        ->  'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y',' ',' ',' ',' ','0','0','0');
Query OK, 1 row affected (0.00 sec)

NOTE Il n'est pas obligatoire de rentrer le login pour le nom d'utilisateur et le mot de passe de login.

Pour voir si la saisie s'est bien passée:

mysql> SELECT * FROM user;

Host User Password Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Reload_priv Shutdown_priv Process_priv File_priv Grant_priv References_priv Index_priv Alter_priv Show_db_priv Super_priv Create_tmp_table_priv Lock_tables_priv Execute_priv Repl_slave_priv Repl_client_priv ssl_type ssl_cipher x509_issuer x509_subject max_questions max_updates max_connections
localhost root 6bf57a02084c345b Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y




0
0
0
localhost olivier 588c797a754bd00a Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y




0 0

5 rows in set (0.00 sec)

Maintenant pour prendre tout ça en compte

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.08 sec)

Pour quitter

mysql>quit

[Retour haut de la page]

Création de tables

Maintenant notre utilisateur olivier va créer une table qui nous servira plus tard pour nos expérimentations avec Apache. Il doit d'abord se connecter:

mysql -u olivier -p
Enter password:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5 to server version: 5.0.33

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

mysql>

Pour voir la liste des bases de données disponibles, on tapera:

mysql> SHOW DATABASES;
+----------------+
| Database       |
+----------------+
| mysql          |
+----------------+
4 rows in set (0.00 sec)

On va maintenant créer une base de données essai:

mysql> CREATE DATABASE essai;
Query OK, 1 row affected (0.00 sec)

On va utiliser maintenant cette base de donnée

mysql> USE essai
Database changed

Comme la base vient d'être crée, elle ne contient aucune table, pour s'en convaincre il suffit de taper:

mysql> SHOW TABLES;
Empty set (0.00 sec)

Pour notre première exemple Apache+PHP+MySQL, on va créer la table suivante:

mysql> CREATE TABLE coord (
    -> nom VARCHAR(20),
    -> prenom VARCHAR(20),
    -> email VARCHAR(30)
    -> );
Query OK, 0 rows affected (0.03 sec)

Jetons un coup d'oeil maintenant sur les tables disponibles:

mysql>  SHOW TABLES;
+---------------------+
| Tables in essai    |
+---------------------+
| coord                  |
+---------------------+
1 row in set (0.00 sec)

La table nouvellement créée apparaît bien. Pour avoir le détail de cette table, on tapera:
 

mysql> DESCRIBE coord;
+-----------+--------------+--------+------+-----------+------+
| Field      | Type           | Null   | Key  | Default |Extra |
+-----------+--------------+--------+------+-----------+------+
| nom       | varchar(20) | YES  |          | NULL    |         |
| prenom  | varchar(20) | YES  |          | NULL    |         |
| email     | varchar(30) | YES  |          | NULL    |         |
+-----------+--------------+--------+------+-----------+------+
3 rows in set (0.00 sec)

Pour notre deuxième exemple Apache+PHP+MySQL, on créera la table suivante:

 mysql> CREATE TABLE ref (
         -> date VARCHAR(20),
         -> host VARCHAR(20),
        -> ip VARCHAR(15),
        -> os VARCHAR(20),
        -> page VARCHAR(30)
        -> );
Query OK, 0 rows affected (0.05 sec)

Elle contiendra les informations sur les visiteurs du site. A présent pour quitter tapez simplement quit.

Reportez vous maintenant à la page Apache et au paragraphe correspondant pour la manipulation de ces tables avec Apache+PHP.
 
 
[Retour page d'accueil FUNIX] [Retour haut de la page]