Salut à tous,
J'ai un client qui dispose de deux serveurs en MariaDB en réplication master <-> master avec Galera. Oui je sais, c'est mal de faire de la réplication master-master avec moins de 3 serveurs, quorum, tout ça... on va changer ça.
Le fait est qu'il y a eu une indisponibilité du réseau pendant quelques minutes il y a quelques jours, ce qui a entrainé un "split brain". Je me retrouve donc avec des incohérences dans les enregistrements de deux tables entre les deux serveurs. Avant de resynchro le cluster, j'ai pris soins de faire un dump des tables avec mysqldump, sur chaque serveur.
J'ai ensuite comparé ces dumps avec diff. Seules deux tables contiennent des incohérences. La première contient une ligne de plus sur un des serveurs. Facile à corriger, il suffit de faire un INSERT.
Pour la seconde, c'est plus compliqué... Les dumps pèsent environ 550 Mo chacun, et j'ai 7 Mo de différence entre les deux. Donc impossible de comparer ça visuellement avec diff. J'ai pensé réimporter les tables dans une base temporaire, puis les comparer avec une requête qui va bien, mais si quelqu'un a une solution magique moins prise de tête, je suis preneur !
Merci,
Salut,
A l'époque ou je faisais "beaucoup" de bdd j'utilisais cet outil : https://www.percona.com/doc/percona-toolkit/2.2/pt-table-checksum.html et https://www.percona.com/doc/percona-toolkit/LATEST/pt-table-sync.html
On Fri, Sep 21, 2018 at 2:09 PM Jonathan Leroy jonathan@unsigned.inikup.com wrote:
Salut à tous,
J'ai un client qui dispose de deux serveurs en MariaDB en réplication master <-> master avec Galera. Oui je sais, c'est mal de faire de la réplication master-master avec moins de 3 serveurs, quorum, tout ça... on va changer ça.
Le fait est qu'il y a eu une indisponibilité du réseau pendant quelques minutes il y a quelques jours, ce qui a entrainé un "split brain". Je me retrouve donc avec des incohérences dans les enregistrements de deux tables entre les deux serveurs. Avant de resynchro le cluster, j'ai pris soins de faire un dump des tables avec mysqldump, sur chaque serveur.
J'ai ensuite comparé ces dumps avec diff. Seules deux tables contiennent des incohérences. La première contient une ligne de plus sur un des serveurs. Facile à corriger, il suffit de faire un INSERT.
Pour la seconde, c'est plus compliqué... Les dumps pèsent environ 550 Mo chacun, et j'ai 7 Mo de différence entre les deux. Donc impossible de comparer ça visuellement avec diff. J'ai pensé réimporter les tables dans une base temporaire, puis les comparer avec une requête qui va bien, mais si quelqu'un a une solution magique moins prise de tête, je suis preneur !
Merci,
-- Jonathan Leroy. _______________________________________________ Liste de diffusion du FRsAG http://www.frsag.org/
Hello !
Le 21 sept. 2018 à 14:08, Jonathan Leroy jonathan@unsigned.inikup.com a écrit :
Salut à tous,
J'ai un client qui dispose de deux serveurs en MariaDB en réplication master <-> master avec Galera. Oui je sais, c'est mal de faire de la réplication master-master avec moins de 3 serveurs, quorum, tout ça... on va changer ça.
Le fait est qu'il y a eu une indisponibilité du réseau pendant quelques minutes il y a quelques jours, ce qui a entrainé un "split brain". Je me retrouve donc avec des incohérences dans les enregistrements de deux tables entre les deux serveurs. Avant de resynchro le cluster, j'ai pris soins de faire un dump des tables avec mysqldump, sur chaque serveur.
J'ai ensuite comparé ces dumps avec diff. Seules deux tables contiennent des incohérences. La première contient une ligne de plus sur un des serveurs. Facile à corriger, il suffit de faire un INSERT.
Pour la seconde, c'est plus compliqué... Les dumps pèsent environ 550 Mo chacun, et j'ai 7 Mo de différence entre les deux. Donc impossible de comparer ça visuellement avec diff. J'ai pensé réimporter les tables dans une base temporaire, puis les comparer avec une requête qui va bien, mais si quelqu'un a une solution magique moins prise de tête, je suis preneur !
Merci,
-- Jonathan Leroy. _______________________________________________ Liste de diffusion du FRsAG http://www.frsag.org/
Pt-table-sync ( https://www.percona.com/doc/percona-toolkit/LATEST/pt-table-sync.html ) me parait bien adapté pour ca si tu sais quel serveur doit être la référence.
Sync all tables on host1 to host2:
pt-table-sync --execute host1 host2
Sinon tu l’executes avec —dry-run et —print ca sera peut être plus clair qu’avec un diff.
Pour le problème de quorum en master <-> master, sans rajouter de nouveau serveur tu peux utiliser Galera Arbitrator ( http://galeracluster.com/documentation-webpages/arbitrator.html )
-- Jocelyn Fournier Founder M : +33 6 51 21 54 10 https://www.softizy.com Softizy - At your side to Optimize your PHP / MySQL applications