Archive for avril, 2009

(<- précédent)

Créer un événement

Pour créer notre premier événement, un coup d’oeil dans la documentation de MySQL nous donne les informations suivantes:

CREATE
[DEFINER = { user | CURRENT_USER }]
EVENT
[IF NOT EXISTS]
nom_évènement
ON SCHEDULE moment
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE | DISABLE ON SLAVE]
[COMMENT 'commentaire']
DO requêtes_sql;
moment:
AT timestamp [+ INTERVAL intervalle] ...
| EVERY interval
[STARTS timestamp [+ INTERVAL intervalle] ...]
[ENDS timestamp [+ INTERVAL intervalle] ...]

Les clauses entre crochets sont optionnelles, pour nous faciliter la tâche, ignorons les pour le moment. Comme tous les objets de la base de données, notre événement a un nom: nom_évènement . Il se lance à un moment: moment, pour exécuter des requêtes: requêtes_sql.

Le lancement de l’évènement est soit ponctuel (AT), soit récurrent (EVERY).

Armé de ces quelques éléments, empressons-nous de créer notre premier événement.

Commençons par créer et nous connecter à la base de données dans laquelle se dérouleront nos tests, la base de données _event, et ensuite créons la table insert_event, qui accueillera les données insérées grâce à notre événement.

mysql> CREATE DATABASE _event;
mysql> USE _event;
mysql> CREATE TABLE _event.insert_event (
moment timestamp,
fois tinyint unsigned,
action char(50)
) ENGINE = MyISAM;
enfin, créons notre événement:
mysql> CREATE EVENT _event.premier_event
ON SCHEDULE AT CURRENT_TIMESTAMP
COMMENT ‘Insertion des données dans la table
DO
INSERT INTO _event.insert_event ( moment, fois, action ) VALUES (now(), 0, ‘Mon premier event’);

Quelques explications s’imposent. L’évènement premier_event s’exécute dès sa création, car le moment choisi est CURRENT_TIMESTAMP,de plus il ne s’exécute qu’un fois à cause de la clause AT. Le comportement programmé est ici très simple, il s’agit simplement d’insérer un enregistrement dans la table insert_event. Pour le vérifier il suffit de taper la requête suivante:

mysql> SELECT  *  FROM  insert_event;
+---------------------+------+-------------------+
| moment              | fois | action            |
+---------------------+------+-------------------+
| 2008-05-29 20:46:25 |    0 | Mon premier event |
+---------------------+------+-------------------+

Notre événement à également laissé des traces dans le fichier de journalisation des erreurs (error log):

080529 20:46:25 [Note] Event Scheduler: scheduler thread started with id 2
080529 20:46:25 [Note] Event Scheduler: Last execution of _event.premier_event. Dropping.
080529 20:46:25 [Note] Event Scheduler: [root@localhost].[_event.premier_event] started in thread 3.
080529 20:46:25 [Note] Event Scheduler: Dropping _event.premier_event
080529 20:46:25 [Note] Event Scheduler: [root@localhost].[_event.premier_event] executed successfully in thread 3.

Ce fichier d’erreurs nous apprend essentiellement deux choses: premièrement que l’évènement s’est déroulé correctement (c’est pour ainsi dire une bonne nouvelle) et deuxièmement que l’évènement à été effacé. En effet, un événement qui ne s’exécute qu’une seule fois n’est par défaut pas préservé (ON COMPLETION NOT PRESERVE) après son exécution.

Pour nous remettre de toutes ces émotions, explicitons les clauses optionnelles de la syntaxe du CREATE EVENT:

DEFINER: le créateur de l’évènement.

IF NOT EXISTS: clause permettant de ne pas générer de messages d’erreurs si un évènement du même nom existe au moment de la création.

ON COMPLETION [NOT] PRESERVE: permet de rendre un événement à exécution unique, persistant dans la table système mysql.event après son exécution.

ENABLE | DISABLE | DISABLE ON SLAVE: active / désactive un événement. Attention un événement désactivé est effacé au redémarrage du serveur MySQL.

COMMENT : Ajouter un commentaire. (ce qui est, du reste, une excellente idée)

(à suivre… event scheduler: Gérer les évènements)

Tags: , ,

21
avr

Oracle achète SUN (donc MySQL)

   Posted by: freshdaz    in Divers, MySQL

Bonjour,

Comme vous le savez surement, Oracle a acheté SUN Microsystems pour la modique somme de 7 milliards de dollars (environs). Comme tout le monde j’ai été complètement surpris et un peu abasourdi :) par cette information.
Une question me vient à l’esprit, est-ce que le départs des (de certains) historiques de MySQL est lié à ce rachat ?
Car, en y repensant, Oracle a à plusieurs reprise tenté d’acheter MySQL, et d’ailleurs les moteurs de stockages InnoDB et Berkeley DB appartiennent déjà à Oracle !

Je n’irai pas jusqu’à dire qu’Oracle rachète SUN pour MySQL :D Mais cet envie « historique » d’achat de MySQL peut permettre d’espérer que les décideurs aient déjà réfléchis à la question (se serait un moindre mal).

