Maison >base de données >tutoriel mysql >Réplication GTID et gestion des problèmes
Tout d'abord, jetons un coup d'œil à ce qu'est le GTID :
GTID (Global Transaction ID) est le numéro d'une transaction soumise et est un numéro unique au monde.
GTID est en fait composé de UUID+TID. L'UUID est l'identifiant unique d'une instance MySQL. TID représente le nombre de transactions qui ont été validées sur cette instance et augmente de façon monotone à mesure que les transactions sont validées. Sur la base du GTID, vous pouvez savoir sur quelle instance la transaction a été initialement soumise, ce qui facilite le basculement.
Voyons ensuite comment ajouter rapidement un esclave en mode GTID :
Nous savons qu'avant qu'il n'y ait pas de réplication GTID, la réplication MySQL était basée sur le journal binaire et la position sont terminées. Pour la copie précédente, nous devons exécuter l'instruction de modification suivante :
CHANGE MASTER TO MASTER_HOST='',MASTER_PORT=3306,MASTER_USER='repl',MASTER_PASSWORD='*****',MASTER_LOG_FILE='mysqlbinlog.000003',MASTER_LOG_POS=99721204;
CHANGE MASTER TO MASTER_HOST='****', MASTER_USER='repl', MASTER_PASSWORD='******', MASTER_PORT=3306, master_auto_position=1;
variables globales suivantes :
root@perconatest09:23:44>show global variables like 'GTID_%'\G*************************** 1. row ***************************Variable_name: gtid_executed Value: 5031589f-3551-11e7-89a0-00505693235d:1-12, 806ede0c-357e-11e7-9719-00505693235d:1-11, a38c33ee-34b7-11e7-ae1d-005056931959:1-24*************************** 2. row ***************************Variable_name: gtid_executed_compression_period Value: 1000*************************** 3. row ***************************Variable_name: gtid_mode Value: ON*************************** 4. row ***************************Variable_name: gtid_owned Value:*************************** 5. row ***************************Variable_name: gtid_purged Value: 5031589f-3551-11e7-89a0-00505693235d:1-12, 806ede0c-357e-11e7-9719-00505693235d:1-11, a38c33ee-34b7-11e7-ae1d-005056931959:1-12
dans le journal binaire . Nous pouvons le configurer manuellement pour faciliter une certaine gestion.
Après avoir compris ces deux paramètres, voyons comment ajouter une base de données esclave avec réplication GTID : (1) : Faire une sauvegarde complète de la base de données maître, et enregistrer la base de données maître base de données gtid_executed(2) au moment de la sauvegarde de la bibliothèque : restaurez à partir de la bibliothèque et définissez le gtid_purged de la bibliothèque sur le gtid_executed(3) du maître que nous avons obtenu dans le premier étape : exécutez l'instruction CHANGE MASTER. Nousroot@perconatest09:23:58>show global variables like 'GTID_e%'\G*************************** 1. row ***************************Variable_name: gtid_executed Value: 5031589f-3551-11e7-89a0-00505693235d:1-12, 806ede0c-357e-11e7-9719-00505693235d:1-11, a38c33ee-34b7-11e7-ae1d-005056931959:1-242 rows in set (0.01 sec) root@perconatest09:41:33>show global variables like 'GTID_p%'\G*************************** 1. row ***************************Variable_name: gtid_purged Value: 5031589f-3551-11e7-89a0-00505693235d:1-12, 806ede0c-357e-11e7-9719-00505693235d:1-11, a38c33ee-34b7-11e7-ae1d-005056931959:1-121 row in set (0.01 sec)
Ensuite faites une sauvegarde dans la base de données principale :
mysqldump --all-databases --single-transaction --triggers --routines --host=127.0.0.1 --port=18675 --user=root--p > /home/sa/backup.sql
[root@localhost sa]# head -30 backup.sql
SET @@GLOBAL.GTID_PURGED='5031589f-3551-11e7-89a0-00505693235d:1-12, 806ede0c-357e-11e7-9719-00505693235d:1-11, a38c33ee-34b7-11e7-ae1d-005056931959:1-24';
show global variables like 'gtid_executed'; show global variables like 'gtid_purged';
CHANGE MASTER TO MASTER_HOST="***", MASTER_USER="root", MASTER_PASSWORD="*****", MASTER_PORT=3306, MASTER_AUTO_POSITION = 1;
réinitialisation sont effectuées, notre bibliothèque esclave signalera l'erreur suivante :
Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'The slave is connecting using CHANGE MASTER TO MASTER_AUTO_POSITION = 1, but the master has purged binary logs containing GTIDs that the slave requires.'
root@perconatest09:41:38>show global variables like 'GTID_EXECUTED';+---------------+---------------------------------------------------------------------------------------------------------------------------------+| Variable_name | Value |+---------------+---------------------------------------------------------------------------------------------------------------------------------+| gtid_executed | 5031589f-3551-11e7-89a0-00505693235d:1-12, 806ede0c-357e-11e7-9719-00505693235d:1-11, a38c33ee-34b7-11e7-ae1d-005056931959:1-24 |+---------------+---------------------------------------------------------------------------------------------------------------------------------+1 row in set (0.01 sec)
root@(none)03:04:49>set global GTID_PURGED='5031589f-3551-11e7-89a0-00505693235d:1-12,806ede0c-357e-11e7-9719-00505693235d:1-11,a38c33ee-34b7-11e7-ae1d-005056931959:1-24';
root@(none)03:04:49>reset master; root@(none)03:04:49>set global GTID_PURGED='5031589f-3551-11e7-89a0-00505693235d:1-12,806ede0c-357e-11e7-9719-00505693235d:1-11,a38c33ee-34b7-11e7-ae1d-005056931959:1-24'; root@(none)03:04:49>start slave; root@(none)03:04:49>show slave status\G
J'ai obtenu l'erreur fatale 1236 du maître lors de la lecture des données du journal binaire : "L'esclave se connecte en utilisant CHANGE MASTER TO MASTER_AUTO_POSITION = 1, mais le maître a purgé les journaux binaires contenant les GTID dont l'esclave a besoin
(Publié Message d'erreurAfin d'augmenter le nombre de vues)
Bien sûr, la méthode ci-dessus ne garantit pas la cohérence complète des données. Nous devons également vérifier à l'aide de pt-table-checksum et. pt-table-sync, mais ce n'est pas nécessairement le plus efficace. Le meilleur moyen est de faire une sauvegarde complète, puis de restaurer, puis de spécifier le maître comme indiqué précédemment. C'est le plus fiable.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!