web-dev-qa-db-fra.com

Ajouter une base de données à la réplication existante qui utilise binlog_do_db?

Nous avons deux MySQL 5.5 serveurs fonctionnant sur Ubuntu 12.04.

Nous répliquons avec succès 3 bases de données de Server01 à Server02, mais devez ajouter une 4ème base de données (nouvelle).

Notre my.cnf sur le maître a:

binlog_do_db = database1
binlog_do_db = database2
binlog_do_db = database3

Comment ajouter la 4ème base de données à la réplication? Tout ce que j'ai lu a indiqué que nous devrions redémarrer MySQL, y a-t-il quelque chose à ce sujet? Ou avez-nous juste besoin de le programmer?

C'est le plan que nous avons jusqu'à présent, mais j'espérais une méthode qui ne nécessitait pas de redémarrage. Est-ce que je suis surcharge cela?




GRANT REPLICATION SLAVE ON *.* TO 'slaveusr'@'%' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
QUIT;

Modifier mon.cnf pour inclure la nouvelle base de données:

binlog_do_db = database4

Redémarrer mysql

  service mysql restart

Sauvegardez la base de données pour la copie initiale sur le serveur esclave

USE database4;
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;

Dans une nouvelle coquille

mysqldump -u root -ppassword --opt database4 > database4.sql
scp database4.sql root@server02:/home

Dans l'ancienne coquille

UNLOCK TABLES; 
QUIT;

Changer mon.cnf sur le serveur esclave

replicate-do-db = database4

Redémarrer mysql

service mysql restart

Restaurer le DB DBODD

mysql -u root -ppassword database4 < database4.sql 
3
BT643

Faire des modifications à Binlog-Do-DB nécessitera un redémarrage dont j'ai peur.

Personnellement, je supprimerais tout le binlog-db-db de la maîtrise my.cnf et utilisez simplement Replicat-do-dB sur l'esclave pour filtrer ce que vous voulez être traité.

De cette façon, vous pouvez ajouter davantage de bases de données au Master à l'avenir sans avoir à redémarrer.


Si je comprends bien correctement, vous essayez de copier la nouvelle base de données (base de données4) sur un esclave qui dispose déjà de 3 bases de données répliquées (elles sont toutes sur la même base de données MySQL).

Le problème est alors que la réplication devra être en pause pendant que vous faites cela.

Le processus que j'utiliserais serait:

1) Master - redémarrez le maître avec le nouveau binlog-do-db | Enlever tout binlog-do-db Afin de commencer à remplir le journal binaire avec les données de base de données4

2) Esclave - Vérifiez que la réplication de la base de données esclave est à jour (SHOW SLAVE STATUS> Seconds_Behind_master). Si ce n'est pas attendre jusqu'à ce qu'il soit

3) Master - FLUSH TABLES WITH READ LOCK; Pour arrêter de nouvelles données entrant dans le maître

4) Esclave - La réplication de chèques est entièrement rattrapée et aucune donnée n'est reproduite (read_master_log_pos et exec_master_log_pos devrait être la même et ne pas changer (dans show slave status;)))

5) esclave - STOP SLAVE; Pour arrêter toutes les données se répliquant dans la base de données une fois que vous déverrouillez le maître sous peu.

6) Run MySQLDUMP avec --single-transaction option

7) Une fois que MySqldump a commencé à exécuter Déverrouillage de la base de données principale UNLOCK TABLES; De cette manière, vos systèmes peuvent continuer à lire et à écrire au Master, espérons-le au minimum.

n.b. que MySqldump peut verrouiller le schéma de base de données4 pendant qu'il fonctionne en fonction de votre système.

8) Une fois que MySqldump a terminé, importez-le dans la base de données des esclaves.

9) Vérifiez que la base de données nouvellement importée4 a l'air correcte

10) Redémarrez la base de données des esclaves, ajoutant replicate-do-db=database4 au fichier my.cnf comme vous allez

Une fois que cela revient, il devrait continuer à se reproduire de l'endroit où il s'est arrêté, mais y compris la base de données4.

6
IGGt

En tant que commentaire de la réponse donnée par IgGT, si la base de données est nouvelle, et non utilisée - c'est-à-dire aucune connexion, vous pouvez d'abord jeter la nouvelle base de données, puis la laisser tomber ou la renommer sur le maître.

En supposant que les esclaves n'ont pas été invités à reproduire uniquement votre (s) base de données (s) actuelle (s) que vous devez ensuite faire sont:

1) Master - redémarrez le maître avec New Binlog-do-DB | Supprimer tous les binlog-do-dB afin de commencer à remplir le journal binaire avec les données de la base de données4

2) Créer une nouvelle base de données (base de données4)

3) Importer la base de données de Dump Back dans le maître

De cette manière, le processus de réplication créera la nouvelle base de données et renseignera sur tous vos esclaves pour vous.

Cela bénéficie également de la réduction des temps d'arrêt de votre autre base de données à l'heure à laquelle il est nécessaire de redémarrer l'instance Master DB.

Comme recommandé de supprimer toutes les déclarations Binlog-Do-DB signifiera à l'avenir, vous pouvez ajouter de nouvelles bases de données et elles seront automatiquement reproduites sur les esclaves. Si vous ne souhaitez pas reproduire une base de données à un ou plusieurs esclaves, vous pouvez définir la variable de démarrage Replicat-ignore-db sur ces esclaves, avant la création de la base de données ou à n'importe quel point ultérieur, puis déposez la base de données. de ces esclaves.

Si votre version est MySQL 5.7 ou plus tard, vous pouvez gérer les bases de données incluses ou ignorées sur les esclaves sans redémarrer l'esclave: https://dev.mysql.com/doc/refman/5.7/fr/change-ranglication -filter.html

0
brooksie155