GNU/Linux >> LINUX-Kenntnisse >  >> Debian

Replizieren einer Master-Datenbank mit MariaDB 10 auf Debian 8

Das Replizieren von Datenbanken schafft Redundanz, die vor Datenverlust schützen und eine optimierte Leistung für Anwendungen ermöglichen kann. Dieses Tutorial behandelt die Grundlagen der Replikation einer bestehenden MariaDB 10.0-Master-Datenbank auf einen oder mehrere Slaves. In den folgenden Beispielen ist das Host-Betriebssystem Debian 8.

Diese Anweisungen können auf andere Betriebssysteme angewendet werden, aber beachten Sie, dass einige Befehle und Standarddateispeicherorte anders sein werden. Insbesondere sollten Sie die Pfadnamen von /etc/mysql/my.cnf ersetzen , /var/lib/mysql , den Standardnamen und -pfad Ihrer binären Logdatei und die Befehle zum Starten, Stoppen und Neustarten von mysqld gemäß den Besonderheiten Ihres Systems.

1. Konnektivität überprüfen

Bevor Sie fortfahren, vergewissern Sie sich, dass der Master und der Slave sich gegenseitig im Netzwerk erreichen können und dass jeder einen Eintrag für den anderen in seiner jeweiligen /etc/hosts hat Dateien. Jeder Host sollte pingen können die andere, und Sie sollten ssh können als normaler Benutzer untereinander austauschen.

2. Aktivieren Sie das mysqld-Binärprotokoll auf dem Master

Überprüfen Sie auf dem Master-Host, ob die binäre Protokollierung aktiviert ist. Aufruf von mysqld mit den Schaltern --verbose --help zeigt Betriebswerte für den MariaDB-Daemon an. Als root:

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

Der Wert des Eintrags log-bin definiert die Namenskonvention der binären Protokolldateien. Unter Debian befinden sich diese Dateien in /var/lib . Wenn der Wert von log-bin ist (Kein Standardwert) müssen Sie die Protokollierung aktivieren, indem Sie die Konfigurationsdatei my.cnf ändern . Unter Debian my.cnf befindet sich im Verzeichnis /etc/mysql .

Öffnen Sie /etc/mysql/my.cnf in einem Texteditor und suchen Sie [mysqld] Gruppe. Wenn es nicht existiert, erstellen Sie es und geben Sie eine Zeile ein, die einfach log-bin lautet .

[mysqld]
log-bin

Das Einfügen dieses Eintrags aktiviert die binäre Protokollierung, wenn mysqld neu gestartet wird.

Sie können einen Wert für log-bin festlegen , z.B. log-bin=Dateiname , um einen benutzerdefinierten Namen für die binäre Protokolldatei zu definieren. In diesem Tutorial legen wir keinen Wert fest und es werden die standardmäßigen Protokolldateinamen verwendet.

Starten Sie mysqld neu:

service mysql restart

Überprüfen Sie, ob die Änderung wirksam wurde:

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

Wie hier gezeigt, beginnt der Standardname der binären Protokolldatei unter Debian mit mysqld-bin , z.B. mysqld-bin.nnnnnn .

3. Gewähren Sie einem Replikationsbenutzer Rechte

Es empfiehlt sich, alle Replikationsaufgaben von einem dedizierten Replikationsbenutzer ausführen zu lassen. In diesen Beispielen nennen wir den Benutzer repluser und setzen Sie das Passwort dieses Benutzers auf die Zeichenfolge replpass .

Gewähren Sie diesem Nutzer die globalen Berechtigungen SUPER , NACHLADEN , und REPLICATION SLAVE . Diese ermöglichen es dem Replikationsbenutzer, Superuser-Befehle auszuführen, Datenbank-Caches zu leeren und Aktualisierungen vom Master-Server abzurufen.

Geben Sie den MariaDB-Client als Datenbankstamm ein:

mysql -u root -p

Geben Sie an der MariaDB-Eingabeaufforderung den Befehl ein:

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

Hier wird der Hostname-Platzhalter '% ' ermöglicht dem Replikationsbenutzer, sich von jedem Host aus zu verbinden.

