## MySQL Fabric

> Note: Version nécessaire et statut

> Le support de MySQL Fabric a commencé avec la version 1.6. Veuillez considérer l'implémentation actuelle comme une pré-alpha. La documentation est susceptible de ne pas lister toutes les fonctionnalités ou limitations. Le travail est en cours.

> Le sharding est le seul cas actuelement supporté par le greffon.

> Note: Les concepts de MySQL Fabric

> Veuillez vous référer au manuel de référence MySQL pour plus d'informations sur MySQL Fabric et comment le mettre en place. La documentation PHP suppose que vous êtes familier avec les concepts de bases et les idées derrière MySQL Fabric.

MySQL Fabric est un système pour gérer des fermes de serveurs MySQL afin d'obtenir de la haute disponibilité et optionnellement supporter le sharding. Techniquement, c'est un intergiciel de gestion et de monitoring de serveurs MySQL.

Les clients interrogent MySQL Fabric afin d'obtenir des listes de serveurs MySQL, leurs états et leurs rôles. Par exemple, les clients peuvent demander une liste des esclaves d'un groupe de réplication MySQL et savoir s'ils sont prêts pour gérer des requêtes. Un autre exemple est un cluster de serveurs MySQL shardés ou le client désire savoir quel shard interroger pour une table et une clé de shard donnée. Si configuré pour utiliser MySQL Fabric, le greffon utilise XML RPC au dessus de HTTP pour obtenir la liste à l'exécution depuis le hôte MySQL Fabric. L'appel de procédures à distance XML est fait en arrière plan et est transparent du point de vue du développeur.

Au lieu de lister les serveurs MySQL directement dans les fichiers de configuration des greffons, cela contient juste la liste d'un ou plusieurs hôtes MySQL Fabric.

Exemple #1 Configuration du greffon: Des hôtes Fabric au lieu des serveurs MySQL

    {
        "myapp": {
            "fabric": {
                "hosts": [
                    {
                        "host" : "127.0.0.1",
                        "port" : 8080
                    }
                ]
            }
        }
    }

Les utilisateurs utilisent les nouvelles fonctions mysqlnd_ms_fabric_select_shard() et mysqlnd_ms_fabric_select_global() pour basculer vers l'ensemble des serveurs responsables d'une clé de shard donné. Ensuite, le greffon choisit le serveur approprié pour exécuter les requêtes. Ce faisant, le greffon tient compte des règles de loadbalancing.

L'exemple suivant suppose que MySQL Fabric a été configuré pour sharder la table test.fabrictest en utilisant la colonne id comme clé de shard.

Exemple #2 Partitionnement manuel en utilisant les SQL hints

`<?php
$mysqli = new mysqli("myapp", "user", "password", "database");
if (!$mysqli) {
/* Bien sur, votre gestionnaire d'erreurs est meilleur... */
die(sprintf("[%d] %s\n", mysqli_connect_errno(), mysqli_connect_error()));
}
/* Créer une table globale (disponible sur tous les shards) */
mysqlnd_ms_fabric_select_global($mysqli, "test.fabrictest");
if (!$mysqli->query("CREATE TABLE test.fabrictest(id INT NOT NULL PRIMARY KEY)")) {
die(sprintf("[%d] %s\n", $mysqli->errno, $mysqli->error));
}
/* Basculer la connexion sur le bon shard et insérer un enregistrement */
mysqlnd_ms_fabric_select_shard($mysqli, "test.fabrictest", 10);
if (!($res = $mysqli->query("INSERT INTO fabrictest(id) VALUES (10)"))) {
die(sprintf("[%d] %s\n", $mysqli->errno, $mysqli->error));
}
/* Tenter de lire l'enregistrement nouvellement inséré */
mysqlnd_ms_fabric_select_shard($mysqli, "test.fabrictest", 10);
if (!($res = $mysqli->query("SELECT id FROM test WHERE id = 10"))) {
die(sprintf("[%d] %s\n", $mysqli->errno, $mysqli->error));
}
?>`

L'exemple précédent, une table shardé est créée, un enregistrement inséré et récupérer par la suite. Toutes les opérations en langage de définition de données SQL (DDL) sur une table shardé doivent être appliqués au groupe de serveur global. Avant de créer ou modifier une table shardé, mysqlnd_ms_fabric_select_global() est appelé pour basculer la connexion donnée vers les serveurs, du groupe global, correspondant. Les requêtes SQL de manipulation de données (DML) doivent être envoyés aux shards directement. La fonction mysqlnd_ms_fabric_select_shard() permet de basculer la connexion vers les shards gérant la clé donnée.