GNU/Linux >> Znalost Linux >  >> Debian

Replikace hlavní databáze pomocí MariaDB 10 na Debian 8

Replikace databází vytváří redundanci, která může chránit před ztrátou dat a umožňuje optimalizovaný výkon aplikací. Tento tutoriál pokryje základy replikace existující hlavní databáze MariaDB 10.0 na jednoho nebo více podřízených. V následujících příkladech je hostitelským operačním systémem Debian 8.

Tyto pokyny lze použít pro jiné operační systémy, ale uvědomte si, že několik příkazů a výchozí umístění souborů se bude lišit. Konkrétně byste měli nahradit názvy cest /etc/mysql/my.cnf , /var/lib/mysql , výchozí název a cestu vašeho binárního souboru protokolu a příkazy pro spouštění, zastavování a restartování mysqld podle specifik vašeho systému.

1. Ověřte připojení

Než budete pokračovat, ujistěte se, že se master a slave mohou v síti navzájem spojit a že každý má pro toho druhého záznam ve svých příslušných /etc/hosts soubory. Každý hostitel by měl umět ping druhý a měli byste být schopni ssh od jednoho k druhému jako běžného uživatele.

2. Povolit binární protokol mysqld na hlavním serveru

Na hlavním hostiteli zkontrolujte, zda je povoleno binární protokolování. Vyvolání mysqld pomocí přepínačů --verbose --help zobrazí provozní hodnoty pro démona MariaDB. Jako root:

mysqld --verbose --help | grep log-bin
...
log-bin         (No default value)
...

Hodnota položky log-bin definuje konvenci pojmenování binárních souborů protokolu. V Debianu jsou tyto soubory umístěny v /var/lib . Pokud je hodnota log-bin je (žádná výchozí hodnota) , budete muset povolit protokolování úpravou konfiguračního souboru my.cnf . V Debianu my.cnf je umístěn v adresáři /etc/mysql .

Otevřete /etc/mysql/my.cnf v textovém editoru a vyhledejte [mysqld] skupina. Pokud neexistuje, vytvořte jej a zadejte řádek, který jednoduše zní log-bin .

[mysqld]
log-bin

Zahrnutím této položky povolíte binární protokolování při restartu mysqld.

Můžete nastavit hodnotu pro log-bin , např. log-bin=název souboru , k definování vlastního názvu pro binární soubor protokolu. V tomto tutoriálu nenastavíme hodnotu a použijí se výchozí názvy souborů protokolu.

Restartujte mysqld:

service mysql restart

Ověřte, že se změna projevila:

mysqld --verbose --help | grep log-bin
...
log-bin         mysqld-bin
...

Jak je zde ukázáno, výchozí název souboru binárního protokolu v Debianu začíná mysqld-bin , např. mysqld-bin.nnnnnn .

3. Udělte práva uživateli replikace

Je osvědčeným postupem nechat všechny úlohy replikace provádět vyhrazený uživatel replikace. V těchto příkladech pojmenujeme uživatele repluser a nastavte heslo tohoto uživatele na řetězec replpass .

Udělte tomuto uživateli globální oprávnění SUPER , ZNOVU NAČÍST a REPLICATION SLAVE . Ty umožní uživateli replikace spouštět příkazy superuživatele, vyprázdnit mezipaměť databáze a načítat aktualizace z hlavního serveru.

Zadejte klienta MariaDB jako kořen databáze:

mysql -u root -p

Na výzvu MariaDB zadejte příkaz:

GRANT SUPER, RELOAD, REPLICATION SLAVE ON *.* TO 'repluser'@'%' IDENTIFIED BY 'replpass';

Zde zástupný znak názvu hostitele '% ' umožňuje uživateli replikace připojit se z libovolného hostitele.

Ověřte, že byla udělena práva:

SHOW GRANTS FOR 'repluser'\G;

4. Vyprázdnění mezipaměti databáze a nastavení tabulek pouze pro čtení

V rámci přípravy na vytvoření snímku databází vyprázdněte všechny tabulky a nastavte je na READ LOCK . To by mělo být provedeno rychle, v době mimo špičku nebo v období údržby systému.

Na hlavní:

FLUSH TABLES WITH READ LOCK;

Nyní, když jsou tabulky uzamčeny, zkontrolujte hlavní stav:

