Archive pour le mot-clef ‘MySQL’

Modifier le prompt du client mysql

Mardi 23 février 2010

Quand on doit intervenir sur plusieurs serveurs simultanément (par exemple pour réparer une réplication qui s’est plantée), il est pratique d’avoir une console ouverte sur chaque serveur. Personnellement, j’aime bien utiliser Terminator, qui évite les problèmes de chevauchement de fenêtres quand plusieurs sessions sont ouvertes en parallèle. Seul petit hic : toutes les consoles affichent la même invite (mysql> ), il n’est donc pas toujours évident de savoir sur quel serveur on se trouve, ce qui augmente le risque de fâcheuse mauvaise manip. Heureusement il est possible de modifier facilement le prompt du client en ligne de commande mysql, c’est ce que je vous propose de découvrir aujourd’hui.

Lire le reste de cet article »

Clés étrangères et actions de suppression/mise à jour

Mercredi 13 janvier 2010

Pour assurer l’intégrité référentielle entre 2 tables, on crée une clé étrangère. Actuellement avec MySQL, InnoDB et PBXT sont capables de gérer ces clés étrangères. Jusque là, rien de bien nouveau… Très souvent, on ajoute dans la définition de la clé étrangère l’instruction ON DELETE CASCADE ON UPDATE CASCADE de manière à ce qu’une mise à jour ou une suppression dans la table parente soit impactée dans la table enfant. Il existe pourtant d’autres actions, c’est ce que je vous propose de découvrir (ou de redécouvrir) dans cet article.

Lire le reste de cet article »

Comment réécrire une requête SQL ? Partie 2

Lundi 21 décembre 2009

Dans le précédent post, nous avons optimisé une requête en abandonnant un des principes du SQL (dire au SGBD ce qu’on souhaite faire, mais pas comment le faire). Ici nous allons voir un exemple où le fait de penser en SQL va nous permettre de rendre performante une requête difficile à améliorer.

Lire le reste de cet article »

Securich – Darren Cassar

Dimanche 23 août 2009

Darren s’est occupé récemment d’une migration de Sybase vers MySQL. Et il s’est aperçu à cette occasion que la gestion des utilisateurs sous MySQL n’est pas sans défaut. Par exemple, il n’est pas possible de créer des rôles, il n’est pas possible de donner à un utilisateur des droits sur toutes les tables sauf une, il n’est pas possible de connaître le degré de complexité d’un mot de passe…

Pour essayer de pallier à tous ces défauts, Darren a créé un outil : Securich, installable sur tout serveur MySQL 5.1. Cet outil permet, à l’aide d’appels à des procédures stockées, de manipuler les utilisateurs et leurs droits. Attention tout de même, le développement de Securich a commencé il y a peu de temps et le code est encore expérimental. Il reste pas mal de fonctionnalités que Darren voudrait implémenter et quelques bugs gênants : par exemple, si vous installez Securich sur un serveur contenant des utilisateurs, Securich va effacer tous les utilisateurs sans vous en avertir…

L’initiative est en tout cas intéressante car il reste effectivement pas mal de travail pour que MySQL présente autant de fonctionnalités sur les utilisateurs et les droits que d’autres produits.

MySQL Sandbox 3 – Giuseppe Maxia

Dimanche 23 août 2009

Nous avons tous régulièrement besoin de monter rapidement un ou plusieurs serveurs MySQL pour tester telle ou telle fonctionnalité. Et évidemment, c’est toujours quand on veut aller vite qu’on fait des erreurs et qu’on se retrouve avec des serveurs qui ne démarrent pas. MySQL Sandbox a été créée pour nous aider dans cette situation. Giuseppe s’est en effet trouvé de nombreuses fois dans la situation où il perdait énormément de temps à monter des environnements jetables et il a imaginé un script permettant d’automatiser cette création d’environnements jetables.

Sans entrer dans le détail des commandes (voir pour cela la page sur Launchpad), MySQL Sandbox permet de créer en une ligne de commande des environnements complets et variés : un serveur, plusieurs serveurs indépendants, un maître-plusieurs esclaves…Il est même possible de créer, toujours en une seule ligne, une réplication circulaire entre N serveurs ! Le script permet également de démarrer, arrêter, effacer chacun des serveurs ainsi créés ou de faire une opération pour tous les serveurs à la fois.

Ca faisait un moment que je voulais prendre un peu de temps pour voir ce qu’il était possible de faire avec MySQL Sandbox, maintenant c’est sûr : je vais m’y mettre !

A voir également sur le sujet : un précédent article d’Arnaud, sur dbnewz bien sûr !

A better MySQLTuner – Sheeri K. Cabral

Samedi 22 août 2009

MySQLTuner est un script Perl qui produit un rapport sur la configuration de votre serveur MySQL et donne des pistes d’optimisation. On peut bien sûr s’interroger sur la manière dont l’analyse est faite et surtout sur la pertinence des recommendations. C’est exactement l’exercice qu’a fait Sheeri pour nous, en examinant le script sur toutes ses coutures.

Il en ressort que pas mal d’affirmations et de recommendations sont hardcodées et ne tiennent absolument pas compte des spécificités de votre base. Un exemple ? Si le cache de requêtes est désactivé, alors le script va systématiquement vous remonter qu’il s’agit d’un problème, même si vous avez sciemment désactivé ce cache.

