Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So replizieren Sie die MySQL-Datenbank auf einen anderen Server

Mit MySQL Replication können Sie Datenbanken einfach von einem Server auf einen anderen kopieren. MySQL unterstützt verschiedene Arten der Replikation wie Master-Slave-, Master-Master- und Gruppenreplikation. MariaDB unterstützt auch die Multi-Master-Replikation. In diesem Artikel werden wir uns die Master-Slave-Replikation in MySQL ansehen und lernen, wie man eine MySQL-Datenbank unter Linux repliziert. Mit diesen Schritten können Sie die MySQL-Datenbank in Ubuntu, Debian, CentOS, Fedora, Red Hat und anderen Linux-Typen replizieren.


So replizieren Sie eine MySQL-Datenbank

Hier sind die Schritte zum Replizieren der MySQL-Datenbank. Für unser Setup benötigen wir eine Master-Datenbank (IP – 54.24.32.12) und eine Slave-Datenbank (IP – 45.12.21.23). Wir werden die Datenbank namens exampledb replizieren vom Meister zum Sklaven. Wir sind davon ausgegangen, dass Sie MySQL auf beiden Servern installiert haben und Root-Rechte für beide haben. Andernfalls können Sie MySQL mit dem folgenden Befehl installieren

$ sudo apt-get install mysql-server mysql-client

Bonuslektüre:Die besten MySQL-Workbench-Alternativen


1. Master-Konfigurationsdatei bearbeiten

Öffnen Sie das Terminal auf dem Server der Master-Datenbank und führen Sie den folgenden Befehl aus

$ sudo vi /etc/mysql/my.cnf

Standardmäßig sind Remote-Verbindungen in MySQL deaktiviert. Wir müssen eine Remote-Verbindung vom Slave zum Master für die Replikation zulassen. Daher kommentieren wir die folgenden zwei Zeilen aus, um Remote-Verbindungen zuzulassen, indem wir an ihrem Anfang # hinzufügen, wie unten gezeigt

#skip-networking
#bind-address=127.0.0.1

Fügen Sie die folgenden Zeilen im [mysqld]-Block hinzu oder kommentieren Sie sie aus, damit sie wie folgt aussehen.

[mysqld]
server-id=1
log-bin = /var/log/mysql/mysql-bin.log
binlog-do-db=exampledb

Schauen wir uns jede der obigen Zeilen an. Die erste Zeile server-id gibt eine eindeutige ID-Nummer für den Master an. Es muss eine positive Zahl zwischen 1 und 2^32 sein.

Logbuch gibt den Speicherort der Protokolldatei an, die von MySQL mit Details zur Replikation gefüllt wird.

binlog-do-db gibt den Namen der Datenbank an, die repliziert werden muss.

Starten Sie MySQL Server neu, um die Änderungen zu übernehmen

$ sudo service mysql restart

Melden Sie sich als Root-Benutzer bei MySQL an

$ sudo mysql -u root -p

und führen Sie den folgenden Befehl aus

mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      107 |   exampledb  |                  |
+------------------+----------+--------------+------------------+

Bitte beachten Sie die obigen Angaben, wir benötigen sie später in Schritt #3.

Bonuslektüre:So aktivieren Sie SSL/TLS in MySQL


2. Replikationsbenutzer erstellen

Melden Sie sich auf dem Master beim MySQL-Server an.

$ sudo mysql -u root -p

Sie werden nach dem Root-Passwort gefragt.

Nachdem Sie sich bei MySQL angemeldet haben, führen Sie die folgenden Befehle aus, um einen Remote-Benutzer slave_user zu erstellen , und erteilen Sie ihm Replikationsberechtigungen für alle Datenbanken. Bitte ersetzen Sie unten 45.12.21.23 durch die IP Ihres Slave-Servers und ersetzen Sie $password durch ein geeignetes Passwort gemäß Ihren Anforderungen.

mysql> CREATE USER slave_user@45.12.21.23; 
mysql> GRANT REPLICATION SLAVE ON *.* TO slave_user@45.12.21.23
       IDENTIFIED BY '$password';
mysql> FLUSH PRIVILEGES;

Bitte fügen Sie eine eingehende Firewall-Regel für Port 3306 hinzu und lassen Sie 45.12.21.23 zu. Dieser entfernte Benutzer muss sich mit der Master-Datenbank verbinden, damit die Replikation stattfinden kann.

Bonuslektüre:So ändern Sie die Sortierung aller Tabellen in MySQL


3. Slave-Konfigurationsdatei bearbeiten

Öffnen Sie das Terminal auf dem Server der Slave-Datenbank und führen Sie den folgenden Befehl aus

$ sudo vi /etc/mysql/my.cnf

Fügen Sie die folgenden Zeilen unter [mysqld] hinzu, um wie folgt auszusehen

[mysqld]
server-id = 2
relay-log = /var/log/mysql/mysql-relay-bin.log
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = exampledb

In der ersten Zeile weisen wir dem Slave-Server die Server-ID 2 zu. Die nächsten paar Zeilen geben Speicherorte von Relay-Log- und Replikations-Log-Dateien an. Die letzte Zeile gibt die zu replizierende Datenbank an.

Starten Sie MySQL Server neu und melden Sie sich bei MySQL an

$ sudo service mysql restart
$ sudo mysql -u root -p

Führen Sie die folgenden Befehle aus, um eine leere Datenbank auf dem Slave zu erstellen.

mysql> CREATE DATABASE exampledb; 
mysql> USE exampledb;

Daten aus der Master-Datenbank laden, um die Slave-Datenbank zu füllen

mysql> LOAD DATA FROM MASTER;

Beenden Sie MySQL.

Bonus-Lesung:Top-Datenbank-Blogs, denen Sie folgen sollten


4. Replikation initialisieren

Während Sie bei MySQL angemeldet sind, führen Sie die folgenden Befehle aus, um den Replikationsprozess zu starten. Teile fett ersetzen mit Ihren Werten.

mysql> SLAVE STOP;
mysql> CHANGE MASTER TO MASTER_HOST='54.24.32.12',
       MASTER_USER='slave_user', 
       MASTER_PASSWORD='<password>', 
       MASTER_LOG_FILE='mysql-bin.000001', 
       MASTER_LOG_POS=107;

MASTER_HOST – IP-Adresse oder Hostname des Masters (54.24.32.12).
MASTER_USER – Slave-Benutzer, den wir in Schritt 2 erstellt haben.
MASTER_PASSWORD – Passwort des Slave-Benutzers, den wir in Schritt #2 erstellt haben.
MASTER_LOG_FILE – Datei, die MySQL in Schritt 1 beim Ausführen zurückgegeben hat
MASTERSTATUS ANZEIGEN
MASTER_LOG_POS – Position, die MySQL zurückgegeben hat, als Sie SHOW MASTER STATUS in Schritt 1 ausgeführt haben

Schließlich starten wir den Slave, um mit der Replikation der MySQL-Datenbank zu beginnen.

mysql> START SLAVE;

Hoffentlich hilft Ihnen dieser Artikel beim Replizieren der MySQL-Datenbank.