Cependant, il faut quand même garder à l’esprit que MySQL est un produit Open source en GPL et que des forks existent déjà…

Wait and see

P.S. un commentaire de Pascal Borghino (président du MUG): http://www.lemagit.fr/article/sun-java-oracle-developpement/3071/1/oracle-sun-open-source-vigilant-craint-quelques-degats/

Olivier DASINI

informations complémentaires: http://dasini.net/blog/2009/07/03/rachat-de-sun-par-oracle-la-communaute-reagit-sur-php-tv/

Tags: ,

Poursuivons l’exploration des fonctionnalités phares de MySQL 5.1, et penchons-nous sur le programmateur d’évènements (Event Scheduler) présent depuis MySQL 5.1.6 . Cet article est rédigé avec la version 5.1.22 de MySQL.

Qu’est-ce qu’un programmateur d’évènements ?

Le programmateur d’événements ou « event scheduler » offre la possibilité, à l’administrateur de base de données, de déclencher l’exécution de requêtes programmées directement dans le serveur MySQL. Ce planificateur de tâches (CRON-like) interne permet donc d’automatiser très simplement des tâches à des intervalles réguliers, ou à heure fixe, sans avoir besoin de configurer le système sur lequel la base de données fonctionne.

Comment fonctionne le programmateur d’évènements ?

La première chose à faire est de vérifier si le programmateur d’évènements est activé. Pour ce faire regardez la valeur du paramètre event_scheduler:

mysql> SHOW VARIABLES LIKE 'event_scheduler';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| event_scheduler | OFF   |
+-----------------+-------+

Par défaut le programmateur n’est pas activé, event_scheduler vaut donc OFF. Activez le avec la commande SET GLOBAL (le droit SUPER est nécessaire).

mysql> SET GLOBAL event_scheduler = 1;
mysql> SHOW GLOBAL VARIABLES LIKE 'event_scheduler';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| event_scheduler | ON    |
+-----------------+-------+

Un fois activé, le programmateur d’évènements créé un processus léger (thread) qui tourne en tâche de fond. Ce processus est chargé d’exécuter les événements lorsque le moment est venu. On peut le voir avec la commande SHOW PROCESSLIT. Cependant, il faut avoir le privilège SUPER pour pouvoir la lancer.

mysql> SHOW PROCESSLIST \G
*************************** 2. row ***************************
Id: 4
User: event_scheduler
Host: localhost
db: NULL
Command: Daemon
Time: 0
State: Waiting for next activation
Info: NULL

(à suivre… event scheduler: Créer un évènement)

Tags: ,

Un conférence de Serge Frezefond, directeur technique SUN / MySQL France, au salon Solutions Linux 2009.
Serge nous parle des meilleurs pratiques MySQL sur environnement Linux

http://dasini.net/blog/presentations/?#MySQL_Bests_practices_on_Linux

télécharger la présentation (PDF)

Tags: , ,

8
avr

Numéro de semaine calendaire MySQL

   Posted by: freshdaz    in Astuce, MySQL

MySQL possède un grand nombre de fonctions pour gérer les dates et le temps. Il est possible de récupérer le numéro calendaire d’une semaine avec la fonction week. Dimanche 5 avril nous étions semaine 14. La fonction week nous le confirme:

mysql> SELECT week('2009-04-05');
+--------------------+
| week('2009-04-05') |
+--------------------+
|                 14 |
+--------------------+

Lundi 6 avril, nouvelle semaine, on passe donc à la semaine 15:

mysql> SELECT week('2009-04-06');
+--------------------+
| week('2009-04-06') |
+--------------------+
|                 14 |
+--------------------+

Souci !!! Le résultat n’est pas celui espéré (14 au lieu de 15). En fait la fonction week prend un deuxième paramètre optionnel, qui permet de « régler la précision » (compter sur 53 ou 54 semaines, commencer la semaine un dimanche ou un lundi…) bref elle est complète et complexe…

Le réglage usuel est de mettre le deuxième paramètre à 3 ! ou alors d’utiliser la fonction WEEKOFYEAR.

mysql> SELECT weekofyear('2009-04-05');
+--------------------------+
| weekofyear('2009-04-05') |
+--------------------------+
|                       14 |
+--------------------------+
mysql> SELECT weekofyear('2009-04-06');
+--------------------------+
| weekofyear('2009-04-06') |
+--------------------------+
|                       15 |
+--------------------------+

Tags: , , ,

Voici les présentations de la soirée:

Roch Boubonnais : ZFS in business

Eric Bezille : Data trends…

Pour rappel,Eric Bezille est Chief Technologist chez Sun Microsystems France

Roch Bourbonnais, est Senior Performance Analyst ZFS/OpenStorage. Il était invité par SUN Microsystems et des comunautés SOLARIS et du MUG.Fr à une soirée de débats et d’échanges autour des dernières tendances du stockage de données et des meilleurs pratiques sur les performances de ZFS et de l’Open Storage.

Tags: , , , ,