Il était une fois MySQL 5

Portrait de titouille

Oui, ça fait déjà un moment qu'on est au courant, MySQL 5 est dehors déjà depuis quelques temps.
Le fait est qu'actuellement, j'aimerai développer un projet d'envergure, et gérer tout ça avec MySQL 4.x risque de devenir rapidement un problème. Entre l'intégrité référentielle non gérée, l'impossibilité d'exécuter des transactions (lots de requêtes "sécurisés" pour assurer l'intégrité des données) ou encore des vues ou des procédures stockées, le développeur, même aguérri, sait que le travail de codage sera hardu et sujets à des bugs (merci à Blue d'avoir fait ressortir mes connaissances à ce sujet Wink ).

L'intérêt de MySQL5 est que ce SGBD (Système de gestion de base de données) propose (déjà en version alpha, espérons une version stable pour bientôt) le support de certains automatismes tels que les procédures stockées, les vues ou les triggers. La future alpha (5.1.6) intègre un gestionnaire de tâches permettant de programmer l'exécution de processus à un moment donné, par exemple toutes les semaines le lundi à 8h00.

Mais ceci viendra avec mes découvertes et les nouvelles versions de MySQL. J'essaierai de faire quelques tickets pour aborder ces différentes nouveautés, pourquoi les utiliser, qu'est ce qu'elles apportent, ...

Pour débuter, nous allons déjà installer la dernière version alpha de MySQL (sur Windows), afin que toutes les nouveautés du SGBD soient disponibles.

à l'adresse suivante, vous trouverez les différentes versions de MySQL 5 disponibles, dans la section "MySQL Community Edition -- Database server and client"

Choisissez la dernière version (en général Alpha release). Pour ma part, la version que j'ai téléchargée est la 5.1.5. C'était une version /noInstall, aucune version avec installer n'était disponible.
Une fois téléchargé, dézippez le contenu du fichier à l'endroit que vous désirez (chez moi : c:/dev/db/mysql/mysql515/)

