web-dev-qa-db-fra.com

Deux serveur MySQL accédant à la même base de données sur NFS

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:

  • une instance mysql sera un producteur
  • un mySQL sera lu que le consommateur

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

3
HRK

Ce que vous demandez est impossible pour le moment. Pourquoi ???

Tout d'abord, jetez un coup d'œil à l'architecture InnoDB

InnoDB Architecture

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.

Oracle RAC

Forme un cluster avec ces caractéristiques

  • Chaque serveur Oracle RAC exécute une instance locale de RDBM d'Oracle
  • Chaque serveur RAC Oracle a son propre tampon de journal
  • Chaque serveur Oracle RAC partage l'accès avec d'autres serveurs Oracle RAC
  • Tout le serveur RAC Oracle Connectez-vous au même ensemble de fichiers de base de données

Innodeb

EnnoDb Stockage Moteur pour MySQL

  • INNODB n'a qu'un tampon de journal et un seul fil qui se connecte au tampon de journal
  • InnoDB n'autorise pas plusieurs threads de mémoire tampon de journal
  • Lorsque vous démarrez MySQLD (une instance de MySQL) et son moteur de stockage Innodb tente de se connecter à 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.

Épilogue

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.

Mise à jour 2014-04-24 16:55 EDT

@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:

  • Une seule instance MySQLD peut atteindre un fil de tampon de journal exclusif sur un espace de table de système
  • Une seule instance mysqld peut atteindre un fil de tampon d'insertion exclusif sur un espace de table de système

C'est pourquoi j'ai mentionné mon poste octobre 201 POST. J'ai aussi mentionné la comparaison avec Oracle RAC.

Votre question actuelle

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.

1
RolandoMySQLDBA

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.

3
Bill Karwin