Jeudi 11 Mars 2010

Utilisation de MySQL

Un article de Aide Hebergeur.

Sommaire

Se connecter à la base MySQL

Avec un logiciel de type CMS

Lors de l'installation d'un CMS, il vous est en principe demandé de renseigner les paramètres MySQL de votre site. Il suffit de recopier très précisément les accès MySQL que vous avez reçus parmi vos codes d'accès. Ces paramètres comportent les informations suivantes :

  • Le nom d'hôte de votre serveur MySQL (du type sql1, sql2, sql3, sql4, etc.)
  • Votre nom d'utilisateur MySQL
  • Votre mot de passe MySQL
  • Le nom de votre base de données principale

Si les paramètres sont correctement renseignés, le CMS parviendra normalement à se connecter à votre base MySQL.

Depuis un script PHP

L'ensemble de ces paramètres énoncés ci-dessus vous permet de programmer des scripts PHP qui nécessitent une connexion à la base MySQL : la connexion à la base s'établit comme suit :

mysql_connect("sql23","utilisateur_mysql","password_mysql");
mysql_select_db("base_mysql");

[.... VOTRE CODE PHP/MYSQL ... ]

mysql_close(); // Ne pas oublier de refermer la connexion !


Voir aussi :
Référence PHP sur mysql_connect
La nouvelle librairie MySQLi de PHP

En utilisant PhpMyAdmin

Vos codes d'accès MySQL contiennent également une adresse d'accès au logiciel PhpMyAdmin. En vous rendant à cette adresse et en saisissant vos accès MySQL, vous accéderez à un puissant outil en ligne qui vous permet d'administrer et gérer vos bases MySQL sans connaissance particulière en SQL. Il n'est toutefois conseillé d'utiliser PhpMyAdmin que si vous savez ce que vous faites, car cet outil peut modifier ou supprimer des données en un clic.

En utilisant un logiciel distant

Il n'est pas possible d'accéder à vos bases MySQL depuis un logiciel distant installé sur votre ordinateur par exemple. En effet l'utilisation des bases est exclusivement restreinte aux fichiers PHP situés sur votre hébergement.

Les connexions distantes sont néanmoins possibles sur nos offres de serveur dédié virtuel.


Créer des bases de données MySQL supplémentaires

Dans la limite du quota attribué à votre site, vous pouvez créer des bases de données en un clic depuis votre Espace Client.

Il vous suffit de cliquer sur l'onglet Hébergement Mutualisé, puis sur le menu Bases MySQL. Vous pouvez alors saisir le nom de la nouvelle base dans le champ approprié (qui sera préfixée par le nom de votre base principale). La création de votre nouvelle base est instantanée et vous pouvez immédiatement l'utiliser.

Créer des utilisateurs MySQL supplémentaires

Chaque hébergement mutualisé inclut un seul et unique utilisateur MySQL ayant accès à toutes les bases de données que vous pourriez créer. Il n'est pas possible de créer un utilisateur MySQL supplémentaire, cette fonctionnalité reste possible sur nos offres de serveur dédié virtuel.

Effectuer une sauvegarde manuelle d'une base MySQL

Vous pouvez effectuer à tout moment une sauvegarde de votre base de données MySQL en utilisant l'outil PhpMyAdmin dont les accès vous ont été fournis par e-mail.

Connectez vous à PhpMyAdmin puis cliquez sur le menu Exporter : choisissez les options d'export souhaitées et validez.

Effectuer une restauration manuelle d'une base MySQL

Il est possible d'utiliser PhpMyAdmin pour restaurer facilement une base de données MySQL. La restauration fonctionne à partir d'un fichier source appelé fichier dump qui porte généralement l'extension .sql. Si vous êtes en possession d'un fichier dump (récupéré par exemple auprès de votre ancien hébergeur) vous pouvez vous connecter à PhpMyAdmin et cliquer sur le menu SQL. Un bouton Parcourir vous permet d'aller chercher ce fichier dump sur votre disque dur. Une fois l'opération validée, votre ordinateur va uploader ce fichier à PhpMyAdmin qui l'exécutera aussitôt reçu sur votre base de données.

Limitations et restrictions

Utilisation des ressources mutualisées

Les bases de données MySQL sont des ressources mutualisées à disponibilité critique : cela signifie que le rôle de l'hébergeur est de partager les ressources équitablement entre ses Clients tout en garantissant en permanence une disponibilité et des performances optimales. Par conséquent, tout hébergeur sérieux se doit de prendre diverses dispositions afin de limiter tout abus et tout risque de monopolisation des ressources par quelques Clients.