A partir de toutes ces constatations, Sheeri a commencé à faire évoluer le script, en ajoutant pour l’instant quelques options intéressantes, comme celle permettant de formater le rapport de manière à le rendre facilement lisible par un tableur : il devient ainsi plus facile de voir l’évolution de certains indicateurs dans le temps en lançant le script à intervalles réguliers. A suivre !

OpenSQLCamp : Sharding for the masses

Samedi 22 août 2009

Ce week-end a lieu à côté de Bonn l’OpenSQLCamp, en parallèle de la FrOSCon. Giuseppe Maxia nous parle aujourd’hui d’une technique utilisée dans certaines applications à fort trafic : le sharding. Mais à quoi sert le sharding ?

Quand on commence une application, un seul serveur SQL suffit généralement à absorber la charge. Si le trafic augmente et que les performances du serveur commencent à s’écrouler, on peut utiliser la réplication. Mais la réplication ne permet que d’augmenter le nombre de lectures possibles (read scaling) et pas le nombre d’écritures (write scaling). Cette limitation provient du fonctionnement même de la réplication car toutes les écritures doivent arriver sur le serveur maître. On peut alors imaginer de séparer les données selon certaines règles (dépendantes de l’application) de manière à avoir plusieurs masters sur lesquels on peut utiliser la réplication. Et voilà, nous venons d’inventer le sharding.

Giuseppe nous explique que le sharding est simple à mettre en place : il suffit de créer des règles permettant de dispatcher les données entre les différents masters. Malheureusement, le sharding est fragile : si, par exemple, vous changez les règles de dispatch, vous risquez de casser vos shards ! Pour simplifier le sharding, il existe un moteur de stockage récent, installable en tant que plugin pour MySQL 5.1 : Spider. Spider est basé sur le partitionnement et permet de créer des tables sur un serveur dont les données seront stockées sur des hosts distants. En gros, on utilise une pincée de partitionnement et une pincée de Federated…

Les démonstrations faites par Giuseppe montrent quand même que si Spider peut nous simplifier la tâche du sharding, la mise en place de tables avec Spider n’est pas si simple et demande un peu de doigté et de réflexion…

MySQL et Search chez Craigslist par Jeremy Zawodny

Mardi 21 avril 2009

Vous ne pouvez pas utiliser MySQL sans connaître Jeremy. Ancien Yahoo! il a été l’un des premiers à utiliser MySQL pour Yahoo! Finance et est co-auteur de MySQL High Performance, la 1ère édition. Après des années à avoir travaillé et évangélisé MySQL, Jeremy fut un responsable du développement du YDN. Il a décidé, il y a quelques temps de retourner dans la sphére de MySQL en devenant expert pour Craig List. Un de ses premiers challenges chez CL, a été d’optimiser les FULL TEXT search.

Les challenges chez CL:

  • high ad churn rate – la durée de vie des annonces sur le site. Vous ne voulez plus recevoir de mails sur un item déjà vendu
  • croissance
  • trés gros traffic
  • outil d’analyse & backend
  • croissance ( et oui )
  • besoin d’archiver tous les messages ( 100s de milions ) et pour toujours
  • Internationalisation& utf8

Les briques logicielles sont:

  • Load Balancer
  • Read Proxy ( Perl + Memcached ) & Write Procxy
  • Wed Read Proxy ( apache / mod_perl )
  • Object Cache ( Perl / Memcached ) & Search Cluster ( Sphinx )
  • Read DB Cluster ( MySQL 5.0 )

Toutes les datas sont en clusters avec un content specifique – User DB, Stats, Archive, Classified, Forum

Full Text Search chez CL en quelques points

  • partition par ville
  • attributs vs keywords
  • connections persistantes
  • 2 clusters ( 1 master, 4 slaves )
  • indexing incremental
  • slaves – requètes live
  • 1000 QPS
  • 25 MySQL -> 10 Sphinx
  • recherche alentour
  • 50M QPD ( par jour )
  • archive des messages – une DB sans schema – couchdb?

MySQL DBA Certification Tutorials

Mardi 21 avril 2009

Cela fait maintenant plus de 3 ans que je donne des cours sur les SGBD chez Yahoo! Former les équipes fait partie de mes prérogatives. Ces cours sont destinés à toutes sortes d’audience ( DBA, dev, ops, … ) et couvrent beaucoup de sujets ( HA, Scalability, Capacity Planning, … ). Mon expérience sur les bases de données s’est construite au cours des années, je me rappelle des quelques cours que j’ai eu en université mais cela remonte à quelques années… hélas. J’ai donc décidé de participer au tutorial MySQL DBA présenté par Kai Voigt, qui donne lui aussi des cours de partout dans le monde pour Sun et leurs clients. Je ne suis pas là pour comparer, mais pour voir si je présente les choses de la même façon et surtout si je n’oublie pas de couvrir certaines parties. Sachant que le cours est quand même orienté certification, je me demande combien parmis les 80 personnes présentent vont tenter leur chance.

Lire le reste de cet article »

Oracle & MySQL

Lundi 20 avril 2009

5h du mat, mon téléphone sonne. Un journaliste me demande mes impressions sur le rachat de SUN par Oracle… le QUOI??? La conférence n’a pas encore commencée que cette nouvelle a déjà l’effet d’une bombe. Oracle a accepté de reprendre SUN pour $9.50 par actions. Ils auront ainsi accés à des technos comme Solaris, ZFS, MySQL,… Nous attendons impatiemment un communiqué plus explicite des intentions d’Oracle vis à vis de MySQL. Il se passe toujours quelque chose d’intéressant à cette conférence, l’année dernière, ce fut le rachat de MySQL par SUN et maintenant çà…