Überprüfen Sie, ob die Rechte gewährt wurden:

SHOW GRANTS FOR 'repluser'\G;

4. Leeren Sie Datenbank-Caches und setzen Sie Tabellen auf schreibgeschützt

Leeren Sie als Vorbereitung für die Erstellung eines Snapshots der Datenbanken alle Tabellen und setzen Sie sie auf READ LOCK . Dies sollte schnell erfolgen, außerhalb der Spitzenzeiten oder während einer Systemwartungsperiode.

Auf dem Master:

FLUSH TABLES WITH READ LOCK;

Nachdem die Tabellen nun gesperrt sind, prüfen Sie den Master-Status:

MASTERSTATUS ANZEIGEN;

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

Ihre Informationen werden anders sein, aber notieren Sie sich die Werte von Datei und Position . Sie verwenden diese Informationen in Schritt 7.

Verlassen Sie den MariaDB-Client:

\q

5. Snapshot-Datenbanken für den Slave-Host

Erstellen Sie ein Archiv der Datenbank oder der Datenbanken, die auf dem Master vorhanden sind, den Sie replizieren möchten. Jede dieser Datenbanken hat ihr eigenes Verzeichnis in /var/lib/mysql . In diesem Beispiel werden wir tarieren Erstellen Sie eine einzelne Datenbank, die sich im Pfad /var/lib/mysql/dbname befindet .

Dieser Befehl archiviert eine einzelne Datenbank. Wenn Sie weitere Datenbanken archivieren, hängen Sie deren vollständige Pfadnamen an den Befehl an, z. /var/lib/mysql/dbname1 /var/lib/mysql/dbname2 ...

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

Jetzt als normaler Benutzer username , übertragen Sie diese Datei auf ein normales Benutzerkonto auf dem Slave-Host:

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

oder mit scp:

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

Dann SSH zum Slave-Host:

ssh [username]@slavehost

Stoppen Sie als root mysqld auf dem Slave:

service mysql stop

...und das Archiv extrahieren:

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

6. Server-IDs für Master und Slave konfigurieren

Ändern Sie /etc/mysql/my.cnf auf dem Master den Eintrag server-id=n hinzufügen im [mysqld] Gruppe, wobei n ist eine eindeutige Ganzzahl, die den Server identifiziert. Üblicherweise n =1 für den Masterserver, aber n kann eine beliebige eindeutige Ganzzahl im Bereich [1 sein , 2^32-1 ]. Wir werden unseren Master auf server-id=1 setzen , und unser Slave zu server-id=100 .

(Falls my.cnf auf dem Slave nicht existiert, erstellen Sie es. Falls vorhanden, suchen Sie nach einer vorhandenen Server-ID Eintrag und kommentieren/bearbeiten Sie diese Zeile).

In /etc/mysql/my.cnf auf dem Master-Host:

[mysqld]
server-id=1

In /etc/mysql/my.cnf auf dem Slave-Host:

[mysqld]
server-id=100

7. Tabellen entsperren und mysqld auf Master und Slave starten/neu starten

Entsperren Sie auf dem Master-Server im MariaDB-Client als Datenbankstamm die Tabellen:

mysql -u root -p
UNLOCK TABLES;
\q

Starten Sie mysqld auf dem Master neu:

service mysql restart

Und starten Sie es auf dem Slave:

service mysql start

Sie können überprüfen, ob die neue Server-ID -Wert wurde auf jedem Host wirksam. Als root:

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

8. Konfigurieren Sie die Identität des Masters auf dem Slave

Konfigurieren Sie auf dem Slave die Identität des Master-Servers. Geben Sie den MariaDB-Client ein:

mysql -u root -p

Führen Sie den folgenden Befehl aus und ersetzen Sie die Werte von MASTER_LOG_FILE und MASTER_LOG_POS mit der Binärlog Datei und Position die Sie in Schritt 4 aufgezeichnet haben, und die Werte von MASTER_HOST ,MASTER_USER und MASTER_PASSWORD mit Ihren eigenen Werten.

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

9. Slave aktivieren

Auf dem Slave, im MariaDB-Client als Datenbank-Root:

