|
Retour sur la conférence MySQL / SUN du mercredi 19 novembre 2008
C’est dans un grand hotel parisien qu’a eu lieu la 2ème conférence MySQL française. Pour résumer, que du bonheur
La première conf nous à permis d’avoir un peu plus d’informations sur le futur de MySQL, en vrac (sauvegarde à chaud physique (START BACKUP), les moteurs FALCON (& MARIA ?), checksum pour la réplication, les rôles, cryptage des données,…).
On a pu également apprendre que la 5.1 GA doit sortir très très bientôt (en même temps cela fait un an que l’on nous dit ça ), mais là c’est vraiment brulant, c’est à dire début décembre voir même, fin novembre (le 28 exactement). Quoiqu’il en soit, je mettrai un article en ligne, présentant les nouveautés de la 5.1, pour fêter ça !
Je n’ai malheureusement pas pu assister à toutes les conférences, mais celles que j’ai suivit étaient de haute facture.
L’excellent Serge Frezefond nous a parlé des applications Web 2.0 avec MySQL et memcached. J’ai aussi assisté aux conférences: Choisir la bonne solution HA pour MySQL (Max Mether), les performances MySQL sous microscope (Stéphane Varoqui), Scale Up, Scale Out, Virtualisation (Serge Frezefond).
A noté également que la nourriture était raffinée… ce qui ne gâche rien.
Comme je l’ai dit précedemment, que du bonheur. Vivement l’année prochaine !
dasini.net |
11/20/08 1:29 PM
Retour sur la rencontre Giuseppe Maxia, Nat Makarévitch
Mardi 18 novembre 2008 Giuseppe Maxia et Nat Makarévitch étaient les invités du MySQL User Group, dans les locaux d’Alter Way. La soirée fut aussi passionnante qu’instructive.
Nat nous a expliqué comment améliorer les performances d’un sgbdr (notamment MySQL ) optimisation vu sous l’axe des I/O
Vous pouvez télécharger sa présentation: Nat Makarévitch: Grandes bases de données: les entrées/sorties
Giuseppe lui nous parlé de MySQL Proxy, se petit soft capable de faire de très grandes choses comme du load balancing, de la réécriture de requêtes à la volé,…
dasini.net |
11/20/08 10:34 AM
Les covering index, de la théorie à la pratique avec MyISAM et InnoDB
Pour faire suite au dernier schéma sur les structures comparées d’un index MyISAM et InnoDB, ce billet a pour but de détailler une optimisation nommée covering index.
On appelle ainsi un index lorsqu’il “couvre” l’intégralité des données recherchées et évite ainsi un parcours des enregistrements souvent basé sur des random I/O, spécialement couteux sur disque.
A propos des random I/O, voici un court extrait d’un billet précédent sur les SSD :
Sur un disque classique un random read entraîne (du plus couteux au moins couteux) :
- le déplacement de la tête de lecture/écriture sur la bonne piste (seek time)
- une fois la tête sur la bonne piste, il faut encore repérer sur celle-ci le bloc secteur demandé (rotational latency)
- la lecture et la transmission de la donnée vers le système.
Les quelques chiffres suivants permettent de mesurer les conséquences du paragraphe précédent et ainsi de mieux visualiser les enjeux soulevés par les covering index.
On se base ici sur la base d’un enregistrement de 100 bytes. Notez que ces valeurs sont des ordres de grandeur :
En mémoire :
Sequential read : 5 000 000 read/s (500 Mb /s)
Random read : 250 000 read/s (25 Mb /s)
=> En mémoire, un coefficient x20 existe entre les performances en sequentiel et en lecture aléatoire.
Sur disque :
Sequential read : 500 000 r/s (50 Mb /s)
Random read : 100 r/s (10 Kb /s)
=> Sur disque, un coefficient x5000 (!) existe entre les performances en sequentiel et en lecture aléatoire.
(Source : MySQL High Performance 2nd Edition)
On note qu’entre un parcours séquentiel sur disque (full scan table) et le même parcours en mémoire, il existe un facteur 10… A comparer avec un facteur 2500 pour du random I/O entre un parcours mémoire et son homologue sur disque.
Pas de chance, c’est pourtant celui qui en général permet de retrouver un enregistrement à partir d’un index (la clé primaire “clustered” d’InnoDB mise à part : raccrochez-vous au schéma pour comprendre pourquoi).
Nous avons donc tout intérêt à tenter de minimiser ce type de parcours grâce aux covering index.
Les covering index : de la théorie…
Un covering index doit rassembler deux qualités :
- Etre l’index choisi par MySQL pour résoudre votre requête
- Contenir l’intégralité des champs recherchés (ceux du SELECT)
Si vous avez sous les yeux le fameux schéma, vous voyez que dans le cas de MyISAM par exemple, il existe en effet un “saut” à effectuer entre la valeur indexée (peu importe que l’index soit primaire ou secondaire) et l’enregistrement. Dans le cas d’un covering index il n’y a plus besoin d’effectuer ce saut puisque la donnée recherchée se trouve déjà intégralement dans l’index.
Nous allons le voir maintenant, c’est au développeur affuté de rechercher ce type d’optimisations. Pour cela une bonne connaissance des caractéristiques de chaque moteur de stockage utilisé est nécessaire.
Si vous maîtrisez le principe du leftmost prefixing et si en plus vous tirez parti d’une table InnoDB à la clé primaire ajoutée derrière chaque index secondaire, voilà qui devrait vous éviter de créer des index inutiles en profitant au maximum des forces en présence !
… à la pratique
Conçu autour de la base world, voici un exemple concret des différences entre MyISAM et InnoDB dont vous devez tenir compte pour vos stratégies d’indexation.
Nous partons d’une table MyISAM qui possède deux index, sa clé primaire (ID) et un index que j’ai crée sur le “countrycode” :
mysql> SHOW INDEX FROM city\G
***** 1. row ****
Key_name: PRIMARY
Seq_in_index: 1
Column_name: ID
Cardinality: 4321
[...]
**** 2. row ****
Key_name: idx_countrycode
Seq_in_index: 1
Column_name: CountryCode
Cardinality: 720
[...]
Testons un premier EXPLAIN :
mysql> EXPLAIN SELECT countrycode, id FROM city WHERE countrycode=’fra’ ORDER BY id ASC\G
***** 1. row ****
id: 1
select_type: SIMPLE
table: city
type: ref
possible_keys: idx_countrycode
key: idx_countrycode
key_len: 3
ref: const
rows: 39
Extra: Using where; Using filesort
1 row in set (0.00 sec)
Cette table sera parcourue selon son index “idx_countrycode”, cependant vu que la colonne “id” est également nécessaire pour les résultats, il y’a un saut systématique à chaque entrée de l’index vers les enregistrements correspondants (c’est le “saut” entre le fichier .MYI et le .MYD représenté sur le schéma).
A noter que nous avons ici un filesort c’est à dire un tri supplémentaire effectué par le serveur MySQL pour classer nos résultats. Certes, l’index contient des données ordonnées mais il s’agit ici des valeurs de “countrycode”, pas de celles concernant la colonne “id”.
Tentons maintenant une modification du moteur de stockage de la table suivie du même EXPLAIN :
mysql> ALTER TABLE city ENGINE=InnoDB;
Query OK, 4079 rows affected (0.45 sec)
Records: 4079 Duplicates: 0 Warnings: 0
mysql> EXPLAIN SELECT countrycode, id FROM city WHERE countrycode=’fra’ ORDER BY id ASC\G
***** 1. row ****
id: 1
select_type: SIMPLE
table: city
type: ref
possible_keys: idx_countrycode
key: idx_countrycode
key_len: 3
ref: const
rows: 40
Extra: Using where; Using index
1 row in set (0.02 sec)
Explain nous gratifie d’un “USING INDEX”, cela signifie que nous sommes dans le cas d’un “covering index”. Ne pas confondre en effet le libellé “index” dans la colonne “type” de EXPLAIN, qui signifie que tout l’index est parcouru, avec le “Using index” de la colonne extra qui indique un covering index.
Pour en revenir au schéma, puisque c’est le support de ce billet, nous sommes passés du côté gauche du dessin (MyISAM), au côté droit (InnoDB). Remarquez comment est formé l’index secondaire sous InnoDB… Il contient la valeur de la clé primaire, c’est une caractéristique très importante puisque c’est comme si notre index placé simplement sur “countrycode” était en fait un index composé des champs (countrycode, id).
Nous sommes donc bien dans le cas d’un covering index puisque cette fois l’intégralité des données recherchées (le countrycode et “id”) sont contenues dans l’index, aucun “saut” supplémentaire vers les enregistrements n’est nécessaire, autant de random I/O de gagnés.
Nous aurions pu obtenir la même chose avec MyISAM mais en spécifiant cette fois un index composé, pour cela on repasse le moteur de stockage en MyISAM puis on crée l’index :
mysql> ALTER TABLE city ENGINE=myisam;
Query OK, 4079 rows affected (0.23 sec)
Records: 4079 Duplicates: 0 Warnings: 0
mysql> CREATE INDEX idx_countrycode_id ON city(countrycode,id);
Query OK, 4079 rows affected (0.25 sec)
Records: 4079 Duplicates: 0 Warnings: 0
mysql> EXPLAIN SELECT id,countrycode FROM city WHERE countrycode=’fra’ ORDER BY id ASC\G
***** 1. row ****
table: city
type: ref
possible_keys: idx_countrycode,idx_countrycode_id
key: idx_countrycode_id
key_len: 3
ref: const
rows: 40
Extra: Using where; Using index
1 row in set (0.00 sec)
Inutile en revanche de créer ce même index composé sous InnoDB puisqu’il existe en fait déjà… Nous ne rajouterions dans ce cas qu’une possibilité supplémentaire à étudier inutilement pour l’optimiseur MySQL sans parler du temps de perdu à mettre à jour un index redondant.
“Combien d’index inutiles ai-je donc dans ma base à l’heure actuelle ?” est peut-être la question que vous vous posez désormais ?
Le tips dbnewz : allez jeter un oeil du côté du “maatkit“, cet ensemble de scripts perl contient justement un outil, le “mk duplicate key checker” qui a justement pour but de vous aider à détecter les doublons.
Notez que dans certains cas particuliers, un index peut volontairement avoir été crée bien que redondant avec un autre index existant. En effet il est parfois préférable de ne pas “alourdir” un index déjà composé de plusieurs champs, exemple un covering index, ou bien encore un index numérique spécialement impliqué dans des jointures qui verrait d’un mauvais oeil ce VARCHAR que vous souhaitez lui ajouter… Cela pourrait engendrer un ralentissement sur les requêtes précedemment basées sur les index que vous souhaitez “enrichir”.
Le “mk duplicate key checker” vous apporte les candidats sur un plateau, à vous d’apporter la valeur ajoutée finale
A retenir :
- Les covering index constituent une optimisation très intéressante pour éviter de couteux random I/O sur disque. Ayez à l’esprit qu’ils existent et profitez des caractéristiques propres à InnoDB dans ce domaine (présence de la clé primaire derrière chaque index secondaire) pour optimiser vos requêtes sans créer d’index redondants.
- Dans certains cas un covering index peut également vous aider à faire disparaître un disgracieux “Using filesort” dans la colonne “Extra” (la preuve dans notre exemple).
www.dbnewz.com |
11/20/08 12:38 AM
Manuel MySQL disponible sur lephpfacile
Une petite news pour vous annoncer la présence du manuel MySQL sur le site.
Celui ci est accessible via un lien dans la colonne de droite, dans la sections "Manuels". Cela fait maintenant quelques années que ce manuel avait disparu du site, en fait, depuis la mise en ligne de la V4 du site. Il était "normal" pour un site traitant de PHP, mais aussi de SQL, que cette documentation refasse son retour. Sinon, sachez aussi que les manuels Pear et Smarty sont en préparation :) - Manuel MySQL www.lephpfacile.com | 11/19/08 11:18 PM
OpenGOO : votre bureau Open Source
OpenGOO est un pack Office Open source pour le Web. Il s'agit d'une nouvelle solution complète pour tout le monde, aussi bien pour les particuliers que les professionnels.
Il va vous permettre de créer, collaborer, partager et publier des documents en internes et aussi en externes.
Ce pack comprend actuellement les composants suivants :
- Edition de texte
- Présentations
- Liste de taches
- E-mails
- Calendrier
- Lien web
Pour faire fonctionner ce pack, il vous faut :
- Apache 2.0+
- PHP 5.2+
- MySQL 4.1 + avec InnoDB support OpenGoo (0 visite) Demo OpenGoo (0 visite)
www.nexen.net |
11/18/08 6:31 AM
64bit VS 32bit
Je croyais jusqu’à tout récemment que la majorité des serveurs étaient tous en 64bit. La presque totalité des nouveaux hardware supportent le 64bit alors pourquoi installer un OS 32bit sur une machine 64bit ? Pour moi la question ne se posait même pas tellement la réponse me semblait évidente. Hé bien j’étais loin de la réalité.
En 5 mois, j’ai été témoin de 4 personnes (amis et connaissance d’IRC) ayant installé un OS 32 bit sur des machines 64bit. On pourrait croire que ce n’est pas tellement grave, puisque de toute façon il y a peu d’application développée spécifiquement pour les 64bit, et s’ils le sont, le gain de performance est à peu près imperceptible. C’est faux, complètement faux.
Il faut être très vigilant dans le choix de l’OS qu’on installe, surtout sur une machine qui sera dédiée à MySQL. Je vais vous expliquer pourquoi avec 2 exemples.
Cas #1.
MySQL roule sur un OS 32 bits depuis déjà longtemps. Tout fonctionne à merveille, mais la charge de travail a augmenté considérablement depuis la mise en ligne, à un point où il devient nécessaire d’augmenter la RAM pour conserver une performance acceptable. C’est une décision importante, car cette modification demandera un downtime de quelques minutes, et forcement il y a quelqu’un qui perd de l’argent lorsque le serveur ne fonctionne plus. La mémoire vive est très abordable maintenant et l’équipe décide d’upgrader à 8Go de RAM.
Plusieurs d’entre vous ont probablement déjà identifié le problème. Les OS 32bit ne supportent pas plus de 4Go de RAM, théoriquement. En pratique, on plafonne souvent à 3.5Go et comme l’OS utilise de la mémoire, MySQL lui sera capable d’utiliser au mieux ~2.5Go de RAM. Les performances sont loin des résultats escomptés. De plus, pour corriger le problème, il faudra installer un OS 64bit, ce qui entraînera un second downtime plus long que le premier.
Cas #2.
Un Master roule sur un OS 32 bits, mais la machine (qui supporte le 64bit) se fait vieille et de moins en moins performante. Nous avons aussi un Slave utilisé pour les backups dans les mêmes conditions. L’équipe décide donc d’acheter une nouvelle machine très performante, avec plusieurs CPU, plusieurs Go de RAM et des disques très rapides. Évidemment on installe un OS 64bit sur la bête, car nous avons beaucoup plus que 4Go de RAM. Le plan de match est de mettre la nouvelle machine Slave de l’actuel Master, et d’inverser les rôles au moment opportun. C’est une opération qui se fait très rapidement pour minimiser le downtime. Tout se passe à merveille, le changement de serveur est un succès.
Il y a cependant un détail qui a été négligé dans cette opération. Le Master est une machine 64bit alors que les 2 slaves sont demeurés 32bit. Il n’y a rien d’incorrect dans ce procédé, mais là où ça bug, c’est qu’on fait des copies binaires des données sur un des Slave en guise de backup. S’il s’avère nécessairement d’utiliser ces backups sur le Master, il y a de fortes chances que des données soient perdues à cause des floating points.
Je n’ai pas l’infrastructure et le temps nécessaire pour effectuer mes propres tests de performance pour mesurer le réel impact d’un 32bit vs 64bit. Plusieurs personnes de renom affirment qu’il y a un avantage non-négligeable pour les applications demandant beaucoup de CPU et mémoire, comme MySQL. C’est une opinion que j’ai tendance à croire étant donné la multitude d’articles qui l’appuie. La principale raison pour utiliser un os 64 demeure la possibilité d’avoir plus de 4Go de RAM, mais s’il n’y a pas de désavantage à utiliser un 64bit, pourquoi s’en priver ?
www.noidea.ca |
11/18/08 3:36 AM
Présentation : Optimiser MySQL
Optimiser sa base de donnée est l’obsession principale du DBA. Savoir identifier, anticiper et régler les problèmes de performances constituent une vrai valeur ajoutée et cela n’est pas donné à tout le monde. Satisfaction personnelle, satisfaction des décideurs mais surtout satisfaction du client…
http://dasini.net/blog/presentations/?#optimiser_mysql
dasini.net |
11/17/08 12:26 PM
Énigme
order by
Cela part d’un problème tout simple, trier les données d’une table:
mysql> SELECT id, technologie FROM enigme;
+------+-------------+
| id | technologie |
+------+-------------+
| 1 | PHP |
| 2 | LINUX |
| 3 | MySQL |
+------+-------------+
Pour trier les enregistrements en fonction de la technologie, faisons un ORDER BY sur la colonne technologie:
mysql> SELECT id, technologie FROM enigme ORDER BY technologie;
+------+-------------+
| id | technologie |
+------+-------------+
| 1 | PHP |
| 2 | LINUX |
| 3 | MySQL |
+------+-------------+
Il semble que le serveur n’a pas compris ce que je lui demande, ou alors je ne maitrise pas du tout l’alphabet..
Rajoutons la clause ASC (au cas où)
mysql> SELECT id, technologie FROM enigme ORDER BY technologie ASC;
+------+-------------+
| id | technologie |
+------+-------------+
| 1 | PHP |
| 2 | LINUX |
| 3 | MySQL |
+------+-------------+
Pas mieux !
eh ben mince alors !!!
MySQL ne veut décidement pas trier mes données comme je le souhaites. Et il devenu fou ? Dois-je changer de SGBDR ?
En fait un simple zoom sur la structure de la table nous permet de voir la chose d’un autre oeil, le bon !
mysql> SHOW CREATE TABLE enigme;
*************************** 1. row ************************
Table: enigme
Create Table: CREATE TABLE `enigme` (
`id` int(11) DEFAULT NULL,
`technologie` enum('PHP','LINUX','MySQL') DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
La colonne technologie est de type ENUM…
Les données stockées disposent d’un index numérique utilisé par MySQL pour les manipuler. C’est également cet index qui est utilisé pour le tri. En d’autres termes, PHP vaut 1, LINUX vaut 2 et MySQL vaut 3, par conséquent le tri fonctionne correctement.
Alors comment faire pour avoir le résultat escompté ?
Il faut forcer MySQL à utiliser la valeur chaine de caractères et non l’index:
la fonction concat()
mysql> SELECT id, technologie FROM enigme ORDER BY concat(technologie);
+------+-------------+
| id | technologie |
+------+-------------+
| 2 | LINUX |
| 3 | MySQL |
| 1 | PHP |
+------+-------------+
la fonction cast()
mysql> SELECT id, technologie FROM enigme ORDER BY cast(technologie as char);
+------+-------------+
| id | technologie |
+------+-------------+
| 2 | LINUX |
| 3 | MySQL |
| 1 | PHP |
+------+-------------+
dasini.net |
11/16/08 2:08 AM
wampMSS 1.1.3
La version 1.1.3 de wamp MSS (Mobile Storage Server) est disponible ! wampMSS (Mobile Storage Server) est une version modifiée de wamp qui permet de faire fonctionner un serveur apache, php, mysql sur un périphérique USB
Cette version comprend :
- Apache 2.2.910
- PHP 5.2.6
- MySQL 5.0.67
- PhPMyAdmin 3.0.1.1
- SQLiteManager 1.2.0 RC2
rendez-vous sur http://www.uni-d.net
Proposé par UNi
www.phpindex.com |
11/15/08 10:38 PM
Une quinzaine de raisons pour choisir ou ne pas choisir un SGBDR
Faire le choix d’un SGBDR pour gérer ses données est devenu un réflexe, mais est ce toujours nécessaire ?
Avantages
Contrôle de la redondance des données (normalisation)
Cohérence des données (ACID)
Intégrité des données (ACID)
Standards (SQL ANSI)
Amélioration de la productivité
Permet une meilleur concurrence en lecture comme en écriture
Mécanismes de sauvegarde et de restauration
Facilité pour manipuler les données grâce à un langage dédié SQL
Fonctionnalités avancées (haute disponibilités, réplication, clustering, procédure stockées,…)
Inconvénients
Apprentissage d’un logiciel (plus ou moins complexe)
Taille (espace disque et mémoire non négligeable)
Coût (Jusqu’a tres couteux pour une solution propriétaire, à beaucoup moins pour une solution open source)
Coûts supplémentaires en materiel (espace de stockage, RAM, réseaux, …)
Coût de la migration des données
Performances (dépendent de la solution retenue et surtout des compétences du dba et des développeurs)
dasini.net |
11/15/08 1:31 PM
Scannez les dossiers avec PHP
Lorsque vous proposez d'afficher un diaporama venant d'un de vos dossiers, différentes manières sont possibles avec des techniques plus ou moins hard.
Souvent les problèmes peuvent se poser lorsque vous désirez effectuer les mises à jours de ce dossier.
Les méthodes les plus courantes sont d'utiliser le format HTML, mais aussi la possibilité de stocker et de récupérer les informations dans une base de données comme MySQL.
Nettuts propose une approche différente en effectuant un scan des dossiers et de construire la page avec PHP comme ceci un gain de temps et d'économie. Scanning Folders with PHP (0 visite) Demo de Scan (0 visite)
www.nexen.net |
11/15/08 12:06 AM
Présentration : MySQL 5.0, un SGBDR mature ?
MySQL est le SGBDR Open Source le plus populaire au monde. Sa cinquième version, sortie en octobre 2005, permet de mieux répondre aux problématiques dentreprise. Au menu des nouveautés fonctionnelles : les vues, les procédures stockées, les déclencheurs, de nouveaux moteurs de stockage, la base de données INFORMATION_SCHEMA et diverses petites améliorations.
http://dasini.net/blog/presentations/
dasini.net |
11/14/08 10:35 AM
Rencontre MySQL sur Paris : 18 novembre 2008
LEMUG.FR vous invite à rencontrer
Giuseppe Maxia (Responsable communauté MySQL pour l'Europe) et
Nat Makarevitch (Expert des méthodes & techniques du monde Open Source)
Mardi 18 novembre 2008, à partir de 19h
dans les locaux d'Alter Way
1 rue Royale, 92210 Saint-Cloud
**Au programme**
Nat Makarevitch :
Expert reconnu des méthodes et techniques du monde open source, Nat Makarevitch interviendra sur le thème des "grandes bases de données : les entrées/sorties" : amélioration des performances d'une instance de MySQL gérant des bases de données dont le volume total dépasse la mémoire vive disponible, optimisation des entrées/sorties.
Giuseppe Maxia
Analyste système et concepteur de base de données, Guiseppe Maxia est Responsable de la communauté MySQL pour l'Europe, et est spécialisé dans l'analyse de données, la migration et l'optimisation des performances. Son blog : http://datacharmer.blogspot.com/
Infos pratiques
Date & heure : mardi 18 novembre 2008 à partir de 19h
Lieu : ALTER WAY
1 rue royale, 227 Bureaux de la Colline
92210 Saint-Cloud
Bâtiment D 9ème étage
Accès : Tramway T2 / Parc de Saint-Cloud
Métro Pont de Saint Cloud / ligne 10
Bus 467 / Parc de Saint-Cloud
Tarif : gratuit
Inscriptions :
Véronique Loquet --
Cet e-mail est protégé contre les robots collecteurs de mails, votre navigateur doit accepter le Javascript pour le voir
/ 06 68 42 79 68
Emilie Viel --
Cet e-mail est protégé contre les robots collecteurs de mails, votre navigateur doit accepter le Javascript pour le voir
/ 06 68 54 79 68 lemug (0 visite)
www.nexen.net |
11/12/08 11:00 PM
Rencontre avec LEMUG.FR
LEMUG.FR lance une rencontre gratuite le 18 novembre 2008 dans les locaux d'AlterWay, juste avant la journée : « Conférences européennes MySQL 2008 »
avec la présence de
Giuseppe Maxia (Responsable communauté MySQL pour l'Europe) et
Nat Makarevitch (Expert des méthodes & techniques du monde Open Source)
Ils vont effectuer le voyage pour vous.
Alors n'hésitez pas à consulter le communiqué officiel Rencontre LEMUG.FR du 18 novembre 2008 (0 visite) Conférences européennes MySQL 2008 férences européennes MySQL 2008 (0 visite)
www.nexen.net |
11/12/08 7:48 AM
Rencontre Giuseppe Maxia, Nat Makarévitch le mardi 18 novembre 2008 chez Alter Way
Le MUG.fr à le plaisir de vous inviter à une rencontre avec en guests stars:
Giuseppe Maxia, (responsable communauté MySQL pour l’Europe)
Nat Makarévitch (Expert des méthodes et des techniques du monde de l’opensource)
Cette rencontre aura lieu le mardi 18 novembre 2008, à partir de 19h, dans les locaux d’Alter Way à Saint Cloud
Au programme :
Nat Makarévitch:
“Grandes bases de données: les entrées/sorties”
“amélioration des performances d’une instance de MySQL gérant des bases de données dont le volume total dépasse nettement la mémoire vive disponible, autrement dit dans un contexte où il convient d’optimiser les entrées/sorties”
Giuseppe Maxia
“MySQL Proxy wizardry”
Lieu :
ALTER WAY GROUP
1 rue royale, 227 Bureaux de la Colline 92210 Saint-Cloud
Bâtiment D 9ème étage
Tel : 01 78 15 24 00
Date: mardi 18 novembre 2008
Heure: à partir de 19h
Tarif: gratuit
dasini.net |
11/12/08 2:12 AM
Hash, sécurité & MySQL
Une fonction de hash est une fonction qui prend une chaîne de caractères en entrée et qui renvoi une autre chaine de caractères. La chaîne de caractères résultat a toujours la même longueur et est strictement identique pour une même entrée.
Une des utilisations du hashage sert a masquer les mots de passes stockés dans une table.
Au lieu d’avoir une table utilisateur, faiblement sécurisée avec un mot de passe en clair:
+----------+------------------------+
| name | password_en_clair |
+----------+------------------------+
| freshdaz | mot_de_passe |
+----------+------------------------+
Il est préférable d’avoir ceci, le même mot de passe mais hashé:
+----------+---------------------------------------+
| name | password_hash |
+----------+---------------------------------------+
| freshdaz | 8b70bf2ffce34ced3223dfc9e4fa9cc7 |
+----------+---------------------------------------+
Comme vous pouvez le constater le mot de passe hashé est plus difficile à lire, d’autant plus que le hash est (sensé être) irréversible (en fait tout est une question de temps).
MySQL propose 5 fonctions de hashage:
CRC : (contrôle de redondance cyclique)
c’est une méthode pour contrôler l’intégrité des données, donc hors sujet
mysql> SELECT crc32('mot_de_passe');
+-----------------------+
| crc32('mot_de_passe') |
+-----------------------+
| 965676113 |
+-----------------------+
MD5 : (Message Digest 5)
très populaire mais n’est donc plus considéré comme sûr au sens cryptographique. Autrement dit, une petite recherche sur le net et vous trouverez facilement des algorithmes pour le cracker.
mysql> SELECT md5('mot_de_passe');
+----------------------------------+
| md5('mot_de_passe') |
+----------------------------------+
| 8b70bf2ffce34ced3223dfc9e4fa9cc7 |
+----------------------------------+
SHA1 : (Secure Hash Algorithm )
Conçue par la National Security Agency (NSA) (est-ce une bonne nouvelle ?)
Plus sécurisé que le md5.
mysql> SELECT sha1('mot_de_passe');
+------------------------------------------+
| sha1('mot_de_passe') |
+------------------------------------------+
| d10c988ca61b785f5a7756b5852683d798fe4d92 |
+------------------------------------------+
PASSWORD:
Algorithme « maison » de MySQL. Utilisé pour stocker les mots de passes des utilisateurs du serveur MySQL.
mysql> SELECT password('mot_de_passe');
+-------------------------------------------+
| password('mot_de_passe') |
+-------------------------------------------+
| *C3D87F1C2FADE3F03484FC62E669276C2A37266F |
+-------------------------------------------+
OLD_PASSWORD :
Ancien algorithme pour stocker les mot de passes des utilisateurs du serveur MySQL. Utilisé jusqu’à la version 4.0.x de MySQL. Il a été changé lui aussi pour des raison de sécurité. Là encore vous trouverez très facilement le nécessaire pour le cracker.
mysql> SELECT old_password('mot_de_passe');
+------------------------------+
| old_password('mot_de_passe') |
+------------------------------+
| 684ec7590a2271b0 |
+------------------------------+
Quelles fonctions utiliser ?
Comme souvent en informatique, il faut faire un compromis entre meilleurs performances et sécurité optimale. En d’autre terme un sha1 plus sécurisé qu’un md5 mettra cependant plus de temps pour hasher une même chaine de caractères.
Vérifions tout ceci:
mysql> SELECT md5('olivierdasini');
+----------------------------------+
| md5('olivierdasini') |
+----------------------------------+
| a42bc0139343fc758a414f70eda6f209 |
+----------------------------------+
1 row in set (0.00 sec)
mysql> SELECT sha1('olivierdasini');
+------------------------------------------+
| sha1('olivierdasini') |
+------------------------------------------+
| f2cdbfdf62d717ab96528235a1b1ff34671860d4 |
+------------------------------------------+
1 row in set (0.00 sec)
hum, hum pas très probant…
Aidons nous de la fonction benchmark():
mysql> SELECT benchmark(3000000,md5('olivierdasini'));
+-----------------------------------------+
| BENCHMARK(3000000,md5('olivierdasini')) |
+-----------------------------------------+
| 0 |
+-----------------------------------------+
1 row in set (12.27 sec)
mysql> SELECT benchmark(3000000,sha1('olivierdasini'));
+------------------------------------------+
| BENCHMARK(3000000,sha1('olivierdasini')) |
+------------------------------------------+
| 0 |
+------------------------------------------+
1 row in set (15.91 sec)
En exécutant ces 2 fonctions plusieurs fois, (grâce à benchmark()) on s’aperçoit qu’il faut environ 25% de temps supplémentaire pour l’algorithme sha1 que pour le md5. Ce qui est loin d’être négligeable.
Regardons comment se débrouillent les fonctions « maison » de MySQL:
mysql> SELECT benchmark(3000000,password('olivierdasini'));
+----------------------------------------------+
| BENCHMARK(3000000,password('olivierdasini')) |
+----------------------------------------------+
| 0 |
+----------------------------------------------+
1 row in set (7.24 sec)
17:08 root$test> SELECT benchmark(3000000,old_password('olivierdasini'));
+--------------------------------------------------+
| BENCHMARK(3000000,old_password('olivierdasini')) |
+--------------------------------------------------+
| 0 |
+--------------------------------------------------+
1 row in set (4.26 sec)
Le verdict est sans appels, avec ses 7 secondes (près de 50% de temps en moins que md5 ), la fonction password() est d’un bon rapport performance sécurité. Pour rappel, c’est cette fonction qu’utilise le serveur MySQL pour gérer les mots de passes de ses comptes utilisateurs. Inconvénient non négligeable, elle est spécifique (à ma connaissance) à MySQL (mais est-ce vraiment un inconvénient ? ).
Quant à l’ancienne façon de hasher les mots de passes, elle est évidement très performante, mais on a vu que niveau sécurité, elle laisse à désirer…
Les fonctions présentées sont une bonne solution pour sécuriser ses mots de passes. Il est néanmoins possible d’augmenter encore un peu plus le niveau de sécurité. Une des techniques consiste à renforcer le mot de passe utilisateur en lui rajoutant une chaine de caractères et en combinant plusieurs algorithmes de hashage.
Par exemple, avec comme mot de passe: olivierdasini, on peut concaténer, avec la fonction concat(), la date de naissance: 121174_ et combiner différents algorithmes:
mysql> SELECT benchmark(3000000,md5(concat(sha1('121174_'), 'olivierdasini')));
+------------------------------------------------------------------+
| benchmark(3000000,md5(concat(sha1('121174_'), 'olivierdasini'))) |
+------------------------------------------------------------------+
| 0 |
+------------------------------------------------------------------+
1 row in set (29.30 sec)
mysql> SELECT benchmark(3000000,password(concat(old_password('121174_'), 'olivierdasini')));
+-------------------------------------------------------------------------------+
| benchmark(3000000,password(concat(old_password('121174_'), 'olivierdasini'))) |
+-------------------------------------------------------------------------------+
| 0 |
+-------------------------------------------------------------------------------+
1 row in set (12.06 sec)
Avec de telles combinaisons, vos mots de passes sont plus à l’abri, par contre les temps de hashage sont doublés. Comme ont le disait précédemment, tout est une histoire de compromis.
dasini.net |
11/11/08 3:08 PM
Temps Exécution en PHP
Lors de la création d'une page Dynamique avec PHP et une base de donnée (par exemple MySQL), il peut être nécessaire de connaître le temps d'exécution de celle-ci.
Car lorsque vous effectuez des tests simples, c'est très facile. Mais si vous exécutez des énormes requêtes ou de nombreuses connexions en même temps, est-ce que vous obtiendrez les mêmes résultats ?
Le blog BigOrNot propose une solution pour déterminer ce temps avec un minimum de manipulation. Contrôler le temps d'execution maximum d'un traitement PHP (0 visite)
www.nexen.net |
11/11/08 9:35 AM
Tout ce quil faut savoir sur les routines
La syntaxe SQL pour créer une procédure stockée ou une fonction est simple. Cependant, il y a plusieurs choses à savoir pour créer et utiliser une routine. Tout d’abord, il faut connaitre les trois nouveaux privilèges liés aux routines:
Create routine pour créer des routines (procédure stockée ou fonction)
Alter routine pour modifier ou supprimer une routine. Ce privilège est automatiquement donné au créateur de la routine.
Execute pour les exécuter. Ce privilège est également donné automatiquement au créateur.
Si l’option automatic_sp_privilèges est à 0, Alter routine et Execute ne seront pas automatiquement attribués au créateur. Il faut aussi savoir que ces 3 privilèges ne sont pas les seuls éléments de sécurité. Avec les procédures stockées, la caractéristique SQL SECURITY peut être utilisée pour définir si c’est les privilèges du créateur ou de celui qui l’exécute qui doivent être utilisés. La valeur par défaut est definer.
Le privilège SUPER doit être donné aux utilisateurs qui crée et exécute des routines sur des serveurs ayant le binary log activé, en plus des privilèges Create routine et alter routine. Vous conviendrez que donner un tel privilège n’est pas toujours souhaitable, donc MySQL s’est doté de l’option log_bin_trust_routine_creators (désactivée par défaut) pour pallier ce problème.
On pourrait se demander pourquoi cette option est désactivée par défaut. La réponse est simple: par souci de sécurité. Lorsque le binlog est activé, la création de routine doit absolument avoir DETERMINISTIC, NO SQL ou READ SQL DATA dans sa déclaration.
Les caractéristiques DETERMINISTIC et NOT DETERMINISTIC indiquent si la routine produit toujours le même résultat pour la même entrée. Pour la déclarer DETERMINISTIC, vous devez le spécifier explicitement. Le défaut est NOT DETERMINISTIC ce qui signifie que la routine peut retourner des résultats différents pour la même entrée.
Les caractéristiques CONTAINS SQL, NO SQL, READS SQL DATA et MODIFIES SQL DATA indiquent si la routine sélectionne ou modifie des données. Le défaut est CONTAINS SQL si aucune caractéristique n’est spécifiée.
L’option log_bin_trust_routine_creators permet d’outre passer cette sécurité. Si elle est activée, le créateur d’une fonction peut déclarer qu’elle est not deterministic. C’est pourquoi il est conseillé d’activer cette option seulement si vous avez une confiance entière aux usagers qui peuvent créer des routines. Une telle routine peut causer d’importants problèmes:
Rendre les Slaves différents du master, puisqu’il n’y a aucune garantie que le résultat sera le même
Les données restaurées peuvent être différentes des données originales
Comme vous devez vous douter, les routines sont stockées directement dans le serveur. Pour se faire, MySQL utilise 3 nouvelles tables: information_schema.routine, mysql.proc et mysql.proc_priv. Si vous upgradez un serveur à partir d’une version inférieure à MySQL 5, il faut s’assurer que ces tables sont présentes. Vous pouvez utiliser le script mysql_upgrade pour les ajouter.
Pour conclure, vous devez aussi savoir que le code qui constitue une routine est stocké différemment du code utilisé pour la créer. Les commentaires sont supprimés, c’est pourquoi il est conseillé de toujours conserver une copie du code de votre routine dans un fichier texte à l’extérieur du serveur.
Bien sur, il y a beaucoup d’autres choses à savoir, mais je crois que ça fait le tour de ce qui est essentiel!
www.noidea.ca |
11/11/08 3:02 AM
Design du blog
Comme vous pouvez constater, j’ai changé le design du blog. L’idée m’est venue après une discussion avec deux collègues du boulot, Jérome et Mathieu, sur les statistiques de fréquentation de nos blogs en rapport à l’usability et les différentes techniques de SEO.
Le but est de mesurer l’impact d’un “meilleur” design sur les statistiques fourni par google analytics. Je m’attends à avoir un effet sur les valeurs des Pages par visite, du Taux de rebond et le Temps moyen passé sur le site.
Et si ça ne change rien, vous pourrez au moins profiter d’un design un peu plus joli, non ?
www.noidea.ca |
11/9/08 11:35 PM
Conférence MySQL / SUN à Paris, mercredi 19 novembre 2008
Mercredi 19 novembre 2008, MySQL/SUN organise sa deuxième conférence française.
Pourquoi y aller ?
Découvrir les meilleures pratiques pour déployer et gérer les applications MySQL à travers votre entreprise
Comprendre comment bénéficier des nouvelles technologies telles que memcached et MySQL Proxy
Obtenir des informations détaillées sur les nouvelles fonctions, produits et services MySQL
Bénéficier de conseils de spécialistes sur l’optimisation des performances de MySQL
Développer vos compétences pour bâtir des applications MySQL fortement évolutives, fiables, sécurisées et à haute disponibilité
Écouter des témoignages clients sur la mise en place d’applications MySQL
Apprendre comment mettre en place un entrepôt de données de plusieurs téra-octets avec MySQL et Infobright
Établir des relations et échanger avec d’autres utilisateurs MySQL et avec les membres de l’équipe MySQL de SUN
Au programme
Les conférences
Le Futur de MySQL: Ce que vous devez savoir sur les fonctionnalités et services à venir
Délivrer des applications Web 2.0 avec MySQL et memcached
Meilleures pratiques pour déployer MySQL sur Solaris
Haute disponibilité avec load balancing & MySQL Proxy
Choisir la bonne solution HA pour MySQL
Le datawarehouse multi-téraoctets avec MySQL et Infobright
Les performances MySQL sous microscope
Stratégies de Backup pour MySQL
Scale Up, Scale Out, VirtualisationQue devez-vous faire avec MySQL ?
Présentations clients
Kewego
Virgin Mobile
Intervenants
Bertrand Matthelié, Directeur Marketing EMEA MySQL
Bruno Hourdel, Directeur Marketing Sun France
Robin Schumacher, Directeur Product Management MySQL
Serge Frezefond, Ingénieur avant-vente
Eric Bezille, Chief Technologist
Philippe Campos, consultant sénior
Max Mether, instructeur
Miriam Tuerk, CEO Infobright
Stéphane Varoqui, consultant sénior
Date
mercredi 19 novembre 2008
Lieu
Hotel Le Méridien Etoile
81 Boulevard Gouvion Saint-Cyr
75017 Paris
Tel : 01 40 68 34 34
Prix
Le prix de la conférence est de 199 EUR incluant le déjeuner.
Alléchant tout ça, moi j’y serai
dasini.net |
11/6/08 6:23 PM
Sun combine MySQL à ses serveurs en cinq nouveaux packages
Sun vient d'annoncer cinq nouvelles solutions conçues pour optimiser les performances de sa base de données Open Source MySQL avec ses serveurs et systèmes (...)
Sun combine MySQL à ses serveurs en cinq nouveaux packages
Sun vient d'annoncer cinq nouvelles solutions conçues pour optimiser les performances de sa base de données Open Source MySQL avec ses serveurs et systèmes (...)
www.lemondeinformatique.fr |
11/5/08 11:00 PM
Nouveautés de la version automne 2008 de MySQL Enterprise (26 Nov 2008)
Découvrez le MySQL Query Analyzer, nouvelle fonctionnalité du MySQL Enterprise Monitor, grâce à laquelle vos systèmes MySQL pourront fonctionner aux niveaux d’évolutivité et de performances les plus élevés. Date and Time: Wednesday, 26 Nov 2008, 10h00 CET (heure de Paris)
www.mysql.fr |
11/3/08 5:04 PM
AUTO_INCREMENT: Différences MyISAM - InnoDB
La clause, AUTO_INCREMENT, permet à MySQL de générer un entier unique pour tout nouvel enregistrement d’une table. Cette clause ne peut se mettre que sur les champs de type entier, indexé et non nul. Elle est donc souvent utilisée comme clé primaire.
Cependant, sont comportement n’est pas tout à fait identique sur une table MyISAM et sur une table InnoDB.
mysql> CREATE TABLE table_myisam (id INT AUTO_INCREMENT PRIMARY KEY) engine=MyISAM;
mysql> SHOW CREATE TABLE table_myisam;
CREATE TABLE `table_myisam` (
`id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
mysql> INSERT INTO table_myisam (id) VALUES (NULL),(NULL),(NULL),(100);
Query OK, 4 rows affected (0.02 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> SELECT id FROM table_myisam;
+—–+
| id |
+—–+
| 1 |
| 2 |
| 3 |
| 100 |
+—–+
mysql> SHOW CREATE TABLE table_myisam;
CREATE TABLE `table_myisam` (
`id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=101 DEFAULT CHARSET=latin1
mysql> DELETE FROM table_myisam WHERE id=100;
mysql> SELECT id FROM table_myisam;
+—-+
| id |
+—-+
| 1 |
| 2 |
| 3 |
+—-+
mysql> SHOW CREATE TABLE table_myisam;
CREATE TABLE `table_myisam` (
`id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=101 DEFAULT CHARSET=latin1
mysql> CREATE TABLE table_innodb (id INT AUTO_INCREMENT PRIMARY KEY) engine=InnoDB;
mysql> SHOW CREATE TABLE table_innodb;
CREATE TABLE `table_innodb` (
`id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
mysql> INSERT INTO table_innodb (id) VALUES (NULL),(NULL),(NULL),(100);
Query OK, 4 rows affected (0.22 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> SELECT id FROM table_innodb;
+—–+
| id |
+—–+
| 1 |
| 2 |
| 3 |
| 100 |
+—–+
mysql> SHOW CREATE TABLE table_innodb;
CREATE TABLE `table_innodb` (
`id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=101 DEFAULT CHARSET=latin1
mysql> DELETE FROM table_innodb WHERE id=100;
mysql> SELECT id FROM table_innodb;
+—-+
| id |
+—-+
| 1 |
| 2 |
| 3 |
+—-+
mysql> SHOW CREATE TABLE table_innodb;
CREATE TABLE `table_innodb` (
`id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=101 DEFAULT CHARSET=latin1
/*************************************/
/**** reboot du serveur MySQL ****/
/*************************************/
mysql> SHOW CREATE TABLE table_myisam;
CREATE TABLE `table_myisam` (
`id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=101 DEFAULT CHARSET=latin1
mysql> INSERT INTO table_myisam (id) VALUES (NULL);
mysql> SELECT id FROM table_myisam;
+—–+
| id |
+—–+
| 1 |
| 2 |
| 3 |
| 101 |
+—–+
mysql> SHOW CREATE TABLE table_innodb;
CREATE TABLE `table_innodb` (
`id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1
mysql> INSERT INTO table_innodb (id) VALUES (NULL);
mysql> SELECT id FROM table_innodb;
+—-+
| id |
+—-+
| 1 |
| 2 |
| 3 |
| 4 |
+—-+
dasini.net |
11/1/08 11:07 PM
Trimestriels : saigné à blanc, Sun a du mal à digérer MySQL
Pire que prévu. Sun Microsystems avait prévenu que ses résultats trimestriels ne seraient pas conformes aux attentes, mais les analystes ne prévoyaient (...)
www.lemondeinformatique.fr |
10/30/08 11:00 PM
MySQL 5.0 : Un SGBDR mature ? (part 4/4)
Déclencheurs
Les déclencheurs (triggers) sont des ordres de déclenchement d’opérations quand un évènement survient sur une table.
Des déclencheurs pour maintenir la cohérence des données
Ils sont souvent utilisés pour assurer la cohérence des données dans la base, en réalisant des contraintes qui doivent porter sur plusieurs tables.
Les déclencheurs combinés aux transactions permettent de créer tous les mécanismes d’intégrité référentielle. La norme SQL 3 a d’ailleurs imposé l’utilisation des déclencheurs.
Initialement prévu pour la version 5.1, l’équipe de développement à finalement profité d’une avance sur le calendrier de développement pour proposer une version simplifié des déclencheurs dans la version 5.0.
Syntaxe de base
CREATE TRIGGER trigger_nom
[DEFINER = { user | CURRENT_USER }]
{ BEFORE | AFTER }
{ INSERT | UPDATE | DELETE }
ON table name
FOR EACH ROW
triggered SQL statement
Le premier élément entrant en compte est le nom (trigger_nom). L’action qui est déclenchée l’est à la suite d’un évènement (ex : insertion d’un nouvel enregistrement dans une table). Le second paramètre (BEFORE ou AFTER) indique si le déclencheur doit être lancé avant ou après l’évènement.
Les déclencheurs peuvent être activé durant l’appel à un INSERT, un UPDATE ou un DELETE.
CREATE TRIGGER trig_livre
BEFORE INSERT
Le déclencheur est lié à une table que nous définissons avec le mot clef ON :
CREATE TRIGGER trig_livre
BEFORE INSERT
ON livre
On définit alors les instructions à effectuer une fois le déclencheur activé.
CREATE TRIGGER trig_livre
BEFORE INSERT
ON livre
FOR EACH ROW
BEGIN
INST1;
INST2;
END;
Prenons un cas pratique :
mysql> CREATE TABLE account (acct_num INT, amount DECIMAL(10,2));
mysql> CREATE TRIGGER ins_sum BEFORE INSERT ON account
-> FOR EACH ROW SET @sum = @sum + NEW.amount;
Limitation des déclencheurs liées à la version 5.0
Comme nous l’avons indiqué plus amont le support des déclencheurs est un plus dans la version 5.0 de MySQL : C’était prévu pour la version 5.1. Il n’en reste pas moins que c’est une version light qui souffre à ce jour de quelques limitations :
On ne peut associer un déclencheur à une vue ou à une table temporaire,
Les déclencheurs ne peuvent pas non plus faire appel à une procédure stockée ou à des fonctions.
INFORMATION_SCHEMA
La base INFORMATION_SCHEMA, standard du SQL:2003, fournit un accès aux métadonnées du serveur MySQL.
Les métadonnées sont les informations sur les données, telles que le nom des bases de données, le nom des tables, le type des données, d’index, les droits d’accès, etc.
INFORMATION_SCHEMA est une base de données virtuelle, vous ne pouvez y accéder qu’en lecture. En effet, les tables qui la composent, ne sont en fait que des vues. Vous ne verrez donc pas sur le disque dur de fichiers associés.
Par exemple, pour récupérer le code
des procédures stockées, de la base de données FRESHDAZ, il faut
pour cela, sélectionner les colonnes ROUTINE_NAME et
ROUTINE_DEFINITION de la table information_schema.ROUTINES:
mysql> SELECT R.ROUTINE_NAME, R.ROUTINE_DEFINITION
-> FROM information_schema.ROUTINES R
-> WHERE R.ROUTINE_TYPE = ‘PROCEDURE’ AND R.ROUTINE_SCHEMA = ‘FRESHDAZ’;
Goodies and co
Amélioration des traitements mathématiques
Avec MySQL 4.1 le résultat de la commande SELECT .01 * .01 renvoyait 0. MySQL 5 utilise une bibliothèque permettant des calculs plus précis. Ainsi 0.0001 est traité comme une valeur exacte et non plus comme une valeur approximative.
Nouveau moteur de stockage
Un nouveau moteur de stockage a été ajouté depuis MySQL 5.0.3 : FEDERATED Storage Engine. Il permet d’accéder à des données présentes sur des bases de données distantes.
Conclusion
MySQL 5 apporte un réel confort en terme de fonctionnalités par rapport à ses versions antérieures. Les déclencheurs, les vues et les procédures stockées propulsent MySQL dans le monde des SGBD matures et permet de soutenir la comparaison avec Oracle, PostgreSQL et autres.
Avec cette nouvelle version MySQL élargit son public en ne s’adressent plus principalement aux architectes d’applications Web mais à tous les développeurs.
dasini.net |
10/30/08 6:20 PM
LA manifestation PHP française
Le Forum PHP 2008 se déroulera les 8 et 9 décembre 2008, à l’ASIEM dans le VIIème arrondissement à Paris
Les principaux thèmes seront:
Web services professionnels et Grands projets en PHP : organisation, méthodes et bonnes pratiques.
Au programme également des conférences, dont la mienne:
Les solutions « Haute disponibilité » avec MySQL
Présentation des solutions de haute disponibilité offertes par MySQL Sujet abordés :
les solutions de clustering (MySQL Cluster)
réplication (MySQL Replication)
architecture Shared Disk Clustering
http://afup.org/pages/forumphp2008/sessions.php#79
dasini.net |
10/29/08 8:21 PM
Job : PHP DEVELOPER
PHP DEVELOPER pour Delcampe International sprl
On recherche des développeurs avec plus dun an d'expérience en php, à Petit-Enghien (entre Halle et Ath), l'équipe Delcampe est composée de 11 personnes pour gérer le support aux membres, les stratégies marketing et les évolutions techniques.
Mission:
S'intégrer à l'équipe de développement pour la maintenance et l'ajout de fonctionnalités. Vous aurez un rôle important au sein de notre équipe de développement et participerez à l'analyse et à la programmation des évolutions techniques. Vous aurez une grande responsabilité sur vos tâches, allant de la programmation aux tests et à la mise en production.
Utiliser différentes technologies, sur des environnements tant Linux que Windows : PHP, Javascript, AJAX, xHTML, XML, etc. ;
Optimiser l'ergonomie des applications développées ;
Utilisation des bases de données gérées en collaboration avec les DBAs de MySQL AG ;
Travail dans un environnement Linux multiserveurs en collaboration avec les ingénieurs de Tigron et Evonet ;
Description de l'entreprise:
Delcampe.net est le plus important site de ventes aux enchères réservé aux collections.
Fondé en 2000, Delcampe accueille aujourd'hui plus de 300,000 personnes et 18 millions d'objets de collection.
Il est récemment entré dans le Top 10 des sites sur lesquels les français passent le plus de temps.
Basée dans le cadre verdoyant d'une grande maison.
Profil:
Compétences :
Expérience en PHP (OO, ...), MySQL, JavaScript ( & Ajax), Css, xHTML.
Bonus : connaissance de Linux/UNIX, Apache, SubVersion, Méthodes Agile & eXtreme Programming, techniques SEO et Design.
Sont également des atouts : connaissance de C#, Flex ou Flash.
Talents :
Dynamique, rigoureux, créatif, autonome, doté d'une bonne culture générale technique, vous êtes issu d'une formation supérieure en informatique/programmation.
Vous appréciez le travail en équipe et savez vous impliquer dans les projets.
Vous privilégiez l'analyse et la réflexion à l'improvisation.
Vous êtes motivé à l'idée de devenir une pièce importante du développement du site Delcampe.
Offre:
Un travail complet, intéressant et au cour de l'évolution des technologies Web ;
Une place dans une équipe agile, en constante évolution, ;
Des projets techniques stratégiques, des challenges techniques permanents ;
Un environnement de travail à taille humaine dans un cadre boisé et aéré ;
Un contrat à durée indéterminée avec une rémunération fixe (25 à 50,000 par an) correspondant et évoluant en fonction de vos compétences ... et de votre talent !
L'offre sur références.be : http://www.references.be/Jobs/DisplayVacancy.aspx?ID=1039194
Intéressé ?
Contactez Evelyne Lorand, Responsable Recrutement.
Email : evelyne@delcampe.com
moosh.et.son.brol.be |
10/29/08 5:40 PM
MySQL 5.0 : Un SGBDR mature ? (part 3/4)
Procédures stockées et fonctions
Les procédures stockées sont des listes de commandes qui peuvent être compilées et stockées sur le serveur. Elles permettent de déplacer une partie de la logique métier d’une application de base de données du client vers le serveur. Les clients nont plus besoin de soumettre à nouveau toute la commande, mais font simplement référence à la procédure stockée.
Cela se traduit par une amélioration de la sécurité, une diminution de la redondance du code, et une augmentation des performances.
Des procédures stockées pour améliorer la sécurité
Elles peuvent fournir une protection contre les attaques d’injection SQL, principalement contre celles qui utilisent un opérateur AND ou OR pour ajouter des commandes à une valeur de paramètre d’entrée valide. Les programmes clients n’accédant plus directement aux tables. Toutes les opérations de gestion des données sont effectuées via des procédures stockées.
Des procédures stockées pour centraliser les requêtes
Différentes applications peuvent accéder à la même base de données et avoir les mêmes fonctionnalités. Les procédures stockées peuvent alors servir à factoriser ce code SQL commun ce qui permet de diminuer la redondance et facilite la maintenance du code.
Des procédures stockées pour augmenter les performances
Les commandes nont pas à être analysées plusieurs fois, elles sont (pré)compilées sur le serveur et bien moins dinformations transitent sur le réseau, le trafic y est donc limité.
Les procédures stockées sont particulièrement utiles quand les clients qui accèdent à la base de données ne sont pas sur le même serveur.
Le principal inconvénient des procédures stockées, et qu’elles nous rendent complètement dépendantes de l’éditeur de la base de données, puisqu’il n’existe pas de langage universel de développement de procédures stockées.
Une migration simplifiée par le respect du standard SQL 2003
Les procédures stockées de MySQL 5 respectent certaines recommandations du standard SQL 2003. La syntaxe est donc très proche de la syntaxe de DB2 ce qui permet une migration facile entre les deux outils. La migration en provenance d’Oracle ou de MS SQL Server impliquera plus de travail manuel étant donné que leurs bases de données ne respectent pas autant le standard.
Astuce : Pour migrer d’Oracle vers MySQL on peut utiliser les outils de migration Oracle vers DB2 puis passer de DB2 à MySQL qui sont très proches.
Syntaxe
CREATE
[DEFINER = { user | CURRENT_USER }]
PROCEDURE sp_name([parametres])
LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
| COMMENT 'string'
routines
dasini.net |
10/29/08 3:47 PM
Actualités MySQL
Voilà maintenant quelques jours que plusieurs nouvelles versions de MySQL sont sorties. Faisons le point. En premier lieu, la version candidate 5.1.29 apporte, en plus des corrections de bugs habituelles, quelques changements notables concernant les options, certaines destinées à disparaître dans les prochaines versions. Par conséquent, il est dorénavant déconseillé d'utiliser l'option --skip-thread-priority, celle-ci étant vouée à disparaître dans la version 6.0. De plus, l'option --log est remplacée par --general_log et l'option --log-slow-queries est remplacée par --slow_query_log.
Changelog
Téléchargement
La version 6.0.7-alpha quant à elle propose de nouvelles options pour mysqlbinlog, une nouvelle variable système backupdir, une amélioration de la commande mysqltest, un nouveau privilège CREATE TABLESPACE et plus encore.
Changelog
Téléchargement
Pour les entreprises, la version 5.0.70 de MySQL Entreprise améliore la sécurité de l'application grâce à la nouvelle variable système plugin_dir reprise de MySQL 5.1 et corrige une faille de sécurité pouvant être exploitée lors de la création de tables MyIsam avec les options data directory et index directory.
Changelog
Enfin, il est bon de noter qu'une nouvelle version de MySQL GUI Tools est également à disposition.
Téléchargement
www.phpindex.com |
10/29/08 3:34 PM
où sont les sources?
Mon ami Laurent essaye avec plus ou moins de succés à m’initier à la “continuous integration“… c’est ainsi que j’ai commencé à chercher les sources de MySQL!
En quelques secondes et avec cet excellent article sous le bras vous pouvez installer Bazaar et récupérer rapidement toutes les sources de MySQL… oui de la version communauté.
Qu’en est il de la version enterprise? Si vous n’avez pas de compte “enterprise”, une des seules solutions est d’aller les récupérer chez mes amis de Proven Scaling. En effet, MySQL ne fournit par défault les sources qu’aux clients
Je ne juge pas, je veux juste vous éviter de passer comme moi des heures à les chercher!
www.dbnewz.com |
10/28/08 8:13 PM
MySQL 5.0 : Un SGBDR mature ? (part 2/4)
Vues
Des vues pour faciliter la visibilité
Les vues sont la plupart du temps utiles pour donner aux utilisateurs laccès à un ensemble de relations représentées sous la forme d’une table. Une vue est une table virtuelle ; les données de la vue sont en fait des champs de différentes tables regroupées, ou des résultats dopérations sur ces champs.
Des vues pour améliorer la confidentialité
Une vue n’est pas forcément un regroupement de plusieurs tables mais peut être un sous ensemble d’une table (ou de plusieurs) ce qui permet de cacher des champs aux utilisateurs.
Par exemple il ne sera pas forcément utile à tout le monde d’accéder aux champs indiquant les bénéfices réalisés sur un projet dans votre base comptable. Vous pouvez donc créer une vue contenant tous les champs de la table projet sauf le champs bénéfice.
L’approche avec MySQL 5 sera donc plus souple car elle ne force plus un découpage de table pour gérer la confidentialité et les droits donnés aux utilisateurs. Les vues permettront de remplir ce rôle.
Les vues compliquent les mises à jour
Insérer ou modifier des données dans une vue n’est pas aussi simple que de faire un update dans une table. Pour pouvoir le faire il faut réfléchir de façon plus poussée au modèle conceptuel de données :
Une vue n’est pas forcément accessible en insertion / modification. Pour cela il faut qu’il n’y ait pas d’incompatibilité logique à ce qu’elle le soit.
Tous les champs des tables possédant des contraintes d’intégrités (index unique, clés primaires ..) doivent être présent
La vue ne doit pas posséder de regroupement ou dexclusion ( GROUP BY , DISTINCT, UNION)
Le plan d’exécution de la vue ne doit pas passer par une table temporaire
Les vues de MySQL 5 par la pratique
CREATE
[OR REPLACE]
VIEW view-name
[(column-list)]
AS select-statement
Créer une vue revient à appliquer un filtre à une ou plusieurs tables. Pour schématiser prenons une entreprise normale. Dans celle-ci il y a des employés regroupés sous le terme ‘personnel’. On regroupe ces employés par ‘catégorie’ en fonction de leur activité (administratif, informatique, commercial,…).
On peut créer une vue contenant l’ensemble des informaticiens avec le code suivant :
CREATE VIEW personnelinformatique
AS SELECT a.nom AS nom,a.prenom AS prenom,b.service AS service
from categorie b, personnel a
where a.fkCategorie = 1 and a.fkCategorie = b.pkCategorie;
Optimisation des vues de MySQL 5
CREATE
[ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
[DEFINER = { user | CURRENT_USER }]
[SQL SECURITY { DEFINER | INVOKER }]
VIEW view-name
[(column-list)]
AS select-statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
La clause facultative «ALGORITHM» n’est pas standard. Elle permet d’optimiser votre code.
MERGE utilise la requête SQL ayant servie à la création de la vue comme base d’opération.
TEMPTABLE utilise une table temporaire créée pour stocker les résultats.
Par défaut l’optimiseur MySQL décide lui-même quelle option choisir (UNDEFINED). Pour améliorer les performances, il est généralement plus intéressant de le définir statiquement afin d’éviter à l’optimiseur de le découvrir à chaque exécution.
«DEFINER» assigne un créateur à la vue.
«SQL SECURITY» définit quelles seront les droits de l’utilisateur, lors de l’exécution de la vue. Deux valeurs sont possibles:
- DEFINER permet d’exécuter la vue avec les droits du créateur.
- INVOKER permet d’exécuter la vue avec ses propres droits.
Pour finir, la clause facultative CHECK OPTION permet de ne modifier que la vue ou du moins des informations qui respectent les contraintes de la vue. Ainsi dans notre exemple, avec la clause CHECK OPTION, il ne sera pas possible de modifier au travers de la vue « personnelInformatique » une personne ne travaillant pas dans le service informatique.
Manque
Le seul léger bémol est que la version 5.0 de MySQL ne disposera pas des vues matérialisées. Les vues matérialisées sont des données physiquement dupliquées dans le SGDB. Par exemple le résultat d’un calcul n’est plus à refaire pour chaque accès. Leur utilité se fait particulièrement sentir lors de traitements de tables très volumineuses .
Comparaison avec d’autres SGBD
MySQL
IBM DB2
Oracle
SQL Server
Basic
Oui
Oui
Oui
Oui
UNION ALL
Oui
Oui
Oui
Oui
JOINS
Oui
Oui
Oui
Oui
INSTEAD OF
Non
Oui
Oui
Oui
UPDATEABLE_KEY
Oui
Non
Non
Non
Possibilité des vues avec MySQL 5.0
UPDATEABLE_KEY est une fonctionnalité de MySQL permettant de modifier une clef primaire par le biais d’une vue.
(à suivre…)
dasini.net |
10/28/08 4:28 PM
MySQL: Le Book
Un gars sur IRC me demandait l’autre jour quel était Le book de MySQL. Il n’y a évidemment pas possible de devenir expert en la matière avec un seul livre. Après quelques échanges, j’ai vite compris qu’il cherchait à améliorer l’utilisation qu’il en fait en tant que développeur d’application Web.
Je n’ai pas eu l’occasion (comprendre le temps) de lire des milliers de livres. Par contre dans ceux que je connais, je lui ai suggéré deux qui répondront bien à ce qu’il veut: MySQL 5.0 Certification Study Guide et MySQL Stored Procedure Programming.
Le Certification Study Guide se divise en deux parties distinctes: la première est pour les développeurs alors que la deuxième s’adresse aux Administrateurs. Dans la première partie, on y voit tous les concepts essentiels pour les développeurs d’application: syntaxe, sous requête, jointure, datatype et index, routines, etc… Il fait un tour complet sur tous les sujets nécessaires pour passer l’examen de certification. C’est super, mais ça parle très peu d’optimisation et on ne fait que survoler certains sujets; le livre tente plutôt de donner tous les éléments nécessaires pour comprendre la matière et faire les bons choix pour arriver à un résultat optimisé. C’est pourquoi je lui ai également suggéré MySQL Stored Procedure Programming.
Ce deuxième livre focus principalement sur les procédures stockées, les fonctions et les triggers. Ces trois aspects jouent, à mon avis, un rôle important dans la performance d’une application et l’intégrité des données. Il est difficile de ne pas parler de syntaxe, de jointures, de datatypes et dautres concepts clés lorsqu’on explique ce qu’est une procédure stockée. L’auteur ne néglige aucun détail. Il arrive brillamment à expliquer comment et pourquoi 2 petites requêtes peuvent être mieux qu’une seule grosse avec des jointures complexes dans certains cas, et pourquoi une seule peut meilleur que 2 petites dans d’autres. Il y a dans chaque chapitre un souci de la performance qui n’existe pas dans le Certification Study Guide.
Ces deux oeuvres forment à mon avis une base solide pour comprendre et utiliser intelligemment MySQL en tant que développeur. Je recommande de les lire dans l’ordre dans lequel je les décris. On fait le tour de tous les features importants et on réussit à aller chercher les connaissances nécessaires pour en faire une utilisation solide et efficace avec MySQL Certification Study Guide et on ajoute à ça des notions de performance et d’optimisation avec MySQL Stored Procedure Programming.
Bonne lecture!
www.noidea.ca |
10/28/08 3:06 AM
MySQL 5.0 : Un SGBDR mature ? (part 1/4)
MySQL est le SGBD Open Source le plus populaire au monde. Sa cinquième version, sortie en octobre 2005, permet de mieux répondre aux problématiques d’entreprise. Au menu des nouveautés fonctionnelles : les vues, les procédures stockées, les déclencheurs, de nouveaux moteurs de stockage, la base de données INFORMATION_SCHEMA et diverses petites améliorations.
Avec toutes ces nouveautés la philosophie de MySQL reste la même : « simplicité et hautes performances ».
Fonctionnalités
Déjà, avant même la version 5, MySQL supportait de nombreuses fonctionnalités avancées lui permettant de répondre à un grand nombre de problématiques d’entreprise : Les requêtes imbriquées depuis MySQL 4.1, les transactions depuis MySQL 3.23 ainsi que les clés étrangères et l’intégrité référentielle.
MySQL 4.1
MySQL 5.0
MySQL 5.1
Clés étrangères / Intégrité référentielle
Avec le moteur innoDB
Avec le moteur innoDB
Avec le moteur innoDB
Réplication
Oui
Oui
Oui
Requêtes imbriquées
Oui
Oui
Oui
Vues
Oui
Oui
Procédures stockées
Oui
Oui
Déclencheurs
Oui
Oui
Partitionnement
Oui
(à suivre…)
dasini.net |
10/27/08 7:16 PM
Dont be afraid to ask
J’ai lu récemment le bouquin MySQL Stored Procedure Programming de Guy Harrison et Steven Feuerstein. Il y a un passage d’environ une page qui m’a particulièrement marqué. Ça n’a rien à voir avec MySQL directement, il s’agit plutôt d’un conseil d’ordre général qui s’applique à tous les développeurs. Voici une traduction française de ce qu’il disait.
Les softwares sont écrits par des humains, il est donc important de reconnaitre que la psychologie humaine joue un rôle clé lors du développement.
Joe, le développeur senior d’une équipe de 6, a un problème avec son programme. Il l’a étudié durant plusieurs heures, devenant de plus en plus frustré puisqu’il n’arrive pas à trouver la source du problème. Il n’a pas pensé demander à un coéquipier, car ils sont tous moins expérimentés que lui. Après un bon moment, il abandonne et appelle un membre de l’équipe: “Sandra, peux-tu venir ici et jeter un coup d’oeil à mon programme? J’ai un problème que je n’arrive pas à trouver.” Sandra arrive et identifie rapidement ce qui aurait dû être évident à Joe il y a déjà longtemps. Super! Le programme est fixé et Joe exprime de la gratitude, mais en fait il est secrètement embarrassé.
Il se dit “Pourquoi est-ce que je n’ai pas vu ça” et “si j’avais pris 5 minutes de plus de l’aurais trouvé”. C’est comprenable, mais incorrect. Le fait est que trop souvent nous sommes incapables d’identifier nos propres problèmes, car nous sommes trop près de notre code. Parfois, tout ce dont nous avons besoin c’est d’une nouvelle perspective, d’un point de vue objectif de quelqu’un d’autre. Ça n’a rien à voir avec l’expérience ou les compétences.
De son côté, Sandra ne pense pas de mal de Joe. Au contraire, en lui demandant de l’aide, Joe a fait augmenter sa confiance en elle. Ainsi, les deux membres de l’équipe en bénéficient.
Nous encourageons fortement que vous établissiez ces règles dans votre organisation:
Récompenser l’admission d’ignorance
Cacher ce que vous ne savez pas à propos d’une application ou d’un code est dangereux. Développez une culture dans laquelle il est “ok” de dire “je ne sais pas” et encouragez les gens à poser beaucoup de questions.
Demander de l’aide
Si vous ne pouvez pas trouver la cause d’un problème en moins de 30 minutes, demandez immédiatement de l’aide. Vous pouvez même établir un “buddy system” ou chaque personne est associée à une autre dans le but de lui demander de l’aide au besoin. Ne perdez pas plusieurs heures à vous frapper la tête contre le mur à la recherche de réponse.
Créer des équipes de révision
Ne donnez pas votre code au Q.A (Assurance Qualité) ou ne le mettez pas en production sans qu’il ait été révisé et critiqué (positivement) par un membre de votre équipe.
Je suis persuadé que tout le monde s’est déjà retrouvé dans une situation semblable au moins une fois. Vous n’êtes pas obligé d’appliquer les 3 recommandations, mais je crois qu’il y a là matière à réfléchir avec ce qui a été mentionné.
www.noidea.ca |
10/24/08 1:36 AM
Dessine-moi MySQL : structure dun index MyISAM et InnoDB
Deuxième exemplaire (traduire “2ème essai”) concernant ces schémas “à main levée”, au menu du jour une comparaison entre la structure d’un index MyISAM et celle d’un index InnoDB :
J’ai tenté de tenir compte de vos commentaires précédents, notamment sur les majuscules, est-ce plus lisible ?
Selon les “règles” établies pour cette série “Dessine-moi MySQL”, les schémas doivent être suffisamment explicites pour ne pas nécessiter d’explications supplémentaires…
Cependant, vu que je n’ai pas 10 ans d’école d’arts graphiques derrière moi (ça s’est vu ?), et que chaque règle a son exception, je rajouterai tout de même ceci :
Sous MyISAM, il n’y a pas de différence entre une clé primaire et un index “classique” du point de vue de leur structure, ils sont implémentés de la même façon : ils sont triés et pointent vers le ou les enregistrements correspondants. A noter que MyISAM stocke les enregistrements dans l’ordre où ils sont insérés.
En revanche sous InnoDB, une clé primaire est un index dit “clustered“. L’index est dans ce cas “accolé” aux données, il n’y a pas de “saut” supplémentaire à effectuer pour aller chercher l’enregistrement une fois qu’on est positionné sur la valeur recherchée de la clé primaire.
Avec InnoDB, les enregistrements sont stockés non pas dans l’ordre d’insertion mais triés selon la clé primaire.
Rajoutons pour terminer que sous InnoDB, un index secondaire contient systématiquement la clé primaire. C’est en effet le “pointeur” vers la clé primaire qui permet de retrouver l’enregistrement recherché.
Deux conséquences :
- il faut bien choisir sa clé primaire (concise de préférence puisque celle-ci sera présente dans chaque index secondaire).
- le fait que la clé primaire soit présente sur chaque index secondaire permet “d’émuler” la présence d’un index supplémenaire sur votre table, autrement dit il existe des stratégies d’optimisation au rayon des covering index à ce sujet…
Ce dernier point sonne comme un proverbe chinois ? Alors ne manquez pas le prochain épisode sur les covering index, le support de cours est justement sous vos yeux
www.dbnewz.com |
10/24/08 12:41 AM
Vidéo PHP et MySQL, édition 65
Voici les 5 dernières vidéos PHP et MySQL.
Drizzle talk (0 visite)
End To End Web Testing With Selenium (0 visite)
Best Practice Solutions for Frequest Ajax Use Cases With Prototype (0 visite)
PHPTV REPORTAGE : BARCAMP PHP A PARIS (0 visite)
Doctrine Php Object Relational Mapper (0 visite)
Debugging With Symfony (0 visite)
Ces vidéos sont publiés sur les sites de partagent de vidéo. Ce sont des tutoriels enregistrés, des sessions de conférences, des screencast ou encore des slides de conférences.
N'hésitez pas à nous contacter pour signaler tout media qui mérite d'être ajouté à cette liste.
www.nexen.net |
10/22/08 11:00 PM
MySQL 5.0.70 chez Proven Scaling
Sun MySQL a publié la version 5.0.70 (entreprise), et les sources, comme les binaires, sont maintenant publiés chez Proven Scaling.
C'est une version intermédiaire, baptisée MRU. - MySQL Enterprise 5.0.70 released www.lephpfacile.com | 10/22/08 8:31 PM
LeMUG.fr organise son premier BarCamp
Oyez, oyez,
LeMug.fr (Le MySQL User Group français) dont la soirée inaugurale fut relatée ici, organise son premier BarCamp ce samedi 25 octobre.
Ca se passe sur Paris, à “La Cantine”, le même endroit qui nous avait accueilli lors de la soirée précédente. Cette fois-ci l’évènement s’étale entre 11h et 19h.
Deux liens à parcourir :
L’annonce détaillée de ce BarCamp et la page d’inscription.
Si vous êtes dans le coin, n’hésitez pas à faire un tour (c’est gratuit !).
www.dbnewz.com |
10/22/08 7:27 AM
Les partitions pour gérer un réseau de satellites
"SatManage est le seul système au monde de gestion de réseau de satellites. Pour l'analyse des réseaux satellitaires, un accès rapide à un historique volumineux est essentiel : nous devons accéder aux vitesses CGI dans une dizaine de tables de données historiques, chacune contenant des dizaines de Go de données, et plus de 500 millions de lignes. "
Les partitions permettent ici de découper les données en portions plus petites, et de diriger habilement les recherches pour gagner en performances. Comme toujours, moins on manipule de lignes, plus on va vite. Using Partitioning to Manage Satellite Networks (0 visite)
www.nexen.net |
10/21/08 11:00 PM
MySQL 5.0.70 chez Proven Scaling
Sun MySQL a publié la version 5.0.70 (entreprise), et les sources, comme les binaires, sont maintenant publiés chez Proven Scaling. C'est une version intermédiaire, baptisée MRU. MySQL Enterprise 5.0.70 released (0 visite)
www.nexen.net |
10/21/08 11:00 PM
La 8ème édition du Forum PHP est lancée !
L'édition 2008 du rendez-vous français incontournable des utilisateurs PHP accueille cette année encore des intervenants d'exception : Zak Greant, Foo Associates, Laura Thompson, Mozilla, et Lukas Smith, Core Developpeur PHP. Organisé à Paris les 8 et 9 décembre 2008 par l'Association Française des Utilisateurs de PHP (www.afup.org), le Forum PHP 2008 sera placé sous le signe des Web services professionnels et des grands projets en PHP.
Depuis 8 ans, l'AFUP organise le Forum PHP pour permettre aux utilisateurs de PHP de se retrouver et d'échanger autour de conférences et ateliers à forte valeur ajoutée. Cette année encore, les participants auront l'opportunité de débattre avec les experts internationaux présents, et ainsi mieux appréhender les enjeux technologiques du langage PHP, devenu la technologie de référence pour construire des applications web en entreprise. Des acteurs de poids dans le monde PHP comme Zend, Oracle et Anaska/AlterWay ont apporté leur soutien pour cette huitième édition.
Les deux journées seront loccasion dassister à des conférences et ateliers techniques ou fonctionnels, ainsi qu'à des retours dexpériences. Cet événement intéressera les responsables informatiques et décideurs souhaitant découvrir le potentiel de la plate-forme PHP, et les développeurs attirés par les aspects plus techniques tels que la sécurité et la montée en charge.
** Focus : les temps forts du Forum **
Le Forum PHP 2008 permettra aux participants d'approfondir leurs connaissances du langage PHP, et d'échanger avec les intervenants au travers de 3 prismes :
✔ les conférences
✔ les retours d'expériences
✔ ateliers pratiques et démonstrations.
A ne pas manquer :
✔ Conférences :
Les solutions « Haute disponibilité » avec MySQL, Olivier Dasini, LeMUG.fr / Alter Way
PHP, a mystery success story!, Lukas Smith
Nouvelles fonctionnalités Oracle database 11g pour PHP, Kuassi
Mensah, Oracle
Scaling Mozilla's websites with PHP, Laura Thompson, Mozilla
✔ Les retours d'expériences :
20minutes.fr Rue89.com BNP Paribas
Place des Tendances.com
✔ Atelier « Hackez-moi ça ! », animé par Damien Seguy, Nexen.net / Alter Way : une application PHP sera lancée dans l'arène, et les participants devront l'analyser et tenter d'en prendre le contrôle.
Le programme complet de l'événement ici : http://afup.org/pages/forumphp2008/sessions.php
Proposé par Hello
www.phpindex.com |
10/21/08 1:16 AM
OurDelta : tous les patchs MySQL
OurDelta est un site communautaire, qui a pour but de rassembler les patchs MySQL qui existent, mais qui n'ont pas été intégré dans les versions officielles de MySQL. On en connait de nombreux (Google, Percona, ) qui corrigent des bugs ou bien ajoutent des fonctionnalités intéressantes. Malheureusement, le processus d'intégration dans MySQL est très long, et frustrant : quelques lignes de code, beaucoup de bienfait, mais 2 ou 3 ans de publication.
Arjen Lentz a donc rassemblé une équipe d'élite, et publie maintenant une version communautaire de MySQL, patchée au possible. Vous les trouverez sur le site de Our Delta : Our (notre) se détache de plus en plus comme le préfixe associé à la communauté MySQL, par opposition à My (Mon, mais aussi le prénom de la fille de Monty). Un site Launchpad a été monté, et vous pourrez y trouver le code source dans le SVN. Il ne reste plus qu'à le charger, et le compiler. - OurDelta - Patches Our Delta - A few tidbits - Launchpa OurDelta www.lephpfacile.com | 10/20/08 9:02 PM
Rendez-vous de la semaine
Ce soir, à Lille, il y a un apéro PHP, à l'écart, rue Jeanne d'Arc. Il y aura à écouter (PHP 5.3), à boire et à manger (Merci à l'AFUP et à SoLinux), et à caresser. Vous pourrez aussi vous procurer des elephpants, et des inscriptions à l'AFUP, ainsi que des livres blancs. Ouf.
Et je rappelle le premier BarCamp MySQL, pour Samedi 25 Octobre, où nous discuterons de MySQL, son utilisation et ses trucs. C'est un barcamp, où les sujets seront choisis et organisés directement sur place, ce qui les positionnera rapidement proches des préoccupations habituelles des admins et développeurs.
Bref, à vos agendas! Apéro LILLE, le lundi 20/10/2008 à 19:30 (0 visite) 1er BARCAMP LeMUG.fr (0 visite)
www.nexen.net |
10/20/08 6:00 AM
OurDelta : tous les patchs MySQL
OurDelta est un site communautaire, qui a pour but de rassembler les patchs MySQL qui existent, mais qui n'ont pas été intégré dans les versions officielles de MySQL. On en connait de nombreux (Google, Percona, ) qui corrigent des bugs ou bien ajoutent des fonctionnalités intéressantes. Malheureusement, le processus d'intégration dans MySQL est très long, et frustrant : quelques lignes de code, beaucoup de bienfait, mais 2 ou 3 ans de publication.
Arjen Lentz a donc rassemblé une équipe d'élite, et publie maintenant une version communautaire de MySQL, patchée au possible. Vous les trouverez sur le site de Our Delta : Our (notre) se détache de plus en plus comme le préfixe associé à la communauté MySQL, par opposition à My (Mon, mais aussi le prénom de la fille de Monty).
Un site Launchpad a été monté, et vous pourrez y trouver le code source dans le SVN. Il ne reste plus qu'à le charger, et le compiler. OurDelta (0 visite) Patches Our Delta (0 visite) A few tidbits (0 visite) Launchpa OurDelta (0 visite)
www.nexen.net |
10/19/08 11:00 PM
LimeSurvey 1.72
LimeSurvey (anciennement PHPSurveyor) est un logiciel libre de sondage en ligne.
Ce projet a été récompensé l'an passé aux Trophées du libre 2007 et cela vaut le coup d'en parler.
Il est écrit en PHP basée sur une base de données MySQL, PostgreSQL ou Microsoft SQL Server.
Limesurvey permet aux utilisateurs sans connaissance en développement de publier un sondage et d'en collecter les réponses directement dans leur site internet.
Cette nouvelle version se trouve une version de correction de bugs, mais aussi un large choix des langues dont le français, cette version propose de nombreuses fonctionnalités comme :
- Nombre illimité de questionnaires
- Création d'une version imprimante
- De pouvoir groupé les questions
- Etablir des questionnaires d'évaluation
- Gestion illimité du nombre de participants
- Une saisie direct des données
- etc...
L'ensemble des possibilités sont disponible sur Wikipedia Site officiel LimeSurvey (0 visite) Description sur Wikipedia Lime Survey (0 visite) Demo de LimeSurvey (0 visite)
www.nexen.net |
10/19/08 12:39 AM
Vidéo PHP et MySQL, édition 64
Voici les 5 dernières vidéos PHP et MySQL.
Drizzle talk (0 visite)
End To End Web Testing With Selenium (0 visite)
Best Practice Solutions for Frequest Ajax Use Cases With Prototype (0 visite)
PHPTV REPORTAGE : BARCAMP PHP A PARIS (0 visite)
Doctrine Php Object Relational Mapper (0 visite)
Debugging With Symfony (0 visite)
Ces vidéos sont publiés sur les sites de partagent de vidéo. Ce sont des tutoriels enregistrés, des sessions de conférences, des screencast ou encore des slides de conférences.
N'hésitez pas à nous contacter pour signaler tout media qui mérite d'être ajouté à cette liste.
www.nexen.net |
10/15/08 11:00 PM
Posh 2.0
Etre à la pointe des actualités se trouve être très importants pour moi et je pense que pour vous c'est la même chose, surtout pour connaître les dernières actualités. Bien sur, il existe des sites permettant d'être au courant à partir des flux RSS comme iGoogle ou sinon... Réalisé son propre portail.
Posh (portaneo open source homepage) est le portail qui vous faut car vous pouvez réaliser facilement un portail personnalisé. Il a pour but de regrouper sur une seule page tout ce compose internet : les informations, les outils et aussi les produits préférés.
Posh est bien-sur réalisé en PHP avec de l'Ajax et une base de donnée MySQL. Il propose plus de 100 modules actuellement par exemple
* Déplacement, ajout, suppression et de configuration des gadgets dans ses pages personnalisables
* API pour réaliser ses propres widgets ou d'en importer
* Gestion des pages personnalisables par onglets
* Gestion des thèmes graphiques
Mais la liste augmente régulièrement
Je ne vous montrerai pas le mien car il est en pleine évolution mais vous pouvez en plus de regarder les vidéos de démonstrations fournis par son éditeur, de visiter comme les sites ACTU F1 et MyFOOT qui sont réalisés avec ce portail, ce qui vous donnera un joli aperçu des possibilités. site officiel Posh (0 visite) Telechargement Posh (0 visite) Demo en video Posh (0 visite) Exemple 1 : ActuF1 (0 visite) Exemple 2 : MyFoot (0 visite)
www.nexen.net |
10/14/08 7:16 PM
Alertes sécurité des applications PHP et MySQL, édition 222
PHP et MySQL ne font l'objet d'aucune alerte de sécurité dans leurs versions courantes :
PHP 5.2.6 et 4.4.9; MySQL 5.0.67 (communauté) , 5.1.26 et 6.0.6.
Les mises à jour sont recommandées vers ces versions.
3 alertes de sécurité ont été émises cette semaine, concernant des applications suivantes :
Drupal, Gallery et XAMPP
Drupal Brilliant Gallery Module SQL Injection and HTML Injection Vulnerabilities
http://www.securityfocus.com/bid/31554 (0 visite)
Site : http://drupal.org/ (0 visite)
FOSS Gallery Arbitrary File Upload Vulnerability
http://www.securityfocus.com/bid/31574 (0 visite)
Site : http://gallery.sourceforge.net/ (0 visite)
XAMPP for Windows 'cds.php' SQL Injection Vulnerability
http://www.securityfocus.com/bid/31564 (0 visite)
Site : http://www.apachefriends.org/en/xampp.html (0 visite)
phpsecure (0 visite)
securityfocus (0 visite)
www.nexen.net |
10/10/08 11:00 PM
15 secondes pour installer une réplication MySQL avec MySQL Sandbox, pari tenu ?
“Installez-moi une configuration MySQL composée d’un master et deux slaves, vous avez 15 secondes. Top chrono”…
Non, ça n’est pas la dernière énigme à la mode pour rentrer chez Google mais plutôt une question qui pourrait devenir presque banale pour un entretien d’embauche pour un DBA MySQL à l’avenir, qui sait ?
Face à un tel défi, trois solutions :
- La fuite (mais faites une croix sur la “recommandation” Linkedin)
- Le kernel panic
- MySQL Sandbox !
Bien vu, MySQL Sandbox est la réponse la plus stratégique pour la poursuite de votre carrière.
Giuseppe Maxia (dont le blog figure dans notre blogroll, allez y jeter un oeil) est l’auteur de cet outil vraiment très pratique. Que propose t-il ?
L’idée est d’automatiser l’installation de plusieurs serveurs MySQL sur une même machine. Rien que nous ne puissions faire manuellement c’est vrai, cependant la procédure habituelle consistant à ne pas mélanger les répertoires d’installation, choisir un port différent par serveur, appliquer mysql_secure_installation… Tout cela gagnerait à être automatisé non ? De plus ces installations manuelles sont potentiellement sources d’erreurs.
MySQL Sandbox est compatible avec toutes les versions MySQL de la 3.23 à la 6.0. Les différentes installations effectuées sont indépendantes les unes des autres, on peut ainsi faire cohabiter sans risque de conflits plusieurs versions différentes de MySQL sur une même machine (ports, répertoires et sockets indépendants).
En plus d’automatiser ces processus d’installation (gain de temps), MySQL Sandbox ne s’arrête pas là et propose également des commandes très simples pour gérer les serveurs une fois installés.
Concernant le gain de temps, son auteur promet (notamment en page 2 de cette présentation) l’installation d’une réplication MySQL en 15 secondes. Info ou intox ?
Installation et pré-requis
Pour fonctionner MySQL Sandbox n’a besoin que des binaries des versions que vous souhaitez installer.
L’installation est très rapide :
Après avoir téléchargé MySQL Sandbox, il suffit de le décompresser dans le répertoire de votre choix :
debian:/opt# tar xzvf mysql_sandbox_2.0.11.tar.gz
On remarque alors que différentes commandes sont à notre disposition, plutôt explicites :
-rwxr-xr-x 1 501 staff 6154 2008-10-05 07:42 make_multiple_custom_sandbox
-rwxr-xr-x 1 501 staff 9062 2008-10-05 07:42 make_multiple_sandbox
-rwxr-xr-x 1 501 staff 12180 2008-10-05 07:42 make_replication_sandbox
-rwxr-xr-x 1 501 staff 5786 2008-10-05 07:42 make_sandbox
make_sandbox : installe un serveur MySQL simple
make_replication_sandbox : installe une réplication (par défaut un master, 2 slaves)
make_multiple_sandbox : pour installer plusieurs serveurs identiques
make_multiple_custom_sandbox : permet d’installer plusieurs serveurs de versions différentes
Installer une réplication
Une fois le binary récupéré, nous utilisons la commande make_replication_sandbox pour obtenir un master et deux slaves. Elle prend en paramètre le tar.gz du binary (d’autres raccourcis sont possibles, je vous renvoie au fichier README de l’outil).
debian:/opt/mysql_sandbox_2.0.11# ./make_replication_sandbox /opt/mysql-5.0.67-linux-i686-glibc23.tar.gz
La sortie écran donne ceci :
installing and starting master
installing slave 1
installing slave 2
starting slave 1
. sandbox server started
starting slave 2
.. sandbox server started
initializing slave 1
initializing slave 2
replication directory installed on /root/sandboxes/rsandbox_5_0_67
C’est fait ! L’installation en elle-même a duré un peu plus de 15 secondes, disons que les lignes de commande à taper tiennent dans ce laps de temps…
Par défaut les “bacs à sable” installés par MySQL Sandbox se placent dans $HOME/sandboxes/. Dans le cadre de notre réplication, celle-ci a été installée ici : debian:~/sandboxes/rsandbox_5_0_67#
Notre réplication est d’ores et déjà fonctionnelle, on peut le vérifier en se connectant par exemple au slave numero 2 (faites un ps-ef | grep mysql pour afficher rapidement les noms/localisations des sockets par ex)
debian:/home/user# mysql –socket=/tmp/mysql_sandbox29473.sock -p
Le password par défaut est “msandbox”.
mysql> show slave status\G
Slave_IO_State: Waiting for master to send event
Master_Host: 127.0.0.1
Master_User: msandbox
Master_Port: 29472
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 628
Relay_Log_File: mysql_sandbox29473-relay-bin.000002
Relay_Log_Pos: 765
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
La réplication fonctionne, le pari est tenu !
Les autres commandes disponibles
Evoquées plus haut les commandes make_multiple_custom_sandbox, make_multiple_sandbox, make_sandbox et make_replication_sandbox vous permettent d’installer différentes topologies de serveurs MySQL, du master-master au groupe de serveurs aux versions identiques ou pas.
Exemple, pour installer la version MySQL 5.1.28 sur la même machine que notre réplication précédente :
debian:/opt/mysql_sandbox_2.0.11# ./make_sandbox /opt/mysql-5.1.28-rc-linux-i686-glibc23.tar.gz
Résultat :
“Your sandbox server was installed in /root/sandboxes/msb_5_1_28.”, simple non ?
D’autres commandes existent pour gérer votre installation :
start, restart, stop, clear… un suffixe “_all” pour les réplications vient s’ajouter aux commandes précédentes, ex “stop_all“.
“m” est le raccourci de master, “s1″, “s2″, etc concernent les slaves.
Ainsi pour arrêter totalement notre configuration de réplication précédente, on effectue :
debian:~/sandboxes/rsandbox_5_0_67# ./stop_all
A l’écran :
executing “stop” on slave 1
executing “stop” on slave 2
executing “stop” on master
Comme vous le voyez, MySQL Sandbox est très simple d’emploi.
Pour aller plus loin je vous conseille vivement la lecture (c’est rapide) du wiki de l’outil. Il reprend en fait le fichier README. Clair et concis vous y trouverez certainement votre bonheur : grâce à MySQL Sandbox, tester une nouvelle version de MySQL devient un jeu d’enfant.
www.dbnewz.com |
10/10/08 9:08 AM
|