Allez dans le répertoire de base de votre distribution, et ouvrez le fichier my-medium.ini (c'est celui que j'ai pris. vous pouvez choisir de prendre un autre fichier, mais lisez bien les instructions en début de chaque fichier pour savoir lequel est adéquat pour votre configuration.

Une fois ce fichier ouvert, trouvez la section [mysqld] et inscrivez les lignes suivantes :

------------------------------------------------------
# set basedir to your installation path
basedir=C:/dev/db/mysql/mysql515
# set datadir to the location
datadir=C:/dev/db/mysql/mysql515/data
------------------------------------------------------

en veillant à spécifier le bon chemin vers votre dossier d'installation.
Puis allez sur fichier -> enregistrer sous, renommez le fichier en my.ini et enregistrez le dans le répertoire Windows (WINNT, WINDOWS selon votre système d'exploitation)

Une fois ceci fait, vous pouvez tenter de lancer votre serveur en ouvrant une nouvelle commande DOS (menu démarrer -> exécuter -> "cmd" + Enter) et en tappant l'instruction suivante :

------------------------------------------------------
C:>c:/dev/db/mysql/mysql515/bin/mysqld-max-nt" --console
------------------------------------------------------

A ce moment, vous devriez voir affiché une série de messages du genre :

------------------------------------------------------
InnoDB: The first specified datafile c:devdbmysqlmysql515dataibdata1 did not exist:
InnoDB: a new database to be created!
InnoDB: Setting file c:devdbmysqlmysql515dataibdata1 size to 209715200
InnoDB: Database physically writes the file full: wait...
InnoDB: Log file c:devdbmysqlmysql515dataib_logfile0 did not exist: new to be created
InnoDB: Setting log file c:devdbmysqlmysql515dataib_logfile0 size to 31457280
InnoDB: Log file c:devdbmysqlmysql515dataib_logfile1 did not exist: new to be created
InnoDB: Setting log file c:devdbmysqlmysql515dataib_logfile1 size to 31457280
InnoDB: Log file c:devdbmysqlmysql515dataib_logfile2 did not exist: new to be created
InnoDB: Setting log file c:devdbmysqlmysql515dataib_logfile2 size to 31457280
InnoDB: Doublewrite buffer not found: creating new
InnoDB: Doublewrite buffer created
InnoDB: creating foreign key constraint system tables
InnoDB: foreign key constraint system tables created
060208 16:18:57 InnoDB: Started; log sequence number 0 52515
------------------------------------------------------

puis ensuite ces 2 lignes qui vous indiquent que le serveur est démarré.

------------------------------------------------------
060208 16:18:57 [Note] mysqld-max-nt: ready for connections.
Version: '5.1.5-alpha-nt-max-log' socket: '' port: 3306 MySQL Community Edition (GPL) - Max
------------------------------------------------------

Nous appelerons cette fenêtre la fenêtre "Serveur".

Vous pouvez ensuite lancer une nouvelle fenêtre de commande DOS pour tester votre installation.

Lancez donc une nouvelle commande DOS, placez vous dans le répertoire /bin et tappez la commande suivante :

------------------------------------------------------
mysql
------------------------------------------------------

et validez. ceci doit vous afficher les données suivantes :

------------------------------------------------------
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 3 to server version: 5.1.5-alpha-nt-max-log

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

mysql>
------------------------------------------------------

A partir de là, vous pouvez manipulez vos base de données.
Nous allons commencer par modifier quelques valeurs, afin de sécuriser un peu le système :

Tout d'abord, ajoutons un mot de passe à l'utilisateur "root" (Administrateur)

------------------------------------------------------
mysql> SET PASSWORD FOR root@localhost = PASSWORD('nouveauPwd');
Query OK, 0 rows affected (0.00 sec)
------------------------------------------------------

(pour plus d'infos sur la manière de sécuriser d'entrée le serveur (ou d'installer MySQL5 en version "installer", lizez le tutorial suivant et la partie 3.2 pour la sécurité en particulier)

Maintenant que nous avons ajouté un mot de passe à l'utilisateur "root", il faudra spécifier le paramètre -p pour pouvoir insérer votre mot de passe lors des connexions et des actions nécessitant un niveau de sécurité.

Exemple pour l'arrêt du serveur :

------------------------------------------------------
c:>c:/dev/db/mysql/mysql515/bin/mysqladmin -u root -p shutdown
Enter password:*******
------------------------------------------------------

Une fois votre mot de passe entré et l'action validée, vous pourrez voir sur la fenêtre "Serveur" de nouvelles données s'inscrire :

------------------------------------------------------
060208 16:27:37 [Note] mysqld-max-nt: Normal shutdown

060208 16:27:39 InnoDB: Starting shutdown...
060208 16:27:41 InnoDB: Shutdown completed; log sequence number 0 52515
060208 16:27:41 [Note] mysqld-max-nt: Shutdown complete

C:/dev/db/mysql/mysql515/bin>
------------------------------------------------------

Nous pouvons également lancer une requête à partir de l'outil mysql :
Relancons une nouvelle commande DOS, pointons sur le répertoire bin et lançons l'outil mysql

------------------------------------------------------
C:/dev/db/mysql/mysql515/bin>mysql -u root -p
Enter password: *******

# sélection d'une base de donnée dans le SGBD
mysql> use mysql
-> Database changed
# exécution d'une requête simple
mysql> select * from user;
-> +-----------+------+-------------------------------------------+-------------+--
-----------+-------------+-------------+-------------+-----------+-------------+
---------------+--------------+-----------+------------+-----------------+------
------+------------+--------------+------------+-----------------------+--------
----------+--------------+-----------------+------------------+-----------------
-+----------------+---------------------+--------------------+------------------
+----------+------------+-------------+--------------+---------------+----------
---+-----------------+----------------------+
| Host | User | Password | Select_priv | I
nsert_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_ta
bles_priv | Execute_priv | Repl_slave_priv | Repl_client_priv | Create_view_priv
| Show_view_priv | Create_routine_priv | Alter_routine_priv | Create_user_priv
| ssl_type | ssl_cipher | x509_issuer | x509_subject | max_questions | max_updat
es | max_connections | max_user_connections |
+-----------+------+-------------------------------------------+-------------+--
-----------+-------------+-------------+-------------+-----------+-------------+
---------------+--------------+-----------+------------+-----------------+------
------+------------+--------------+------------+-----------------------+--------
----------+--------------+-----------------+------------------+-----------------
-+----------------+---------------------+--------------------+------------------
+----------+------------+-------------+--------------+---------------+----------
---+-----------------+----------------------+
| localhost | root | *850AD02B26C1626F64E7D28390E103EC7034C573 | Y | Y
| Y | Y | Y | Y | Y |
Y | Y | Y | Y | Y | Y
| Y | Y | Y | Y | Y
| Y | Y | Y | Y
| Y | Y | Y | Y
| | | | | 0 |
0 | 0 | 0 |
+-----------+------+-------------------------------------------+-------------+--
-----------+-------------+-------------+-------------+-----------+-------------+
---------------+--------------+-----------+------------+-----------------+------
------+------------+--------------+------------+-----------------------+--------
----------+--------------+-----------------+------------------+-----------------
-+----------------+---------------------+--------------------+------------------
+----------+------------+-------------+--------------+---------------+----------
---+-----------------+----------------------+
1 row in set (0.00 sec)

mysql>exit;
Bye

C:/dev/db/mysql/mysql515/bin>
------------------------------------------------------

Ok, nous avons pu nous connecter, exécuter une requête, se déconnecter, c'est déjà un bon début.

Mais vous en conviendrez, la ligne de commande, pour travailler, ce n'est pas vraiment l'idéal.
Il y a déjà quelques astuces que nous pouvons appliquer pour se simplifier la vie, et quelques programmes à utiliser Smile

Tout d'abord, nous allons installer MySQL en tant que service. Ainsi, nous pourrons le démarrer et l'arrêter quand bon nous semble, en passant par une commande globale plutôt qu'une ligne incompréhensible.

Commençons par fermer notre serveur :

------------------------------------------------------
c:>c:/dev/db/mysql/mysql515/bin/mysqladmin -u root -p shutdown
Enter password:*******
------------------------------------------------------

puis ensuite, installons MySQL en tant que service Windows :

------------------------------------------------------
c:>c:/dev/db/mysql/mysql515/bin/mysqld-max-nt --install
------------------------------------------------------

MySQL est maintenant installé en tant que service, et peut être démarré via la commande

------------------------------------------------------
net start mysql
------------------------------------------------------

et arrêté par

------------------------------------------------------
net stop mysql
------------------------------------------------------

Pour enlever MySQL en tant que service, utilisez simplement l'option --remove à la place de l'option --install

Actuellement, le service est installé et démarré automatiquement à chaque démarrage de windows. Vous pouvez également installer le service en mode manuel en passant par la commande --install -manual.
Si vous voulez passez en mode manuel (ou vice-versa), vous pouvez également faire un click-droit sur le poste de travail puis choisir l'option "Gérer". Ensuite, sélectionnez la branche "services et applications" puis "services" et trouvez le service "MySQL". Faites un click-droit sur ce dernier pour afficher ses propriétés, et modifiez le type de démarrage à votre gré.
(pour de plus amples informations, reportez vous à la page correspondante sur le site officiel MySQL.

Enfin, installez MySQLAdministrator et MySQLQueryBrowser afin de pouvoir gérer et questionner vos base de données.

L'outil d'administration permet de gérer, créer, modifier, supprimer des bases de données et leur structure.
Le second outil permet d'interroger les bases de données, d'y inscrire de nouvelles données, de créer des vues, des procédures stockées, etc...

Voilà. Pour un début, c'est déjà un début. Par la suite, nous verrons comment modéliser une base de données et injecter sa structure dans notre SGBD.
Ensuite nous pourrons parler de réflexion pour préparer les éléments dont nous avons besoin pour créer une application et utiliser des mécanismes SQL pour gérer un maximum de choses.

Mais tout ça est musique d'avenir. J'espère que ce premier ticket sucitera l'intérêt que cette version 5 mérite.

A bientôt Wink





Bon, comme me l'a souligné

Portrait de titouille

Bon, comme me l'a souligné FunkC, je me suis un peu mélangé les pinceaux au niveau des versions et sous-versions...

Au début du ticket, j'explique que la nouvelle alpha (qui correspondait à l'époque à la 5.1.5, la 5.1 étant passée en béta actuellement) apportait son lot de nouveautés avec les triggers et les procédures stockées, les vues, etc... mais je m'étais trompé. C'est en fait MySQL5.0 qui apporte ces différentes améliorations et nouveautés, dans les versions 5.0.x.

MySQL5.1 apporte quant à lui des nouveautés tel que le gestionnaire de taches, logger les infos dans des tables au lieu des habituels fichiers txt, le partitionnement d'une table en plusieurs tables, mais qui sera vu du côté utilisateur comme une seule table, et encore d'autres que vous pourrez lire en détail en suivant ce lien

>Le fait est qu’actuellement, j’aimerai développer un projet **d’envergure**, et gérer tout ça avec MySQL 4.x risque de devenir rapidement un problème

Hello l'ami, c'est pas très sympa pour ceux qui bosses depuis des années sous MySQL 4.x Laughing out loud

Sinon sympa cette idée de suite de ticket Wink

Portrait de titouille

Ben c'est le choix de chacun Smile C'est justement le moment de commencer à se pencher sur les nouvelles fonctionnalités de MySQL 5, histoire de pas être trop à la rue par la suite.
Et c'est tout de même bien plus pratique d'utiliser des procédures stockées, des vues, des triggers, que de devoir tout gérer par code via php (pour moi qui utilise php).
Moi aussi, j'ai bossé plusieurs années avec MySQL 4. Mais durant mes études, on travaillait avec des outils du genre InterBase, SQLServer et d'autres SGBDR complets. Quand tu rentres sur des projets assez lourd, c'est quand même plus simple de travailler avec des outils adaptés, même si c'est faisable avec mySql 4.x.
Je préfère ouvrir la voie maintenant sur MySQL 5 que d'attendre indéfiniement et devoir coder milles tests côté serveur alors qu'une procédure suffirait...

Après, si on aime se compliquer la vie, c'est son choix (ou celui du client, hem) Smile

Je n'ai jamais dit le contraire Wink deplus oui nous essayons petit à petit de migrer vers MySQL 5 mais sur un existant c moins facile que sur un nouveau né Wink.