ZOBRAZIT STAV HLAVNÍHO;

+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| mysqld-bin.000005 |      995 |              |                  |
+-------------------+----------+--------------+------------------+

Vaše informace se budou lišit, ale poznamenejte si hodnoty Soubor a Pozice . Tyto informace použijete v kroku 7.

Ukončete klienta MariaDB:

\q

5. Snímek databází pro podřízeného hostitele

Vytvořte archiv databáze nebo databází, které existují na hlavním serveru, který chcete replikovat. Každá z těchto databází má svůj vlastní adresář v /var/lib/mysql . V tomto příkladu budeme tarovat vytvořit jedinou databázi, která se nachází na cestě /var/lib/mysql/dbname .

Tento příkaz archivuje jednu databázi. Pokud archivujete další databáze, připojte k příkazu jejich úplné názvy, např. /var/lib/mysql/dbname1 /var/lib/mysql/dbname2 ...

tar cjvf /home/[username]/mysql-master.tar.bz2 /var/lib/mysql/dbname

Nyní jako normální uživatel uživatelské jméno , přeneste tento soubor do běžného uživatelského účtu na podřízeném hostiteli:

rsync -avP mysql-master.tar.bz2 [username]@slavehost:~/.

nebo pomocí scp:

scp mysql-master.tar.bz2 [username]@slavehost:~/.

Poté SSH na podřízeného hostitele:

ssh [username]@slavehost

Jako root zastavte mysqld na slave:

service mysql stop

...a rozbalte archiv:

tar xjvf /home/[username]/mysql-master.tar.bz2 -C /.

6. Nakonfigurujte ID serverů pro master a slave

Upravte /etc/mysql/my.cnf na hlavním serveru přidáním položky server-id=n v [mysqld] skupina, kde n je jedinečné celé číslo identifikující server. Obvykle n =1 pro hlavní server, ale n může být libovolné jedinečné celé číslo v rozsahu [1 , 2^32-1 ]. Náš hlavní server nastavíme na id-serveru=1 a náš otrok id serveru=100 .

(Pokud my.cnf na otroku neexistuje, vytvořte jej. Pokud existuje, vyhledejte existující ID serveru záznam a zrušte komentář/upravte tento řádek).

V /etc/mysql/my.cnf na hlavním hostiteli:

[mysqld]
server-id=1

V /etc/mysql/my.cnf na podřízeném hostiteli:

[mysqld]
server-id=100

7. Odemkněte tabulky a spusťte/restartujte mysqld na hlavním a podřízeném zařízení

Na hlavním serveru v klientovi MariaDB jako kořen databáze odemkněte tabulky:

mysql -u root -p
UNLOCK TABLES;
\q

Restartujte mysqld na hlavním serveru:

service mysql restart

A spusťte to na otroku:

service mysql start

Můžete ověřit, že nové ID serveru hodnota se projevila u každého hostitele. Jako root:

mysqld --verbose --help | grep server-id

8. Nakonfigurujte identitu master na slave

Na podřízeném serveru nakonfigurujte identitu hlavního serveru. Zadejte klienta MariaDB:

mysql -u root -p

Proveďte následující příkaz, kterým nahraďte hodnoty MASTER_LOG_FILE a MASTER_LOG_POS s binárním logem Soubor a Pozice které jste zaznamenali v kroku 4, a hodnoty MASTER_HOST , MASTER_USER a MASTER_PASSWORD se svými vlastními hodnotami.

CHANGE MASTER TO MASTER_HOST='masterhost', MASTER_USER='repluser', MASTER_PASSWORD='replpass', MASTER_LOG_FILE='mysqld-bin.000005', MASTER_LOG_POS=995;

9. Aktivovat slave

Na slave v klientovi MariaDB jako kořen databáze:

START SLAVE;

Nyní můžete zkontrolovat stav podřízeného:

SHOW SLAVE STATUS \G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: masterhost
                  Master_User: repluser
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysqld-bin.000009
          Read_Master_Log_Pos: 1330
               Relay_Log_File: mysqld-relay-bin.000008
                Relay_Log_Pos: 1618
        Relay_Master_Log_File: mysqld-bin.000009
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 1330
              Relay_Log_Space: 2204
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 1
               Master_SSL_Crl:
           Master_SSL_Crlpath:
                   Using_Gtid: No
                  Gtid_IO_Pos:

