MariaDB 10.2 replikering på Ubuntu 16.04

(Last Updated On: 1. december 2020)

Det forudsættes at du har installeret MariaDB på både master og slave, ellers følg denne vejledning først:

Installer MariaDB på Ubuntu 16.04

Konfiguration af master

Konfigurer /etc/mysql/my.cnf på master.

bind-address bestemmer hvilket interface din master lytter på og det skal naturligvis være et din slave kan kommunikere med, og 127.0.0.1 du’r derfor ikke 😉

Din slave henter data fra de binære logs, og derfor bør du med binlog-ignore-db ekskludere alle de databaser der IKKE skal replikeres. Man kan også gøre det modsatte, nemlig bruge binlog-do-db til at angive de databaser der skal inkluderes… eller bruge en kombination. Jeg bruger kun binlog-ignore-db for at sikre at eventuelle nye databaser der oprettes, automatisk bliver en del af replikeringen. Men det er en smagssag.

Genstart MariaDB:

Nu kan du indlæse data fra en evt. tidligere database server:

… og oprette eventuelle tidligere brugere:

Forbind til MariaDB og opret en bruger til din slave. Erstat ‘10.0.0.49’  med IP adressen på din slave og ‘adgangskode’ med noget andet. Bemærk: Hvis du ønsker at bruge et hostnavn i stedet for IP skal du fjerne skip-name-resolve i my.cnf og genstarte MariaDB.

SHOW MASTER STATUS  viser den aktuelle position i den binære log, dvs. det punkt hvorfra slaven skal starte med replikering. Disse oplysninger skal du derfor lige notere dig, da de skal bruges senere.

Fra dette øjeblik, bør du sikre dig at der ikke er noget der forbinder til din database og foretager ændringer i struktur eller data.

Nu er din master sådan set klar. Du mangler bare lige at lave et dump af data, som skal indlæses på slaven. :

En vigtig parameter her er --skip-triggers. De ændringer triggers måtte foretage på masteren, havner nemlig også i masterens binære logs og afvikles dermed også på din slave. Hvis dine triggers også oprettes på slaven, bliver disse ændringer således afviklet 2 gange, med de fejl det må afstedkomme.

Konfiguration af slave

Genstart:

Indlæs data fra masteren:

Opret bruger:

Konfigurer den til at køre som slave:

MASTER_HOST er ip adressen på din master. MASTER_LOG_FILE og MASTER_LOG_POS er værdierne fra den SHOW MASTER STATUS forespørgsel vi kørte på masteren tidligere:

Nu kan du starte slaven:

Den første linie i status for slaven, skulle gerne vise at den venter på events fra masteren, som det ses herover.

Hvis du nogensinde skal genstarte slave-databasen eller hele slave serveren, så gør som følger:

Genstart nu server eller database og derefter:

Du kan bruge din slave til tunge forespørgsler, backup og ting generelt der ikke skal forstyrre de applikationer der kører på masteren. Du kan også lade alle  “SELECT” statements gå til slaven og alt andet gå til masteren, men da bør du overveje at konfigurere din slave som read-only.

BEMÆRK: Replikering er ikke noget man sætter op, og så kører det bare. Det kræver overvågning og vedligeholdelse. Jeg har et script der jævnligt tjekker om alt er som det skal være, og hvis ikke, får jeg en notifikation. Derudover har jeg et job der jævnligt tjekker data, og fikser det hvis slaven mangler data. Dette er helt essentielt hvis din slave er backup.

Videre læsning: