Manchmal müssen wir möglicherweise Daten von einem MySQL-DB-Server automatisch auf einen oder mehrere MySQL-DB-Server replizieren. Grundsätzlich führen Datenbankadministratoren datenbankbezogene Aufgaben wie Replikation, Clustering und automatisches Failover durch. Die Verwaltung von MySQL-Datenbankservern und die Durchführung von Replikationsaufgaben liegen in der Verantwortung von Datenbankexperten. In diesem Artikel erfahren Sie, wie Sie die Master-Slave-MySQL-Datenbankreplikation in Ubuntu 20.04 einrichten. In diesem Artikel verwenden wir MySQL 8 für die Replikation.
Voraussetzungen
- Zwei Ubuntu-Server
- Root-privilegiertes Benutzerkonto
- Internetverbindung zum Herunterladen von Paketen
In diesem Beispiel werden die folgenden Server verwendet.
- Meister – 192.168.178.135
- Sklave – 192.168.178.137
Installieren Sie den MySQL 8-Server auf beiden Knoten
Die Installation von MySQL ist ein einfacher und unkomplizierter Vorgang. Im Ubuntu-System kann MySQL über das APT-Paket-Repository installiert werden. Aktualisieren Sie vor der Installation den Ubuntu-Paketindex mit dem folgenden Befehl.
$apt update
Installieren Sie das MySQL-Serverpaket mit dem folgenden Befehl.
$apt install mysql-server -y
Eine Neuinstallation des MySQL-Servers lässt ihn ungesichert. Führen Sie das Skript „mysql_secure_installation“ aus ” um einige der weniger sicheren Standardoptionen wie Remote-Root-Logins, Testdatenbank, Beispielbenutzer usw. zu ändern.
$ mysql_secure_installation
Starten und aktivieren Sie den MySQL-Dienst
$ systemctl start mysql
$ systemctl enable mysql
Master-DB-Server konfigurieren
Jetzt müssen wir einige Änderungen auf dem Masterserver für die Replikation vornehmen. Bearbeiten Sie die mysqld.conf Datei im Verzeichnis /etc/mysql/mysql.conf.d und fügen Sie die folgenden Zeilen hinzu. Denken Sie daran, die Konfigurationsvariablen unter [mysqld] hinzuzufügen Abschnitt.
$ vi /etc/mysql/mysql.conf.d/mysqld.conf
[mysqld] pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock datadir = /var/lib/mysql log-error = /var/log/mysql/error.log server-id = 1 log-bin = /var/log/mysql/mysql-bin.log tmpdir = /tmp binlog_format = ROW max_binlog_size = 800M sync_binlog = 1 expire-logs-days = 5 slow_query_log=1 slow_query_log_file=/var/lib/mysql/mysqld-slow.log
Wo:
- server-id – Eindeutige ID des MySQL-Servers. Diese ID kann in keinem Knoten im Cluster wiederverwendet werden.
- log-bin – Dies ist die Datei, in der alle Replikationsinformationen gespeichert werden.
- max_binlog_size – Größe der Binlog-Datei.
Kommentieren Sie außerdem die Bindungsadresse wie folgt:
#bind-address =127.0.0.1
Starten Sie den MySQL-Dienst neu
$systemctl restart mysql
Erstellen Sie einen neuen Benutzer für den Replikationsdienst auf dem Master-Knoten
Jetzt müssen wir einen Datenbankbenutzer in einem Master-Knoten erstellen, der von Slaves beim Verbinden verwendet wird. Melden Sie sich mit dem Root-Benutzer bei der Datenbank an und erstellen Sie den Benutzer.
$ mysql -u root -p
$ mysql> CREATE USER [email protected] IDENTIFIED BY '[email protected]';
Hinweis:Wenn Sie beim Erstellen des Benutzers eine IP-Adresse angeben, werden MySQL-Verbindungen nur vom angegebenen Host akzeptiert. Verbindungen von anderen Hosts werden abgelehnt. In diesem Beispiel habe ich die IP-Adresse meines MySQL-Slave-Servers verwendet. Möglicherweise müssen Sie diese IP-Adresse entsprechend Ihrer Umgebung ändern.
Der Benutzer benötigt REPLICATION SLAVE-Berechtigungen, um die MySQL-Daten replizieren zu können. Verwenden Sie die folgende Abfrage, um die Berechtigungen zu erteilen.
mysql> GRANT REPLICATION SLAVE on *.* to [email protected] ;
Überprüfen Sie die gewährten Berechtigungen mit der folgenden Abfrage.
mysql> SHOW GRANTS FOR [email protected];
Slave-DB-Knoten konfigurieren
Den MySQL-Server haben wir bereits im vorherigen Schritt installiert. Jetzt werden wir einige Konfigurationsdateien ändern, um den Replikationsprozess zu aktivieren. Bearbeiten Sie die mysqld.conf Datei unter /etc/mysql/mysql.conf.d Verzeichnis und fügen Sie die folgenden Inhalte hinzu.
$vi /etc/mysql/mysql.conf.d/mysqld.conf
Inhalt der Konfigurationsdatei:
[mysqld] log_bin = /var/log/mysql/mysql-bin.log server-id = 2 read_only = 1 tmpdir = /tmp binlog_format = ROW max_binlog_size = 800M sync_binlog = 1 expire-logs-days = 5 slow_query_log = 2
Wo,
- Server-ID – Eindeutige MySQL-Server-ID.
- read_only – Slave-Knoten wird in den Nur-Lese-Modus versetzt
- log_bin – Aktiviert die binäre Protokollierung im Slave-Knoten
- slow_query_log – Aktiviert das Log für langsame Abfragen
Kommentieren Sie auch die Bindeadresse aus.
# bind-address = 127.0.0.1
Starten Sie nun den MySQL-Dienst neu
$ systemctl restart mysql
Slave-Server mit Master-Server verbinden
Bevor Sie den Slave-Server konfigurieren, gehen Sie zum Master-Server und überprüfen Sie den Status.
$ mysql -u root -p
mysql> SHOW MASTER STATUS\G
Beachten Sie die folgenden Flags, die wir auf dem Slave-Server verwenden werden.
- Datei:mysql-bin.000002
- Position:156
Konfigurieren Sie nun die Parameter im Slave-Server, mit denen der Master-Server verbunden werden soll. Befolgen Sie die nachstehenden Schritte.
- Melden Sie sich mit Root-Anmeldeinformationen beim MySQL-Server an
$ mysql -u root -p
- Slave-Threads stoppen
mysql> STOP SLAVE;
- Richten Sie den Slave-Server ein, um den Master-Server zu replizieren
mysql> CHANGE MASTER TO MASTER_HOST='192.168.178.137', MASTER_USER='replication_user', MASTER_PASSWORD='[email protected]', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=1050;
Wo,
- 192.168.178.137 – IP-Adresse des Masterservers
- replication_user – MySQL-Benutzer des Masterservers
- Passwort – Kennwort des Replikationsbenutzers
- mysql-bin.000002 – Logfile des Masterservers
- 156 – Log-Position des Master-Servers
Aktivieren Sie nun den Slave-Server.
mysql> START SLAVE;
Überprüfen Sie den Slave-Status mit der folgenden Abfrage
mysql> SHOW SLAVE STATUS\G
Beachten Sie den Status des folgenden Flags.
- Slave_IO_Running:Verbinden
- Slave_IO_Running:Verbinden
Master-Slave-Replikation überprüfen
Master und Slave sind für die Replikation konfiguriert. Wir können überprüfen, ob die Master-Slave-Replikation funktioniert oder nicht. Melden Sie sich auf dem Master-Server bei der MySQL-Shell an und erstellen Sie eine Testdatenbank.
$ mysql -u root -p
mysql> CREATE DATABASE example_db;
Überprüfen Sie die erstellte Datenbank.
mysql> SHOW DATABASES;
Melden Sie sich jetzt beim Slave-Server an
$ mysql -u root -p
Führen Sie die folgende Abfrage aus, um die Datenbanken aufzulisten.
mysql> SHOW DATABASES;
Sie können sehen, dass die auf dem Master-Server erstellte Datenbank auf den Slave-Server repliziert wird.
Schlussfolgerung
In diesem Artikel haben wir gelernt, wie man MySQL-Master- und -Slave-Knoten unter Ubuntu 20.04 einrichtet. Sie können diesem Artikel folgen, um die Master-Slave-MySQL-Replikation auch auf Ubunutu 18.04 einzurichten.