Pokud se v procesech replikace vyskytnou nějaké chyby, uvidíte je zde.

10. Proveďte změny na masteru a ověřte replikaci na slave

Probíhá replikace můžete ověřit vytvořením nové databáze na masteru a zobrazením změn na slave.

mysql -u root -p

Vytvořte novou databázi:

CREATE DATABASE repltest;
USE repltest

Vytvořte tabulku a vložte hodnotu:

CREATE TABLE test (hello VARCHAR(10));
INSERT INTO test VALUES ('world');
\q

Nyní zadejte klienta MariaDB na slave:

mysql -u root -p
USE repltest
SELECT * FROM test;
+-------+
| hello |
+-------+
| world |
+-------+
1 row in set (0.00 sec)

11. Opakujte proces pro další podřízené

Tento proces můžete opakovat pro každého dalšího slave. Konkrétně proveďte tyto kroky:

11 (a ). Na hlavním serveru v klientovi MariaDB jako kořenové, vyrovnávací a zamykací tabulky databáze:

FLUSH TABLES WITH READ LOCK;

Po uzamčení zobrazit hlavní stav:

SHOW MASTER STATUS;

Poznamenejte si Soubor a Pozice hodnoty.

11 (b ). Na hlavním serveru jako root:

tar cjvf /home/[username]/mysql-master.tar.bz2 /var/lib/mysql/dbname

11 (c ). Na hlavním serveru jako normální uživatel:

rsync -avP mysql-master.tar.bz2 [username]@slavehost2:~/.

11 (d ). Na slave jako root:

service mysql stop
tar xjvf /home/[username]/mysql-master.tar.bz2 -C /.

11 (e ). V /etc/mysql/my.cnf na podřízeném hostiteli přidejte nebo upravte server-id= řádku v [mysqld] group, kde je hodnota server-id je nový a jedinečný:

[mysqld]
server-id=200

11 (f ). Na hlavním serveru v klientovi MariaDB jako kořen databáze odemkněte tabulky:

UNLOCK TABLES;

11 (g ). Na hlavním serveru jako root restartujte mysqld:

service mysql restart

11 (h ). Na slave jako root spusťte mysqld:

service mysql start

11 (i ). Na podřízeném v klientovi MariaDB jako kořen databáze nakonfigurujte hlavní identitu a název souboru a pozici binárního protokolu z kroku 10(a):

CHANGE MASTER TO MASTER_HOST='masterhost', MASTER_USER='repluser', MASTER_PASSWORD='replpass', MASTER_LOG_FILE='mysqld-bin.nnnnnn’, MASTER_LOG_POS=n;

11 (j ). Na slave v klientovi MariaDB jako kořen databáze aktivujte replikaci:

START SLAVE;

12. Odstraňování problémů:Slave se nemůže připojit k master

Zkontrolujte /var/mysql/my.cnf na masteru pro bind-address vstup. Pokud bind-address je nastavena na 127.0.0.1 , server bude přijímat pouze připojení z localhost. Zakomentujte tento řádek nebo nastavte hodnotu na * povolit připojení ze všech adres IPv4 a IPv6. Pokud upravíte my.cnf , nezapomeňte restartovat mysqld.

Pokud připojení stále nefungují, ujistěte se, že váš server povoluje připojení na portu 3306 . Na hlavním serveru vypište tabulky brány firewall jádra:

iptables -L

Pomocí následujícího příkazu můžete vytvořit povolenou hodnotu pro připojení na portu 3306 a nahradit eth0 názvem zařízení vašeho síťového rozhraní. podle potřeby:

iptables -A INPUT -i eth0 -p tcp --destination-port 3306 -j ACCEPT


Debian
  1. Jak nastavit synchronní replikaci MariaDB Galera Multi-Master pomocí Debianu 10

  2. Jak nainstalovat MariaDB 10.x na Debian 11

  3. Debian – použití dvou displejů v Debianu?

  1. Jak nainstalovat MariaDB na Debian 9

  2. Jak nainstalovat MariaDB na Debian 10

  3. Jak nainstalovat PostgreSQL na Debian 10

  1. Jak nainstalovat MariaDB na Debian 11

  2. Nainstalujte nástroj Adminer Database Management Tool na Debian 10

  3. Jak nainstalovat NextCloud na Debian 10