MySQL: tuer les requêtes trop longues

MySQL permet d’encaisser énormement de requêtes, mais dans certains cas, généralement des soucis externes (performances réseau/disque), il se peut que votre MySQL ait encaissé beaucoup de requêtes clientes qui ne soient plus légitimes et génèrent une forte charge sur votre service.

Je vous propose ci-dessous un petit script tout simple permettant de tuer toutes les requêtes supérieures à 180 secondes:

Optimisations BDD: indexes en doublon

Les indexes prennent de l’espace disque et de la mémoire. Les moteurs MySQL/MariaDB/PostgreSQL savent utiliser des indexes plus complexes afin de lire des données nécessitant un seul index donc les champs conditionnant sont inclus dans un index plus complexe.

Exemple ici avec 3 indexes

Si nous faisons une requête filtrant sur le champ id_1 uniquement (SELECT field1 FROM table1 where id_1 = 3), le moteur de BDD est capable d’utiliser 2 indexes: index_b, qui ne contient que id_1 et index_a qui contient id_1 puis id_2.

En revanche, si nous faisons une requête filtrant sur le champ id_2 uniquement (SELECT field1 FROM table1 where id_2 = 6), le moteur de BDD ne pourra utiliser que index_c.

Si nous reprenons index_a, il n’est pas valide car le moteur de BDD lira cet index en trouvant les records discriminants sur id_1 avant les records discriminant sur id_2. Ce n’est pas un chemin optimal pour trouver un résultat dépendant uniquement de id_2. L’ordre des champs d’un index est donc important.

Pour finir, index_a filtrant tout d’abord sur id_1 avant de filtrer sur id_2, il sait donc filtrer uniquement sur id_1 et donc index_b est inutile (il prend des ressources disque et mémoire inutiles). Supprimez donc index_b qui prend de l’espace disque et mémoire pour rien.

Régler un problème de lecture sur une vue MySQL/MariaDB

Suite à un peu de troubleshoot ces derniers jours je suis tombé sur un problème MySQL difficile à comprendre lors d’un requêtage sur mes vues lors de la création d’une instance dupliquée d’une base de production destinée à des tests de charge.

L’erreur lors du requêtage sur la vue avec un utilisateur non privilégiée était la suivante:

Continuer à lire

[Serveur Dédié] Nginx – Owncloud

Introduction

Nous revoilà avec un nouvel article consacré à l’auto-hébergement via un serveur dédié.

Dans cette article nous allons voir plus en détail le déploiement du serveur web Nginx avec sa configuration, nous finirons par l’installation d’Owncloud. Nous utilisons dans cet article un serveur FREEBSD 9.2.

http://nginx.org/nginx.gif 

Owncloud est un logiciel open-source offrant des services de stockages, partages de fichiers et applications diverses comme un service Sync pour navigateur Firefox.Owncloud est une solution à la fois public et privé de part ces possibilités d’intégrations dans un annuaire LDAP ou Active Directory. Continuer à lire

Cluster de bases de données MySQL avec HAST/DRBD et Heartbeat

Suite à la réalisation d’un Proof-of-Concept (PoC) en entreprise sur une infrastructure MySQL en mode cluster (master résilient, multi slave), je vais vous présenter ici l’infrastructure retenue et sa configuration.

Notre configuration se base sur deux serveurs pouvant faire office de maître et un pool de slaves dont le nombre n’est pas fixe. Cette configuration est plutôt réservée pour des applicatifs supportant la gestion de serveurs d’écriture et de serveurs de lecture. Néanmoins vous pouvez exclure la partie esclave si seul un maître redondant vous convient.

Pour la partie maître, l’un des serveur est actif, l’autre en stand-by. Si le serveur actif tombe, l’autre serveur prend le relai et dessert le service MySQL maître.

Pour la partie eslave, ceux-ci répliquent leurs données depuis le maître actif en se basant sur une adresse IP virtuelle. Continuer à lire

MySQL – Réplication

Introduction

MySQL est un serveur de bases de données. Comme tout serveur de base de données, les données contenues à l’intérieur sont extrêmement importantes voire parfois vitales. Après vous avoir enseigné les quelques sécurités MySQL je vais désormais vous apprendre à manipuler la réplication MySQL, un mécanisme complexe d’utilisation mais permettant de redéployer rapidement une base de données plantée, de sauvegarder ses données ou encore de gérer du Load Balancing sur des données pratiquement statiques.

Avant de plonger dans le vif du sujet, je vais vous expliquer comment fonctionne la réplication. Continuer à lire

MySQL


Introduction

MySQL est la base de données de référence. Au niveau sécurité, elle ne nécessite pas grandes modifications mais néanmoins fortement nécessaires.

Accès distant

Une base de données ne doit JAMAIS être visible depuis Internet. La protéger des attaques est extrêmement difficile si on la laisse visible. Si possible, synchronisez vos bases en rsync et non via un utilitaire qui vous obligerait à ouvrir une connexion réseau SQL en écoute. Continuer à lire