Les dispositions en vigueur actuellement sont les suivantes :

  • Limitation à 5 du nombre de connexions simultanées : si dans la même fraction de seconde (une connexion SQL ne durant que quelques diziemes de seconde), plus de 5 connexions sont établies, nos serveurs se protègent en rejetant les connexions supplémentaires. Ce cas de figure ne se produit jamais en pratique, puisque sur des sites à trafic raisonnable (c'est à dire correspondant aux offres proposées), la probabilité que 5 visiteurs cliquent dans la meme fraction de seconde est quasi nulle. Si vous atteignez cette limite malgré tout, il y a fort à parier qu'une anomalie de programmation existe. Par exemple que les connexions MySQL ne sont pas ou mal refermées.
  • Limitation de la taille des bases MySQL : selon votre offre, vous disposez d'une taille maximale pour chaque base de données, taille que vous ne pouvez excéder. En cas de dépassement, et après plusieurs avertissements, votre base de données sera placée en lecture seule. La limitation de la taille des bases nous permet de limiter tout abus et assurer des performances globales maximales à nos Clients.
  • Limitation de la durée d'une requête ou connexion : toute connexion MySQL qui dure plus de 10s s'expose à être stoppée par le système. Cela peut se traduire par un message d'erreur sur votre site du type Lost connection during query ou Server shutdown in progress. Il n'est en effet pas raisonnable de laisser un Client occuper une connexion pendant plus de 10 secondes, que cette connexion soit active ou non. Vérifiez que la durée de vos connexions est bien optimisée (c'est-à-dire qu'entre l'ouverture et la fermeture de la connexion, il n'y ait pas de traitement susceptible de durer plusieurs secondes, comme un chargement distant par exemple).
  • Surveillance visuelle permanente : nos techniciens surveillent régulièrement les différents serveurs MySQL à la recherche de toute anomalie éventuelle. Si nous constatons qu'un site engendre une surconsommation inadaptée à l'hébergement mutualisé, nous prendrons contact avec le Client concerné. Si la surconsommation est critique, c'est-à-dire quelle crée une nuisance immédiate pour l'ensemble des Clients, alors nous pouvons être amenés à suspendre immédiatement le site concerné.
  • [SELON L'OFFRE] Limitation du nombre de requêtes horaire : certaines offres sont limitées en nombre de requetes de sélection et de mise à jour par heure. Si vous envoyez plus de requêtes que votre offre vous le permet, le système bloquera votre utilisateur SQL temporairement, jusqu'à ce que votre nombre de requetes redescende en dessous de la limitation. Cela se traduit par un message du type "User has exceeded the max_questions ressources"

De manière générale, chaque Client ne doit pas perdre de vue qu'il s'agit d'un hébergement mutualisé. Par conséquent, chaque Client se doit d'utiliser les ressources mises à sa disposition avec modération et éviter toute action susceptible de nuire au bon fonctionnement et aux performances globales du serveur. Nous vous conseillons quelques dispositions simples afin d'éviter tout risque de problème :

  • Evitez d'utiliser des outils de statistiques ou d'analyse des visites sur votre site : ces outils sont généralement extrêmement consommateurs de ressource et de nature à provoquer des saturations très facilement (si vous avez de nombreux visiteurs simultanés, ou si un robot indexe/aspire votre site) ; pour rappel nous fournissons déjà des statistiques quotidiennes très détaillées accessibles depuis votre Espace Client.
  • Si vous choisissez de stocker vos sessions en base de données (par exemple avec OsCommerce), pensez absolument à vider votre table de sessions régulièrement ! Sinon votre base de données grossira indéfiniment jusqu'à dépasser votre quota
  • Evitez de manière générale d'utiliser des outils ou modules dont vous pensez qu'ils peuvent générer beaucoup de requetes SQL. En cas de doute, n'hésitez pas à consulter notre support technique avant d'installer quoi que ce soit.

Tout Client nécessitant des ressources MySQL dédiées et garanties peut se tourner vers nos solutions de serveur dédié virtuel.

Pourquoi mes problèmes apparaissent soudainement

  • Votre programmation n'a peut-être pas changé, mais entre temps votre base de données a évolué : elle contient plus d'enregistrements qu'avant, les requêtes SQL sont forcément plus lourdes et prennent plus de temps. Certaines peuvent verrouiller des tables (et donc les autres connexions se mettent en attente) et ce temps de verrouillage autrefois négligeable devient important.
  • Le serveur est globalement plus chargé : depuis votre arrivée, de nouveaux utilisateurs se sont installés et eux aussi ont des scripts qui consomment plus de ressources qu'auparavant : en conséquence, vos scripts disposent de moins de ressources qu'avant et donc ont plus de mal à s'exécuter. Néanmoins si vos scripts sont assez gourmands pour être tués par le système, ils doivent sans doute pouvoir être optimisés.

Support InnoDB

Nos offres mutualisées ne supportent pas le moteur de stockage InnoDB pour MySQL. Seul le moteur MyISAM est supporté.

Dans la plupart des cas, il est possible de remplacer raisonnablement une programmation InnoDB par une programmation MyISAM équivalente. Voyez cette documentation MySQL pour en savoir plus sur la programmation transactionnelle avec MyISAM

Nos offres de serveur dédié virtuel permettent d'utiliser le moteur InnoDB si cela s'avère une nécessité.

Support SQLite

Pour des raisons de compatibilité, nos offres mutualisées ne supportent pas les bases SQLite.

Nos offres de serveur dédié virtuel permettent d'utiliser SQLite si cela s'avère une nécessité.

Pourquoi limiter les ressources MySQL

L'hébergement mutualisé nécessite de la part de l'hébergeur un contrôle permanent des ressources utilisées et une bonne politique de limitation afin de se prémunir le mieux possible d'abus et débordements en tout genre. Sans limitation, il est parfaitement impossible d'assurer la moindre qualité de service.

Pour les bases de données MySQL, le champ d'action est assez restreint :
- On peut limiter le nombre de requetes ou de connexions pour éviter qu'un utilisateur ne sature les ressources.
- On peut limiter la taille des bases afin d'éviter qu'un utilisateur ne consomme trop de ressources en envoyant des requetes beaucoup trop gourmandes pour un environnement mutualisé.

Ne limiter ni l'un ni l'autre serait purement utopiste. Tout hébergeur qui vous dit ne pas limiter ces ressources ne peut être raisonnablement pris au sérieux.

L'avantage de limiter en taille est de permettre des rappels en douceur par e-mail (avertissement, puis si pas de réaction, mise en lecture seule de la base permettant tout de meme de faire le ménage) tandis que limiter le nombre de requetes occasionne des coupures brutales sur le site.

Nous avons donc désormais fait le choix de limiter la taille des bases MySQL tandis que le nombre de requetes sera surveillé par quelques garde-fous indispensables. Toutes les offres sont donc amenées à évoluer en ce sens.

Ce choix est d'autant plus pertinent que tous les hébergeurs savent bien qu'au delà de 50 Mo, il est très rare de pouvoir tolérer une base de données en mutualisé. Par conséquent, il nous semble plus honnête et plus réaliste de procéder ainsi, ce qui évite tout malentendu et évite au Client de recevoir quelques semaines plus tard un e-mail de son hébergeur qui l'invite à commander un serveur dédié en raison d'une sollicitation excessive de ressources.

Entretenir ses bases MySQL

Comme tout stockage de données, les bases MySQL nécessitent une surveillance et un entretien de la part du Webmaster afin de conserver toute leur performance.

Faire des backups

Que votre offre d'hébergement dispose d'un système de backup automatique ou pas (et à plus forte raison dans ce dernier cas), il est fortement recommandé d'effectuer des sauvegardes régulières (voir ci-dessus), par exemple à l'aide de l'outil PhpMyAdmin et de conserver ces sauvegardes sur votre ordinateur.

Personne n'est en effet à l'abri d'une perte de données : malveillance, faille de sécurité dans le site, ou tout simplement mauvaise manipulation, cela arrive à tout le monde. Vous ne regretterez pas dans ce cas d'avoir à portée de main une sauvegarde récente vous permettant de restaurer les données perdues.

Surveiller la taille et le contenu des tables

Imaginez l'état de votre ordinateur ou celui de votre habitation si vous n'y faisiez jamais le ménage. De la même manière, les bases MySQL nécessitent un entretien si vous y insérez régulièrement des données.

Sans surveillance, vos tables risquent de grossir indéfiniment jusqu'à atteindre la limite fixée par votre offre ou à défaut la limite de tolérance que peut se fixer l'hébergeur vis à vis de votre consommation de ressources. Il est évident que pour toutes les raisons mentionnées un peu plus haut, votre hébergeur ne peut raisonnablement pas tolérer durablement des bases de données volumineuses sur un environnement mutualisé.

Mais ce sont aussi les performances de votre site qui vont en pâtir : plus les tables sont grosses, plus les requêtes sont lentes et donc les affichages de page aussi. Il est absolument indispensable de faire le ménage.

Faire le ménage

En vous connectant à PhpMyAdmin vous pouvez visualiser sur la page principale la taille de chacune de vos tables. Dès lors qu'une table contient quelques dizaines de Mo de données, vous devriez immédiatement vous poser la question de son évolution. Pourquoi ma table est-elle si volumineuse ? Que contient-elle ? Puis-je la vider régulièrement sans risque ? Comment contourner le problème ?

Cas les plus fréquents :

  • Table de sessions : vous avez fait le choix de stocker vos sessions utilisateur en base de données MySQL. Le seul problème est que votre table de sessions n'est jamais vidée (ce qui se produit souvent avec OsCommerce) : elle grossit jusqu'à ce que votre site ralentisse et/ou votre hébergeur vous bloque. Vous devez absolument faire en sorte que cette table soit vidée régulièrement. Soit vous y pensez et vous la videz avec PhpMyAdmin, soit vous programmez une tâche planifiée pour cela, ou encore vous stockez vos sessions en fichiers plutôt qu'en MySQL.
  • Livre d'or, Blog ou Forum spammé : un jour vous avez décidé d'installer un blog (WordPress, DotClear...), un forum (PhpBB, etc.) ou encore un livre d'or. Malheureusement, vous ne vous en êtes plus préoccupé, et entre temps, la page a été largement abusée et spammée par des robots de tout type, faisant exploser la taille de votre base de données. La solution consiste bien entendu à vider la table en question et à désinstaller le module inutilisé, ou encore à y configurer un anti-spam
  • Forum très fréquenté : vous disposez d'un forum de type PhpBB, PunBB, IPB, VBULLETIN etc. et vous avez la chance d'avoir un trafic important et de très nombreux posts. Ceci a pour incidence une croissance rapide de la taille de votre base et notamment de la table contenant les messages des utilisateurs. Pour y remédier, vous pouvez régulièrement délester votre forum de messages trop anciens. Si vous souhaitez conserver tous les messages indéfiniment, il ne sera pas raisonnable de rester sur un environnement mutualisé. Vous devez vous tourner vers un mode d'hébergement dédié plus adapté, serveur virtuel ou serveur dédié
  • Tracking et stats des visiteurs : Vous avez installé sur votre site des outils de tracking des visiteurs et de statistiques de fréquentation. Comme expliqué sur cette page, il est fortement déconseillé d'installer ce type de module sur un environnement mutualisé. Ils utilisent trop de ressources et font grossir les tables très rapidement. Solution : désactivez ces modules et videz les tables
  • Logs, Historiques : Si vous utilisez une table MySQL pour y stocker des logs ou des historiques divers, attendez-vous à ce que la table grossisse très rapidement. Vous devez la délester très régulièrement, là encore, l'environnement mutualisé reste très peu adapté à ce type d'utilisation

Relances par e-mail

Si votre base grossit jusqu'à dépasser votre quota ou atteindre des proportions déraisonnables, vous recevrez des alertes par e-mail vous invitant à rétablir une taille correcte. Comme expliqué ci-dessus, le mode d'hébergement mutualisé est inadapté à l'hébergement de bases de données volumineuses parce que la consommation de ressources induite par toute requête est systématiquement excessive et présente un danger pour l'intégrité des ressources mutualisées.

Si la taille de votre base ne peut être revue à la baisse, pensez aux solutions de serveur virtuel qui vous permettent de vous affranchir de toute limite pour un budget qui reste très raisonnable, d'autant plus que ces offres peuvent être payées mensuellement, sans aucun engagement de durée.

Cas des offres où la taille n'est pas limitée explicitement

Le fait que nous n'ayons pas imposé de limitation explicite sur certaines offres mutualisées ne change rien au fait que l'hébergement mutualisé reste inadapté à l'hébergement de bases de données volumineuses. La consommation de ressources induite n'est pas raisonnable ce qui nuit inévitablement aux performances des autres sites hébergés. Nous nous réservons toujours le droit, au cas par cas, et avec toute la communication préalable raisonnable, de prendre toute mesure adéquate dès lors qu'une utilisation nous paraît abusive et dépasse le cadre de l'hébergement mutualisé. Ceci est d'ailleurs clairement expliqué dans nos CGV