Nous avons une grande base de données MySQL (environ 100 Go sur disque) que nous aimerions apparaître un esclave.
Notre processus typique de création d'un esclave est:
Le problème que nous rencontrons est avec la taille de la base de données. Au début de l'étape ci-dessus est terminée, l'esclave est si loin derrière le maître qu'il est incapable de se rattraper. En fait, la réplication des esclaves pousse plus loin et derrière. Je ne suis pas sûr de savoir pourquoi cela se produit.
Des idées sur la manière de semer le serveur esclave plus rapide ou de réparer la question de la réplication? Notez que le serveur maître dispose de plusieurs bases de données et un mélange de tables InnoDB/Myisam. Le serveur exécute MySQL 5.1
Il y a deux problèmes ici, qui doivent être résolus de manière indépendante.
Créer un esclave
Avec cette taille, 100 Go, MySqldump est généralement de ralentir aussi d'être fait efficacement. Essayez d'utiliser une sauvegarde binaire. Vous avez plusieurs options: @Paul vous en dit un, mais il est gênant que le maître soit verrouillé pendant la durée du processus de copie. De plus, RSYNC peut être très efficace si vous disposez de plusieurs petits fichiers, mais il peut ne pas être pour que les tailles de fichiers plus importantes changent de manière aléatoire tout au long de celle-ci (si vous avez une grande ibdata1).
Mes recommandations seraient instantané (si vous utilisez des machines virtuelles ou un système de fichiers qui le permettent: ZFS, tout autre sur le dessus de LVM, etc.) ou Percona Xtrabackup/Oracle Enterprise Backup. Ces options rendront le processus de sauvegarde presque aussi rapide que la copie de fichiers du système de fichiers sans presque aucun verrou. Certains d'entre eux permettent également une copie parallèle si votre bande passante le permet.
Si aucun de ces éléments ne fonctionne pour vous, essayez d'utiliser un utilitaire de sauvegarde/restauration parallèle logique comme myDumper.
Réplication avec l'augmentation de la gamme
Vous devez découvrir pourquoi cela se passe en premier (profilez vos questions sur les deux serveurs), mais ce sont certaines des causes les plus courantes:
binlog_format = ROW
. Il peut augmenter votre utilisation de la bande passante mais réduire la charge de l'esclave.innodb_flush_log_at_trx_commit
, par exemple).Un problème majeur avec la recréation d'une base de données de cette taille est l'index. Cela va prendre un certain temps pour indexer ce que je suppose, c'est des rangées dans les milliards.
La solution consiste à copier les index avec les données et cela signifie sauter la décharge. Cela signifie également sauter le déménagement de> 700 Go de données.
Voici ce que vous faites maintenant:
Essayez cela à la place:
Il peut y avoir un peu de ménage comme définissant correctement l'indice de journal, mais cette opération copie la base de données intacte plutôt que de le recréer. Bien sûr, les numéros de version doivent correspondre.
Si vous partitionnez vos plus grandes tables, vous obtenez même des performances plus rapides, car RSYNC ne copiera que des fichiers qui ont changé.