Hvordan sette opp MariaDB (Master-Slave) replikering i CentOS/RHEL 7 og Debian 8/9
Selv når noen IT-folk hører uttrykket Databasereplikering, forbinder de det ofte med behovet for å ha flere kopier av den samme informasjonen for å unngå tap av data i tilfelle maskinvarefeil eller datakorrupsjon. Selv om det til en viss grad er sant, er det mye mer ved databasereplikering enn det vanlige konseptet med å sikkerhetskopiere en database og datatilgjengelighet.
Blant andre fordeler med databasereplikering i et master-slave-oppsett kan vi nevne:
- Sikkerhetskopiering kan gjøres på slaveserveren uten å påvirke (og bli påvirket av) skriveoperasjonene i masteren.
- Ressursintensive operasjoner (som dataanalyse) kan utføres på slaven uten å påvirke ytelsen til masteren.
I denne artikkelen vil vi forklare hvordan du setter opp master-slave-replikering i MariaDB 10.1. I motsetning til klassisk replikering, introduserte MariaDB konseptet Global Transaction IDs (GTIDs) i v10.0, som gjør det mulig å endre en slave for å koble til og replikere fra en annen master enkelt. På toppen av det blir statusen til slaven registrert på en krasjsikker måte (oppdateringer til tilstanden gjøres i samme transaksjon som oppdateringene til dataene).
Hvis du leter etter MySQL-replikering under CentOS/RHEL 6, følg denne veiledningen Konfigurer MySQL (Master-Slave)-replikering på CentOS/RHEL 6
Installerer MariaDB 10.1 i CentOS/RHEL 7 og Debian 8/9
Vårt testmiljø består av følgende maskiner (begge er CentOS 7):
Master: 192.168.0.18 Slave: 192.168.0.19
For å installere den nyeste versjonen av MariaDB, må vi legge til lagrene deres på serverne våre. Hvis du bruker eldre versjon av MariaDB, si 5.5, bør du vurdere å oppgradere til siste 10.1-versjon ved å bruke artikkelen nedenfor.
- Oppgrader MariaDB 5.5 til MariaDB 10.1
Lag en fil med navnet MariaDB.repo
inne i /etc/yum.repos.d med følgende innhold på både master- og slavesystemer:
# MariaDB 10.1 CentOS repository list - created 2016-01-23 14:16 UTC # http://mariadb.org/mariadb/repositories/ [mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.1/centos7-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1
Lagre filen og installer MariaDB på begge serverne ved å bruke yum:
# yum update && yum install MariaDB-server MariaDB-client
Legg til nøkkelen for å autentisere pakker og MariaDB-depotet:
# apt-get install software-properties-common # apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db # add-apt-repository 'deb [arch=amd64,i386] http://mirror.edatel.net.co/mariadb/repo/10.1/debian jessie main'
Merk: Erstatt distribusjonsnavn og kodenavn i den uthevede linjen ovenfor.
Installer med apt-get-kommandoen:
# apt-get update # apt-get install mariadb-server
Når du har installert MariaDB, kjør mysql_secure_installation
-prosedyren på både master og slave, la oss sette opp en prøvetestdatabase i mastermaskinen.
Sette opp en prøve MySQL-database på Master
Vi vil nå sette opp Employees
-databasen i hovedserveren fra https://github.com/datacharmer/test_db (som gir et datasett med 4 millioner poster fordelt på seks tabeller) i to enkle trinn:
Klon depotet og bruk det til å importere eksempeldatabasen til MariaDB-installasjonen din:
# git clone https://github.com/datacharmer/test_db # cd test_db # mysql < employees.sql
Konfigurere MySQL Server på Master
Følg disse trinnene for å konfigurere masteren:
TRINN 1: Rediger /etc/my.cnf
-filen. Under [mysqld]
-delen legger du til følgende fire linjer:
log-bin server_id=1 replicate-do-db=employees bind-address=192.168.0.18
og start MariaDB på nytt:
# systemctl restart mariadb
TRINN 2: Logg på MariaDB-serveren som root, opprett brukerslaven og tildel de nødvendige tilskuddene:
MariaDB [(none)]> CREATE USER 'slave'@'localhost' IDENTIFIED BY 'SlavePassword'; MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO slave IDENTIFIED BY 'SlavePassword' WITH GRANT OPTION; MariaDB [(none)]> FLUSH PRIVILEGES; MariaDB [(none)]> FLUSH TABLES WITH READ LOCK; MariaDB [(none)]> SHOW MASTER STATUS;
Den siste kommandoen (SHOW MASTER STATUS) returnerer gjeldende posisjon i den binære loggen (de eksakte koordinatene som indikerer på nøyaktig hvilket tidspunkt slaven skal begynne å replikere fra:
TRINN 3: Avslutt MariaDB-ledeteksten (med exit;
) og bruk følgende kommando for å ta et øyeblikksbilde av ansattes database. Når du trykker Enter, vil du bli bedt om å skrive inn passordet for root du satte opp tidligere gjennom mysql_secure_installation
:
# mysqldump -u root -p employees > employees-dump.sql
Etter at dumpingen er fullført, kobler du til databaseserveren igjen for å låse opp tabellene og avslutter deretter:
MariaDB [(none)]> UNLOCK TABLES; MariaDB [(none)]> exit;
TRINN 4: Kopier dumpen til slaven:
# scp employees-dump.sql [email :/root/
TRINN 5: Kjør mysql_upgrade
-prosedyren for å oppgradere systemtabellene (du vil bli bedt om å angi MariaDB-rotpassordet):
# mysql_upgrade -u root -p
TRINN 6: Tillat databasetjenesten gjennom brannmuren:
# firewall-cmd --add-service=mysql # firewall-cmd --add-service=mysql --permanent # firewall-cmd --reload
La oss nå konfigurere slaven.
Konfigurere MySQL Server på Slave
Følg disse trinnene for å konfigurere slaven:
TRINN 1: Opprett kontoen for å utføre replikeringsoppgavene. Koble til den lokale MariaDB-serveren med:
# mysql -u root –p
og skriv inn passordet du konfigurerte tidligere.
TRINN 2: Når du er koblet til databaseserveren, oppretter du brukeren og en tom database, og gir tillatelser:
MariaDB [(none)]> CREATE DATABASE employees; MariaDB [(none)]> GRANT ALL PRIVILEGES ON employees.* TO 'slave'@'localhost' WITH GRANT OPTION; MariaDB [(none)]> FLUSH PRIVILEGES;
TRINN 3: Avslutt MariaDB-ledeteksten og last dumpen som er opprettet i hovedserveren:
# mysql -u root -p employees < employees-dump.sql
TRINN 4: Rediger /etc/my.cnf
-filen for å tilordne en server-ID til slaven under [mysqld]
-delen. Merk at det må være et annet heltall enn 1, da vi brukte 1 i masteren:
server_id=2 replicate-do-db=employees
Start databasetjeneren på nytt:
# systemctl restart mariadb
TRINN 5: Kjør mysql_upgrade
-prosedyren for å oppgradere systemtabellene (du vil bli bedt om å angi MariaDB-rotpassordet):
# mysql_upgrade -u root -p
TRINN 6: Når dumpen er importert til slaven, er vi bare noen få skritt for å begynne å replikere. Logg på databasen og kjør følgende kommandoer i MariaDB-ledeteksten. Vær spesielt oppmerksom på MASTER_LOG_FILE
- og MASTER_LOG_POS
-variablene, som skal samsvare med verdiene som returneres av SHOW MASTER STATUS i TRINN 2 av Konfigurere masteren ovenfor.
MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='192.168.0.18', MASTER_USER='slave', MASTER_PASSWORD='SlavePassword', MASTER_PORT=3306, MASTER_LOG_FILE='master-bin.000001', MASTER_LOG_POS=314, MASTER_CONNECT_RETRY=10, MASTER_USE_GTID=current_pos;
TRINN 7: Start slaven og sjekk statusen uten å gå ut av MariaDB-ledeteksten:
MariaDB [(none)]> START SLAVE; MariaDB [(none)]> SHOW SLAVE STATUS\G;
Ikke at du trenger dette nå, men merk at du kan stoppe slaven med:
MariaDB [(none)]> STOP SLAVE;
hvis kommandoen SHOW SLAVE STATUS\G;
returnerer noen feil. Bruk disse feilene til å feilsøke og kjør deretter START SLAVE;
for å teste på nytt.
Test MySQL/MariaDB-databasereplikering
La oss legge til en post i medarbeidertabellen i hovedserveren:
MariaDB [(none)]> INSERT INTO employees (emp_no, birth_date, first_name, last_name, gender, hire_date) VALUES (500000, '1983-07-12', 'Dave', 'Null', 'M', '2014-12-12');
Bekreft deretter at denne endringen ble replikert i slaven:
MariaDB [(none)]> USE employees; MariaDB [(none)]> SELECT * FROM employees WHERE emp_no=500000;
Som du kan se, fungerer replikering riktig fra master til slave.
Sammendrag
I denne artikkelen har vi forklart hvordan du installerer den nyeste versjonen av MariaDB i CentOS/RHEL 7 og Debian 8/9, og diskutert hvordan du setter opp master-slave-replikering med GTID-er. For mer informasjon kan det være lurt å se MariaDB Replication Guide, og ikke nøl med å kontakte oss ved å bruke skjemaet nedenfor hvis du har spørsmål eller kommentarer.