Takto jsem nakonfiguroval replikaci Master-Slave s MariaDB. Protože MariaDB je fork MySQL, měli byste postupovat podle stejných kroků.
Moje nastavení
Předpokládám, že již máte spuštěny dva servery Maria/MySQL. To jsou moje vlastnosti:
- OS:Testování Debianu ‚Bookworm‘
- Verze MariaDB:10.5.12
Pracuji se dvěma virtuálními stroji, abych vytvořil slave, duplikoval jsem hlavní vm.
- Hlavní:192.168.122.13
- Slave:192.168.122.223
Pokud nemáte databázi maria nebo mysql, zde na unixcopu máme několik tutoriálů, také zde, zde nebo zde.
Mistr
Jak jsem již řekl dříve, předpokládám, že již máte spuštěnou marii nebo mysql. Musíme provést nějakou konfiguraci na hlavním a potom na podřízeném hostiteli.
Upravit /etc/mysql/mariadb.conf.d/50-server.cnf
(nebo příslušný soubor ve vašem nastavení) a změňte následující řádky:
bind-address = <your.master.host.ip> server-id=1
Restartujte MariaDB a vytvořte uživatele s oprávněními pro replikaci:
MariaDB [(none)]> CREATE USER 'esclavo'@'192.168.122.223' IDENTIFIED BY 'SlavePass' ; MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO 'esclavo'@'192.168.122.223'; MariaDB [(none)]> FLUSH PRIVILEGES; MariaDB [(none)]> FLUSH TABLES WITH READ LOCK;
Zvolte libovolné uživatelské jméno a heslo, esclavo znamená otrok na španělštině. Nastavte IP adresu svého otroka MariaDB. Dále můžete vidět stav pomocí SHOW MASTER STATUS.
Posledním krokem (téměř se vrátíme později) na hlavním serveru je zkopírovat všechna data z hlavního serveru na podřízený. Vytvořme výpis pomocí:
root@my1:~# mysqldump -u root --all-databases -p --master-data > data.sql
Slave
Na podřízeném serveru nejprve změňte konfigurační soubor /etc/mysql/mariadb.conf.d/50-server.cnf
ve stejných řádcích jako hlavní:
bind-address = <your.slave.host.ip> server-id=1
Restartujte MariaDB a načtěte výpis z hlavního serveru pomocí:
root@my2:/home/gonz# mysql -uroot < data.sql
Poté zastavte slave, nastavte hlavního hostitele a spusťte slave pomocí následujících příkazů:
root@my2:/home/gonz# mysql Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 41 Server version: 10.5.12-MariaDB-1-log Debian 11 Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> stop slave; MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='192.168.122.13', MASTER_USER='esclavo',MASTER_PASSWORD='SlavePass'; MariaDB [(none)]> START SLAVE;
Pokud tyto příkazy pouze kopírujete a vkládáte, nezapomeňte změnit IP hostitele, uživatele a heslo na své hodnoty.
Testování a opravy
To by mělo stačit. Pokud vše funguje podle očekávání, měli byste mít replikaci master-slave s MariaDB.
Nyní můžete vytvořit databázi na masteru a tato databáze by se měla automaticky objevit v slave. Ale nefungovalo to pro mě. Vytvořil jsem databázi na hlavním serveru pomocí:
MariaDB [(none)]> CREATE DATABASE somedatabase;
A nebylo to replikováno na otroka. Abych zjistil proč, spustil jsem podřízený server:
MariaDB [(none)]> show slave status\G ;
Když jsem tuto chybu vygoogloval, navrhli vypustit uživatele esclavo a flush oprávnění. Toto na podřízeném serveru také zastavte podřízený před vyřazením uživatele a spusťte podřízený po vyprázdnění oprávnění:
MariaDB [(none)]> stop slave; MariaDB [(none)]> drop user 'esclavo'@'192.168.122.223'; MariaDB [(none)]> flush privileges; MariaDB [(none)]> start slave;
A toto je opraveno, jak můžete vidět na snímku obrazovky, nyní je na podřízeném serveru nějaká databáze databáze. A je prázdný. Potom jsem se vrátil k hlavnímu serveru, abych vytvořil tabulku a naplnil ji daty:
Posledním krokem je zkontrolovat na slave, zda byla tabulka vytvořena a jsou uvnitř data:
Pro jistotu můžete stav slave zkontrolovat ještě jednou (nebo kdykoli jindy v budoucnu, pokud se zdá, že něco není v pořádku).
A nakonec jsem nastavil replikaci master-slave pomocí MariaDB.