sql >> Databasteknik >  >> RDS >> MariaDB

Hur man ställer in MariaDB (Master-Slave) replikering i CentOS/RHEL 7 och Debian 8/9

Även när vissa IT-personer hör frasen "Databasreplikering ", de associerar det ofta med behovet av att ha flera kopior av samma information för att undvika dataförlust i händelse av hårdvarufel eller datakorruption. Även om det i viss mån är sant, finns det mycket mer i databasreplikering än det vanliga konceptet att säkerhetskopiera en databas och datatillgänglighet.

Bland andra fördelar med databasreplikering i en master-slave-installation kan vi nämna:

  1. Säkerhetskopiering kan göras på slavservern utan att påverka (och påverkas av) skrivoperationerna i mastern.
  2. Resurskrävande operationer (som dataanalys) kan utföras på slaven utan att påverka masterns prestanda.

I den här artikeln kommer vi att förklara hur man ställer in master-slave replikering i MariaDB 10.1 . I motsats till klassisk replikering introducerade MariaDB konceptet Globala transaktions-ID:n (GTID ) i v10.0 , vilket gör det möjligt att enkelt ändra en slav för att ansluta till och replikera från en annan master. Utöver det registreras slavens tillstånd på ett kraschsäkert sätt (uppdateringar av tillståndet görs i samma transaktion som uppdateringarna av data).

Om du letar efter MySQL replikering under CentOS/RHEL 6 , följ den här guiden Konfigurera MySQL (Master-Slave)-replikering på CentOS/RHEL 6

Installation av MariaDB 10.1 i CentOS/RHEL 7 och Debian 8/9

Vår testmiljö består av följande maskiner (båda är CentOS 7). ):

Master:192.168.0.18Slav:192.168.0.19

För att installera den senaste versionen av MariaDB måste vi lägga till deras arkiv till våra servrar. Om du använder äldre version av MariaDB, t.ex. 5.5, överväg att uppgradera till den senaste versionen 10.1 med hjälp av artikeln nedan.

  1. Uppgradera MariaDB 5.5 till MariaDB 10.1

I CentOS/RHEL

Skapa en fil med namnet MariaDB.repo inuti /etc/yum.repos.d med följande innehåll på både Master och Slav system:

# MariaDB 10.1 CentOS repository list - skapad 2016-01-23 14:16 UTC# http://mariadb.org/mariadb/repositories/[mariadb]name =MariaDBbaseurl =http://yum.mariadb.org/ 10.1/centos7-amd64gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDBgpgcheck=1

Spara filen och installera MariaDB på båda servrarna med yum:

# yum update &&yum install MariaDB-server MariaDB-client

I Debian/Ubuntu

Lägg till nyckeln för att autentisera paket och MariaDB-förrådet:

# 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'

Obs :Ersätt distributionens namn och kodnamn i den markerade raden ovan.

Installera med apt-get kommando:

# apt-get update# apt-get install mariadb-server

När du har installerat MariaDB, kör mysql_secure_installation procedur på både master och slav, låt oss ställa in en exempeltestdatabas i mastermaskinen.

Konfigurera en exempel MySQL-databas på Master

Vi kommer nu att ställa in Employees i huvudservern databas från https://github.com/datacharmer/test_db (som ger en datauppsättning av 4 miljoner poster fördelade på sex tabeller) i två enkla steg:

Klona förvaret och använd det för att importera exempeldatabasen till din MariaDB-installation:

# git clone https://github.com/datacharmer/test_db# cd test_db# mysql  

Konfigurera MySQL Server på Master

För att konfigurera mastern, följ dessa steg:

STEG 1: Redigera /etc/my.cnf fil. Under [mysqld] lägg till följande fyra rader:

log-binserver_id=1replicate-do-db=employeesbind-address=192.168.0.18

och starta om MariaDB:

# systemctl starta om mariadb

STEG 2: Logga in på MariaDB-servern som root, skapa användarslaven och tilldela nödvändiga tillstånd:

MariaDB [(ingen)]> SKAPA ANVÄNDARE 'slave'@'localhost' IDENTIFIERAD AV 'SlavePassword';MariaDB [(ingen)]> BILJA REPLIKATIONSSLAV PÅ *.* TILL slav IDENTIFIERAD AV 'SlavePassword' MED BILJANDEALTERNATIV;MariaDB [(ingen)]> FLUSH PRIVILEGES;MariaDB [(inget)]> SPOLA BORD MED LÄSSLÅS;MariaDB [(inget)]> VISA MASTER STATUS;

