Ä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:
- Säkerhetskopiering kan göras på slavservern utan att påverka (och påverkas av) skrivoperationerna i mastern.
- 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.
- 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# mysqlKonfigurera 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.18och starta om MariaDB:
# systemctl starta om mariadbSTEG 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 genommysql_secure_installation
:# mysqldump -u root -p anställda> anställda-dump.sqlNä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 -pSTEG 6: Tillåt databastjänsten genom brandväggen:
# firewall-cmd --add-service=mysql# firewall-cmd --add-service=mysql --permanent# firewall-cmd --reloadLå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 –poch 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älldaSTEG 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älldaStarta om databasservern:
# systemctl starta om mariadbSTEG 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 -pSTEG 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
ochMASTER_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 sedanSTART 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.