Je souhaite exécuter deux instances mysql distinctes sur deux machines distinctes, mais en utilisant le même répertoire de données sur NFS, est-il possible avec un moteur de stockage Innodb? L'opération d'application assurera ce qui suit:
Sur le site MySQL, cela est mentionné cela possible avec MyISAM et fusionner uniquement le moteur de stockage, mais ils ne le recommandent jamais.
http://dev.mysql.com/doc/refman/5.6/fr/MultiPle-Data-Directories.html
Ce que vous demandez est impossible pour le moment. Pourquoi ???
Tout d'abord, jetez un coup d'œil à l'architecture InnoDB
La piscine tampon InnoDb et la mémoire tampon de journal InnoDB sont conçues pour fonctionner sur un seul espace de table (A.K.A. IBDATA1). J'ai écrit à ce sujet sur ce dos Oct 03, 2013
: Y a-t-il un moyen d'utiliser différents paramètres InnoDB pour différentes bases de données sur le même serveur?
Ce que vous recherchez existe actuellement sur Oracle RAC.
Forme un cluster avec ces caractéristiques
EnnoDb Stockage Moteur pour MySQL
ibdata1
, le moteur de stockage Innodb doit ne pas démarrer si un autre thread de tampon de journal est déjà ouvert à partir d'un autre processus mysqld
processus.Veuillez lire mon Poste antérieure pour 2 alternatives . Une troisième alternative serait de passer au cluster MySQL (à l'aide du moteur de stockage NDB ). De cette façon, vous pouvez avoir un ou plusieurs nœuds de données partagés parmi plusieurs nœuds SQL.
@ypercube a fait le commentaire suivant
Votre question liée (et réponse) est d'environ 1 serveur. Cette question concerne environ 2 serveurs partageant le même répertoire de données. Les deux ne semblent pas pertinents.
En théorie, vous pouvez configurer plusieurs instances de MySQLD sur un seul serveur. Cependant, chaque instance mysqld
doit pointer sur un espace de table unique (ibdata1
). À la lumière de ce fait, lorsqu'il s'agit de plusieurs instances mysqld
, qu'ils viennent d'un serveur DB ou de plusieurs serveurs de DB:
C'est pourquoi j'ai mentionné mon poste octobre 201 POST. J'ai aussi mentionné la comparaison avec Oracle RAC.
Je souhaite exécuter deux instances mysql distinctes sur deux machines distinctes, mais en utilisant le même répertoire de données sur NFS, est-il possible avec un moteur de stockage Innodb?
InnoDB n'est pas conçu pour avoir des tampons de journaux partagés ou des tampons d'insertion partagés. La réponse est non. Je ne pense pas que l'oracle ne changera jamais le moteur de stockage Innodb pour le faire. S'ils l'ont fait, beaucoup de gens vont laisser tomber Oracle RAC et MySQL grappe en faveur de InnoDB pour des raisons budgétaires et/ou imprudentes.
Je veux juste vérifier s'il est techniquement possible ou non, la recommandation est une autre histoire. Spécialement mon application assurée écrit/lecture ne sera pas en conflit
Comme @Rolandomysqldba, cela n'est pas possible avec Innodb ou Myisam.
Simprimez plus simplement: certaines des pages de données que vous modifiez ne sont pas écrites sur le disque immédiatement. Ceci est fait en arrière-plan, et pas tous à la fois. Donc, si votre deuxième instance en lecture seule essaie de lire des données via NFS à partir du même répertoire de données, il est certain de lire les modifications qui ont été partiellement écrites sur le disque. Fondamentalement, les ordures.
Myisam n'a pas de piscine tampon, mais il utilise le système de fichiers comme cache de retour d'écriture, vous ne savez donc jamais si toutes vos modifications ont atteint le disque ou non. Dans ce cas, vous obtiendrez également une erreur de données imprévisible de données si vous essayez de lire les fichiers via NFS à partir d'un autre hôte.
Mais pourquoi voulez-vous faire cela en premier lieu? Est-ce qu'il faut obtenir une plus grande capacité d'exploiter un grand nombre de requêtes par seconde? Vous peut Exécutez plus d'une instance de MySQL avec des données conservées plus ou moins en synchronisation, à l'aide de Réplication . C'est une pratique plus courante et ça fonctionne bien.
Est-ce que votre raison d'avoir une capacité de basculement? Dans ce cas, vous pouvez utiliser DRBD pour la réplication au niveau des blocs . Et il y a de nombreuses autres solutions de basculement à part cela.