START SLAVE;

Sie können jetzt den Status des Slaves überprüfen:

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:
pre> pre>

Wenn bei den Replikationsvorgängen Fehler auftreten, werden diese hier aufgelistet.

10. Nehmen Sie Änderungen auf dem Master vor und überprüfen Sie die Replikation auf dem Slave

Sie können überprüfen, ob die Replikation stattfindet, indem Sie eine neue Datenbank auf dem Master erstellen und die Änderungen auf dem Slave anzeigen.

mysql -u root -p

Erstellen Sie eine neue Datenbank:

CREATE DATABASE repltest;
USE repltest

Erstellen Sie eine Tabelle und fügen Sie einen Wert ein:

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

Geben Sie nun den MariaDB-Client auf dem Slave ein:

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

11. Vorgang für weitere Slaves wiederholen

Diesen Vorgang können Sie für jeden weiteren Slave wiederholen. Führen Sie insbesondere diese Schritte aus:

11 (ein ). Auf dem Master, im MariaDB-Client als Datenbank-Root, Flush- und Lock-Tabellen:

FLUSH TABLES WITH READ LOCK;

Nach dem Sperren Masterstatus anzeigen:

SHOW MASTER STATUS;

Notieren Sie sich die Datei und Position Werte.

11 (b ). Auf dem Master als root:

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

11 (c ). Auf dem Master als normaler Benutzer:

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

11 (d ). Auf dem Slave als root:

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

11 (e ). In /etc/mysql/my.cnf Fügen Sie auf dem Slave-Host die server-id= hinzu oder bearbeiten Sie sie Zeile in [mysqld] group, wobei der Wert von server-id ist neu und einzigartig:

[mysqld]
server-id=200

11 (f ). Entsperren Sie auf dem Master im MariaDB-Client als Datenbankstamm die Tabellen:

UNLOCK TABLES;

11 (g ). Starten Sie auf dem Master als root mysqld neu:

service mysql restart

11 (h ). Starten Sie auf dem Slave als root mysqld:

service mysql start

11 (ich ). Konfigurieren Sie auf dem Slave im MariaDB-Client als Datenbankstamm die Master-Identität und den Dateinamen und die Position des Binärprotokolls aus Schritt 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 ). Aktivieren Sie auf dem Slave im MariaDB-Client als Datenbank-Root die Replikation:

START SLAVE;

12. Fehlerbehebung:Slave kann sich nicht mit Master verbinden

Überprüfen Sie /var/mysql/my.cnf auf dem Master für eine Bind-Adresse Eintrag. Wenn Bindeadresse ist auf 127.0.0.1 eingestellt , akzeptiert der Server nur Verbindungen von localhost. Kommentieren Sie diese Zeile aus oder setzen Sie den Wert auf * um Verbindungen von allen IPv4- und IPv6-Adressen zuzulassen. Wenn Sie my.cnf ändern , vergessen Sie nicht, mysqld neu zu starten.

Wenn die Verbindungen immer noch nicht funktionieren, vergewissern Sie sich, dass Ihr Server Verbindungen auf Port 3306 zulässt . Listen Sie auf dem Master die Kernel-Firewall-Tabellen auf:

iptables -L

Sie können mit dem folgenden Befehl eine Erlaubnis für Verbindungen auf Port 3306 erstellen, indem Sie eth0 durch Ihren Netzwerkschnittstellen-Gerätenamen ersetzen nach Bedarf:

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


Debian
  1. So installieren Sie MariaDB unter Debian 9

  2. So installieren Sie MariaDB unter Debian 10

  3. So richten Sie die synchrone Multi-Master-Replikation von MariaDB Galera mit Debian 10 ein

  4. So installieren Sie MariaDB 10.x auf Debian 11

  5. Debian – Verwenden von zwei Displays unter Debian?

So installieren Sie OwnCloud 9 auf Debian 8

So installieren Sie WordPress unter Debian 8

So installieren Sie MariaDB unter Debian 8

So installieren Sie Nextcloud unter Debian 8

So installieren Sie OwnCloud unter Debian 9

So installieren Sie Joomla unter Debian 10