Den sista kommando (VISA MASTERSTATUS ) returnerar den aktuella positionen i den binära loggen (de exakta koordinaterna som anger vid exakt vilken punkt slaven ska börja replikera från:

STEG 3: Avsluta MariaDB-prompten (med exit; ) och använd följande kommando för att ta en ögonblicksbild av personaldatabasen. När du trycker på Retur , kommer du att bli ombedd att ange lösenordet för root som du konfigurerade tidigare genom mysql_secure_installation :

# mysqldump -u root -p anställda> anställda-dump.sql

När dumpningen är klar ansluter du till databasservern igen för att låsa upp tabellerna och avslutar sedan:

MariaDB [(ingen)]> LÅS UPP TABELLER;MariaDB [(inget)]> avsluta;

STEG 4: Kopiera dumpen till slaven:

# scp anställda-dump.sql [email protected]:/root/ 

STEG 5: Kör mysql_upgrade procedur för att uppgradera systemtabellerna (du kommer att bli ombedd att ange MariaDB root-lösenordet):

# mysql_upgrade -u root -p

STEG 6: Tillåt databastjänsten genom brandväggen:

# firewall-cmd --add-service=mysql# firewall-cmd --add-service=mysql --permanent# firewall-cmd --reload

Låt oss nu konfigurera slaven.

Konfigurera MySQL Server på slav

Följ dessa steg för att konfigurera slaven:

STEG 1: Skapa kontot för att utföra replikeringsuppgifterna. Anslut till den lokala MariaDB-servern med:

# mysql -u root –p

och ange lösenordet du konfigurerade tidigare.

STEG 2: När du är ansluten till databasservern skapar du användaren och en tom databas och beviljar behörigheter:

MariaDB [(ingen)]> SKAPA DATABAS anställda;MariaDB [(ingen)]> GE ALLA PRIVILEGIER FÖR anställda.* TILL 'slave'@'localhost' MED BIDRAGSOPTION;MariaDB [(ingen)]> SPOLA PRIVILEGIER;

STEG 3: Avsluta MariaDB-prompten och ladda dumpen som skapats i huvudservern:

# mysql -u root -p anställda  

STEG 4: Redigera /etc/my.cnf fil för att tilldela ett server ID till slaven under [mysqld] sektion. Observera att det måste vara ett annat heltal än 1 , som vi använde 1 i mastern:

server_id=2replicate-do-db=anställda

Starta om databasservern:

# systemctl starta om mariadb

STEG 5: Kör mysql_upgrade procedur för att uppgradera systemtabellerna (du kommer att bli ombedd att ange MariaDB root-lösenordet):

# mysql_upgrade -u root -p

STEG 6: När soptippen väl har importerats till slaven är vi bara några få steg för att börja replikera. Logga in på databasen och kör följande kommandon i MariaDB-prompten. Var särskilt uppmärksam på MASTER_LOG_FILE och MASTER_LOG_POS variabler, som ska matcha värdena som returneras av VISA MASTERSTATUS i STEG 2 av "Konfigurera mastern" ovan.

MariaDB [(ingen)]> 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, MAREGT_COURT_current=314, MASTER_LOG_POS_=314; /pre> 

STEG 7: Starta slaven och kontrollera dess status utan att lämna MariaDB-prompten:

MariaDB [(ingen)]> STARTA SLAV;MariaDB [(ingen)]> VISA SLAVSTATUS\G;

Inte för att du behöver detta nu, men observera att du kan stoppa slaven med:

MariaDB [(ingen)]> STOPP SLAVA;

om SHOW SLAVE STATUS\G; kommandot returnerar eventuella fel. Använd dessa fel för att felsöka och kör sedan START SLAVE; för att testa igen.

Testa MySQL/MariaDB-databasreplikering

Låt oss lägga till en post för anställda tabell i huvudservern:

MariaDB [(ingen)]> INSERT INTO anställda (emp_nr, födelsedatum, förnamn, efternamn, kön, anställningsdatum) VÄRDEN (500000, '1983-07-12', 'Dave', 'Null', 'M', '2014-12-12');

Kontrollera sedan att denna ändring replikerades i slaven:

MariaDB [(ingen)]> USE-anställda;MariaDB [(ingen)]> VÄLJ * FRÅN anställda WHERE emp_no=500000;

Som du kan se fungerar replikeringen korrekt från master till slav.

Sammanfattning

I den här artikeln har vi förklarat hur du installerar den senaste versionen av MariaDB i CentOS/RHEL 7 och Debian 8/9, och diskuterade hur man ställer in master-slave replikering med GTID. För mer information, kanske du vill hänvisa till MariaDB Replication Guide, och tveka inte att kontakta oss genom att använda formuläret nedan om du har frågor eller kommentarer.


  1. Psycopg2 Infoga i tabell med platshållare

  2. Exportera Postgresql-tabelldata med pgAdmin

  3. oracle SQL hur man tar bort tid från datum

  4. SQL-fråga:Ta bort alla poster från tabellen utom senaste N?