Koncept replikace databáze zajišťuje, že data jsou zkopírována přes více serverů z hlavního serveru. To zajišťuje redundanci dat a zajišťuje, že se data neztratí v případě selhání hlavního uzlu. V tomto článku se podíváme na replikaci MariaDB Master-Slave na CentOS 7. Ukážeme si, jak lze kopírovat data z databáze umístěné na hlavním uzlu do jiné databáze umístěné na systému Slave.
Scénář replikace MariaDB Master-Slave
Zde je nastavení replikace:
Master node (CentOS 7 64 bit) : IP 173.82.2.236
Slave node: (CentOS 7 64 bit) : IP 173.82.94.57
Krok 1:Nainstalujte MariaDB na uzel Master i Slave
Chcete-li začít, přihlaste se k hlavnímu i podřízenému uzlu a spusťte následující příkazy k instalaci serveru MariaDB
yum install mariadb-server mariadb
Ukázkový výstup
Spusťte službu MariaDB a povolte ji při spouštění
# systemctl start mariadb
# systemctl enable mariadb
Ukázkový výstup
Krok 2:Nastavte heslo MariaDB na Master i Slave
Ve výchozím nastavení je heslo pro MariaDB/MySQL obvykle prázdné a do databáze mají přístup neoprávnění uživatelé. Musíme to zajistit tak, že nakonfigurujeme heslo a zpevníme ho několika dalšími nastaveními. Chcete-li toho dosáhnout, spusťte níže uvedený příkaz na hlavním i podřízeném uzlu
mysql_secure_installation
Ukázkový výstup
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
Set root password? [Y/n] y ## Enter Y and press Enter
New password: ## Enter new password
Re-enter new password: ## Enter password again
Password updated successfully!
Reloading privilege tables..
... Success!
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] y ## Enter Y and press Enter
... Success!
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] y ## Enter Y and press Enter
... Success!
By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] y ## Enter Y and press Enter
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] y ## Enter Y and press Enter
... Success!
Cleaning up...
All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!
Krok 3:Konfigurace hlavního uzlu
Nyní, když jsme posílili naše instance MariaDB na obou uzlech, pojďme nakonfigurovat hlavní uzel.
Nejprve musíme povolit port 3306 MariaDB přes firewall CentOS 7. Chcete-li to provést, spusťte příkazy
# firewall-cmd --add-port=3306/tcp --zone=public --permanent
Ukázkový výstup
Znovu načtěte firewall, aby se změny projevily
# firewall-cmd --relaod
Ukázkový výstup
Dále proveďte několik změn v souboru /etc/my.cnf
soubor
vim /etc/my.cnf
připojte následující řádky do [mysqld] sekce
[mysqld]
server_id=1
log-basename=master
log-bin
binlog-format=row
binlog-do-db=replica_db
[...]
Zde replika_db je databáze, kterou se chystáme vytvořit a replikovat ji přes slave.
Dále restartujte službu MariaDB pomocí příkazu:
systemctl restart mariadb
Nyní se přihlásíme do MariaDB jako uživatel root:
mysql -u root -p
Dalším krokem bude vytvoření replika_db databáze
MariaDB [(none)]> CREATE DATABASE replica_db;
Dále vytvořte uživatele a heslo Slave. Použijeme například slave_user jako uživatelské jméno Slave a P@ssword100 jako heslo:
MariaDB [(none)]> STOP SLAVE;
Query OK, 0 rows affected, 1 warning (0.00 sec)
MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'P@ssword100';
Query OK, 0 rows affected (0.00 sec)
Dále vyprázdněte oprávnění podle obrázku
MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.00 sec)
Dále spusťte níže uvedený příkaz a zobrazte hlavní stav
SHOW MASTER STATUS;
Krok 4:Zálohování databáze na hlavním serveru a její přenos na Slave
Dále spusťte níže uvedený příkaz pro zálohování všech hlavních databází
# mysqldump --all-databases --user=root --password --master-data > masterdatabase.sql
Tím se vytvoří soubor s názvemmasterdatabase.sql ve vašem aktuálním pracovním adresáři.
Znovu se přihlaste do MySQL jako uživatel root:
mysql -u root -p
A odemkněte stoly:
MariaDB [(none)]> UNLOCK TABLES;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> quit
Bye
Nyní zkopírujte masterdatabase.sql soubor na váš Slave server.
Příkaz tedy bude:
scp masterdatabase.sql [email protected]:/home
Pamatujte prosím, že 173.82.94.57 je náš podřízený server MariaDB.
Krok 4:Konfigurace MariaDB Slave
Nyní je čas nakonfigurovat uzel MariaDB Slave
Upravte soubor /etc/my.cnf
soubor
vim /etc/my.cnf
Připojte následující položky pod [mysqld] sekce, jak je znázorněno
[mysqld]
server-id = 2
replicate-do-db=replica_db
[...]
Replika_db je zde databáze vytvořená v uzlu hlavního serveru. Také mějte na paměti, že pro hlavní i podřízené servery použijete různé ID serveru. V tomto případě je server-id 2
Uložte a ukončete soubor.
Dále budeme importovat hlavní databázi, jak je znázorněno
mysql -u root -p < /home/masterdatabase.sql
Mějte na paměti, že jsme již zkopírovali soubor masterdatabase.sql z hlavního serveru do adresáře /home/ podřízeného serveru.
Restartujte službu MariaDB, aby se změny projevily.
systemctl restart mariadb
Nyní se přihlaste do MariaDB jako uživatel root
mysql -u root -p
Zastavte otroka. Řekněte Slave, kde má najít soubor Master Log a spustit Slave.
MariaDB [(none)]> STOP SLAVE;
MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='173.82.2.236', MASTER_USER='slave_user', MASTER_PASSWORD='P@ssword100', MASTER_LOG_FILE='mariadb-bin.000001', MASTER_LOG_POS=473;
Query OK, 0 rows affected (0.03 sec)
MariaDB [(none)]> STOP SLAVE;
Query OK, 0 rows affected (0.01 sec)
Dále spusťte níže uvedený příkaz a zobrazte stav Slave
MariaDB [(none)]> SHOW SLAVE STATUS\G;
Testování replikace MariaDB
Hlavní strana:
Vydejte se na svůj hlavní server MariaDB a přihlaste se k instanci MariaDB pomocí příkazu, jak je znázorněno
mysql -u root -p
Vytvořte databázi replica_db
Dále vytvořte tabulku Persons
Přidejte záznam podle obrázku
Nakonec zobrazte tabulku
Podřízená strana:
Nyní se přihlaste k instanci databáze MariaDB na Slave serveru
mysql -u root -p
Dále zobrazte databáze pomocí příkazu níže
SHOW DATABASES;
Jak můžete vidět, replica_db databáze je přítomna, což znamená, že byla replikována !
Pokračujme a prozkoumáme databázi a zkontrolujeme, zda jsou přítomny nějaké tabulky. Spustit
use replica_db;
Potom
show tables;
Jak vidíte, tabulka Osoby je přítomen dříve vytvořený v hlavním uzlu. Perfektní!
Odhalme jeho záznamy, abychom si byli zcela jisti, že naše databáze byla plně replikována
select *from replica_db;
Jak bylo zjištěno, veškerý obsah byl replikován a je přesný. Jen tak dál!
V tomto článku jste se naučili, jak nastavit replikaci MariaDB Master-Slave na CentOS 7. Vyzkoušejte to a neváhejte.