HyperDB : Utiliser plusieurs bases de données avec WordPress
Sommaire
I. Présentation
Ce plug-in pour WordPress permet d’améliorer la gestion native des bases de données au sein du CMS. Il permet de définir différents serveurs de bases de données à utiliser pour accéder à la base de données du site concerné.
Attention, ce plug-in ne permet pas de faire de la réplication de base de données, cette fonctionnalité devant être assurée en amont par MySQL directement avec la gestion master/slave. HyperDB est là uniquement pour permettre à l’application WordPress de basculer d’un serveur de base de données vers un autre en cas de panne.
Le failover est géré par HyperDB : Lorsque la connexion sur une base de données échoue, il tente d’accéder à un autre serveur contenant la base de données avec les mêmes données. Si la réplication n’est pas configurée, HyperDB effectue quelques tentatives de reconnexion avant de renoncer.
A voir également : Réplication MySQL
II. Infrastructure HyperDB
Voici l’infrastructure imaginée dans le cadre de la réalisation de ce tutoriel :
III. Configuration d’HyperDB
Le plug-in HyperDB ne s’installe pas comme un quelconque autre plug-in, à savoir en positionnant les fichiers dans le répertoire « /wp-content/plugins/ ».
A. Modèle de configuration
Après avoir téléchargé les sources sur la page WordPress du plug-in, placez le fichier « db-config.php » à la racine de votre installation WordPress et ouvrez-le.
Dans ce fichier, il faudra définir la configuration des différents hôtes à utiliser. Pour cela, on s’appuiera sur la variable $database qui est en fait un tableau contenant différents paramètres :
- host (requis) : Nom de l’hôte (attribué au sein de la configuration HyperDB) – Spécifier « :port » avec le bon numéro s’il est différent du port par défaut qui est 3306.
- user (requis) : Nom d’utilisateur MySQL
- password (requis) : Mot de passe de l’utilisateur définit
- name (requis) : Nom de la base de données
Ainsi que différents paramètres optionnels mais qui nous serons utiles :
-read : Indique si l’hôte est accessible en lecture (par défaut : 1 = oui)
-write : Indique si l’hôte est accessible en écriture (par défaut 1 = oui)
- dataset : Nom du dataset utilisé (défaut : global)
- timeout : Timeout en secondes pour une réponse TCP (défaut : 0.2 seconde)
Ainsi, on définira nos hôtes sous cette forme :
$wpdb->add_database(array( 'nom-option' => valeur, ));
B. Définir l’hôte maître
Commençons par créer la configuration pour le serveur MySQL Master. Nous obtiendrons :
$wpdb->add_database(array( 'host' => DB_HOST, 'user' => DB_USER, 'password' => DB_PASSWORD, 'name' => DB_NAME, ));
On peut laisser les différentes variables « DB_* » puisque cela permet d’aller chercher les valeurs directement définies au sein de la configuration de WordPress. Pour notre serveur master, cela fait très bien l’affaire. Par exemple, "DB_HOST" aura pour valeur ce que vous avez définit pour ce paramètre dans le fichier de configuration WordPress "wp-config.php".
Note : On ne précise pas les directives « read » et « write » cela signifie que l’on indique que ce serveur est accessible aussi bien en lecture qu’en écriture comme la valeur par défaut est « 1 ».
C. Définir l’hôte esclave
Après avoir définit l’hôte master, on peut s’attaquer à la configuration de l’hôte slave. La principale différence sera au niveau de l’hôte, et, des accès autorisés sur le serveur.
Voici la configuration :
$wpdb->add_database(array( 'host' => DB_SLAVE1, 'user' => DB_USER, 'password' => DB_PASSWORD, 'name' => DB_NAME, ‘read’ => 1, ‘write’ => 0, ));
Les principales différences sont le changement du nom d’host, il faut définir un nom unique pour chaque hôte définit, on choisira donc « DB_SLAVE1 » dans ce cas. De plus, on indique que ce serveur est accessible en lecture (facultatif car implicite) mais pas en écriture.
Pas en écriture tout simplement car lors d’un processus de réplication MySQL, le serveur slave est accessible uniquement en lecture.
IV. Configuration de WordPress avec HyperDB
Après avoir configuré le fichier « db-config.php », il est nécessaire de configurer WordPress pour l’associer à HyperDB. Pour cela, éditez le fichier « wp-config.php » de WordPress.
Recherchez dans ce fichier la déclaration « DB_HOST » qui doit normalement avoir pour valeur l’adresse IP du serveur Master, correspondant probablement au serveur MySQL utilisé actuellement.
Définissez une seconde option pour le DB_SLAVE1 comme ceci :
/** MySQL master */ define('DB_HOST', 'localhost'); /* MySQL slave */ define('DB_SLAVE1', 'localhost');
Sauvegardez et fermez le fichier wp-config.
Enfin, copiez le fichier « db.php » du plug-in HyperDB dans le répertoire « wp-content » de votre installation WordPress. Donnez le propriétaire de ce fichier pour que ce soit l’utilisateur « www-data » qui le soit :
chown –R www-data:www-data wp-content/db.php
Maintenant, votre WordPress est désormais capable de gérer plusieurs serveurs MySQL afin d’améliorer la disponibilité de votre site web. N’oubliez pas de configurer correctement la réplication MySQL maître/esclave également pour assurer le bon fonctionnement de l’infrastructure (voir lien dans première partie).
Merci pour cet article.
Je m’interroge juste sur la sécurité de ce plugin et me demande si une réplication de base au niveau du serveur n’est pas préférable.
Il me semble préférable de se fier à un expert mysql qu’à un plugin, non?
Par ailleurs, le plugin alerte t’il des problèmes de failover et du switch ?
Quid également des problématiques de réplication?
La réplication de base sur fait sur le serveur (en local) comme indiqué dans le tutoriel :
Le plugins wordpress ne sert qu’a indiquer à WordPress qu’il existe des bases en réplications et vers lesquels il peut envoyer ses requêtes.
Merci pour votre article.
je voudrais savoir coment indiquer á wordpress le lieu ou se trouve la base de donnée slave? parceque á l´instalation, wordpress cree juste une seule base de donée.
Merci de me repondre.