Comment configurer la réplication MySQL avec un temps d'arrêt minimal

12

Fondamentalement, nous avons une grande base de données MySQL et nous cherchons à faire la réplication vers un esclave (configuration maître esclave). Avez-vous un guide étape par étape sur la façon de procéder avec le temps d'arrêt MINIMAL dans la base de données? La sauvegarde de la base de données et le transfert de la sauvegarde vers le serveur esclave (même via un réseau privé) prend environ 40 minutes. Un temps d'arrêt assez long.

Patrick
la source

Réponses:

15

Je suppose que vous utilisez InnoDB comme moteur de stockage. Si tel est le cas, vous devez activer la journalisation bin . Si ce n'est pas le cas maintenant, vous devez redémarrer MySQL après avoir modifié my.cnf. C'est le seul temps d'arrêt, après lequel vous pouvez effectuer un vidage de la base de données avec la position binlog sans bloquer la base de données:

mysqldump --skip-lock-tables --single-transaction --flush-logs --hex-blob --master-data=2 -A

Sur la base de cette sauvegarde, restaurez les données sur l'esclave. Après cela, vous pouvez suivre n'importe quel tutoriel de réplication MySQL et laisser l'esclave rattraper / fonctionner avec le maître.

pQd
la source
que se passerait-il si certaines tables n'utilisaient pas innodb? Et la sauvegarde ci-dessus serait-elle toujours valide si j'utilise --databases pour vider un sous-ensemble des bases de données au lieu de -A?
mathieu
si certaines tables n'utilisent pas innodb, la sauvegarde peut être incohérente. voir ici: stackoverflow.com/a/7461466/104398 ; la sauvegarde ne contiendra pas ces bases de données ignorées. si vous configurez la réplication sur la base d'une telle sauvegarde et ne filtrez pas ce qui est répliqué - votre réplication s'arrêtera dès qu'il y aura une opération sur des bases de données omises.
pQd
Ok, j'ai converti mes tables myisam restantes en innodb et je me suis assuré que seules les bases de données que je veux sont répliquées / sauvegardées.
mathieu
3

pour démarrer une réplication, vous avez besoin d'une copie cohérente de votre base de données sur l'esclave

vos tables sont-elles soutenues par myisam ou innodb? pour découvrir le problème

show table status

et regardez la colonne "Moteur"

si toutes les tables sont innodb, vous pouvez effectuer une configuration sans interruption en utilisant mysqldump --single-transaction et l'importer dans l'esclave

si les tables sont myisam, il devra y avoir des temps d'arrêt car vous devez verrouiller les tables pour l'écriture pendant qu'elles sont copiées. mysqlhotcopy est l'outil pour vous aider.

Si vous utilisez LVM (gestionnaire de volumes logiques), vous pouvez également arrêter la base de données, prendre un instantané LVM en quelques secondes et redémarrer la base de données. Vous pouvez ensuite effectuer une copie cohérente à partir de l'instantané.

Aleksandar Ivanisevic
la source
1

Pour configurer l'esclave, vous devrez prendre un instantané de données et enregistrer la position du journal binaire. La sauvegarde de la base de données ne devrait pas entraîner de temps d'arrêt, même si cela entraînera une baisse des performances, mais vous sauvegardez déjà la base de données de toute façon, n'est-ce pas? Vous pouvez trouver la sauvegarde nécessaire pour verrouiller certaines tables et cela peut entraîner des blocages sur votre application, il faut vraiment regarder comment elle est implémentée pour cela.

Pouvez-vous prendre un instantané du disque? Cela réduirait considérablement les temps d'arrêt si vous pouvez effectuer une sauvegarde à chaud.

hellomynameisjoel
la source