Sauvegarde logique cohérente des bases de données qui utilisent les moteurs MyISAM et InnoDB

8

J'ai une question concernant la sauvegarde logique des bases de données MySQL qui utilisent à la fois MyISAM et InnoDB.

L' mysqldumputilitaire prend en charge ces deux options:

  • --single-transaction - Crée un instantané cohérent en vidant toutes les tables dans une seule transaction. Fonctionne UNIQUEMENT pour les tables stockées dans des moteurs de stockage qui prennent en charge le multiversionnement (actuellement seul InnoDB le fait) [...] L'option désactive automatiquement --lock-tables.

  • -x, --lock-all-tables - Verrouille toutes les tables dans toutes les bases de données. Ceci est réalisé en prenant un verrou de lecture global pendant toute la durée du vidage. Désactive automatiquement --single-transaction et --lock-tables.

    • Pour InnoDB, nous avons besoin --single-transaction

    • pour MyISAM, nous avons besoin de - lock-tables ou lock-all-tables (au cas où nous aurions besoin d'une cohérence entre bases de données).

Alors, comment une base de données hybride (une base de données qui utilise à la fois les moteurs MyISAM et InnoDB) est-elle censée être sauvegardée?

Éditer:

Juste pour clarifier, la question pourrait être reformulée comme ceci:

Les options lock- [all-] tables garantissent-elles une sauvegarde cohérente des tables InnoDB?

Dimitre Radoulov
la source

Réponses:

8

Avec mysqldump, vous ne pouvez l'utiliser en toute sécurité que --single-transactionsi toutes vos tables sont InnoDB, sinon votre sauvegarde est incohérente.

Si vous avez besoin d'une sauvegarde hybride, vous avez besoin de la lock-tablessur toutes les tables de la sauvegarde (par défaut), qui sera sans danger pour tous les moteurs. Il convient également de mentionner que les options par défaut garantiront la sécurité de votre sauvegarde, vous n'avez pas besoin d'activer un indicateur spécial.

Remarque: Si vous avez un mix hybride, regardez peut-être xtrabackup. Il ne se verrouillera que pendant la phase MyISAM de la sauvegarde.

Morgan Tocker
la source
J'étais sur le point de poster ceci, mais tu m'as battu. Lien pertinent: percona.com/doc/percona-xtrabackup/innobackupex/…
Derek Downey
Merci d'avoir confirmé que les tables de verrouillage garantissent une sauvegarde cohérente pour les deux moteurs. Je regarde actuellement Zmanda Recovery Manager pour MySQL (je vais aussi jeter un œil à xtrabackup).
Dimitre Radoulov
Zmanda n'est qu'un gestionnaire d'interface graphique pour toutes les autres méthodes de sauvegarde - je suis presque sûr que l'utilisation de xtrabackup est prise en charge.
Morgan Tocker
Salut @Morgan Tocker, Zmanda fournit également un ensemble de scripts (zrm- *) qui exécutent en fait différents types de sauvegarde: logique, brut et instantanés. Toutes les bases de données que nous administrons sont hybrides, il est donc peu utile d'utiliser un produit distinct - nous ne pouvons pas éviter le verrouillage pendant la sauvegarde.
Dimitre Radoulov
Cette réponse dit que si l'on utilise mysqldump et spécifie --lock-all-tablesalors la sauvegarde sera cohérente, non? Et il suffit d'exécuter mysqldump une seule fois: ce sera sûr pour InnoDB et MyISAM en même temps, non?
KajMagnus
2

Comme idée supplémentaire pour votre situation, il est peut-être utile de réfléchir à la configuration d'une configuration maître-esclave, où votre sauvegarde est effectuée à partir de l'esclave.

Une base de données MySQL avec un mélange d'InnoDB et MyISAM verrouillera toujours (pour autant que je sache dans chaque configuration et avec chaque outil de sauvegarde) les tables MyISAM pour la phase de sauvegarde MyISAM.

Pour éviter ce verrouillage, utilisez cette configuration:

  • Serveur A: mysql Master
  • Serveur B: mysql Slave (connecté au serveur A)

Toutes les écritures et lectures vont au serveur A (maître). Le serveur B (esclave) n'est utilisé que pour la sauvegarde. Sur l'esclave, vous installez un outil de sauvegarde ou un script de votre choix, par exemple l'administrateur MySQL.

Configurez votre sauvegarde, par exemple quotidiennement pendant la nuit. Les verrous sont sur l'esclave, ce qui entraîne un décalage pendant que l'esclave se verrouille, mais ce décalage est rattrapé dès que la sauvegarde est terminée et que le verrou est ouvert.

Raffael Meier
la source