Hintergrund Letzte Woche hat das Unternehmen eine Schulung zur MySQL-Replikation durchgeführt und dieses Wochenende habe ich vor, das Gelernte in die Praxis umzusetzen. Masterserver: MySQL-Container mysql_master auf NAS
Slave-Server: MySQK-Container mysql_slave auf Mac mini
Vorbereiten des MySQL-Containers Vorbereiten von mysql_master Erstellen Sie zwei Verzeichnisse zum Speichern von MySQL-Dateien mkdir -p /mnt/md1/disk4/mysql mkdir -p /mnt/md1/disk4/mysql-dateien Erstellen Sie einen Master-MySQL-Knoten zum Testen [root@TNAS-2664 disk4]# docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql_master -v /mnt/md1/disk4/mysql:/var/lib/mysql -v /mnt/md1/disk4/mysql-files:/var/lib/mysql-files mysql 3bebf0e21df6d9034ce8275b14ebb1616e11f5e2678b1e084d03c087ed91a72a Zeigen Sie die Container-ID von MySQL an, das aktuell auf dem NAS ausgeführt wird [root@TNAS-2664 ~]# Docker ps CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN 40db0be51460 mysql „docker-entrypoint…“ vor 44 Sekunden. 29 Sekunden aktiv. 33060/tcp, 0.0.0.0:3307->3306/tcp mysql_master db5f6a287a21 mautic/mautic "/entrypoint.sh ap..." vor 2 Wochen Seit 11 Tagen aktiv 0.0.0.0:8082->80/tcp mautic dc1eac509c70 qianliu/mediawikiwithcomposer „docker-php-entryp…“ vor 2 Wochen Seit 11 Tagen aktiv 0.0.0.0:8086->80/tcp sarawiki b5c0a00f5f42 mysql „docker-entrypoint…“ vor 2 Wochen Seit 11 Tagen aktiv 0.0.0.0:3306->3306/tcp, 33060/tcp mysql2 911c0a8987ba qianliu/mediawikiwithcomposer „docker-php-entryp…“ vor 2 Wochen 11 Tage aktiv 0.0.0.0:8083->80/tcp qianliuwiki Verwenden Sie den Befehl „Docker cp“, um my.cnf auf den Hostcomputer zu kopieren und Änderungen vorzunehmen docker cp 40db0be51460:/etc/mysql/my.cnf . Fügen Sie die folgende Konfiguration zu my.cnf hinzu Server-ID = 1 gtid-mode = ON # (von GTID repliziert) enforce_gtid_consistency =1 #(repliziert durch GTID) log-bin = Master-Protokoll binlog_format = gemischt Ablaufprotokolle in Tagen = 14 sync-binlog = 1 log-bin-trust-function-creators = 1 # MASTER-DB # binlog-ignore-db = mysql, Informationsschema, Leistungsschema, sys automatische Inkrementierung = 2 Auto-Inkrement-Offset = 1 # SLAVE-DB # replicate-ignore-db = mysql, Informationsschema, Leistungsschema, sys relay_log = Relay-Protokoll log-slave-updates = EIN Kopieren Sie my.cnf mit Docker CP in den mysql_master-Container. docker cp my.cnf 40db0be51460:/etc/mysql/ Geben Sie mysql_slave ein und stellen Sie fest, dass my.cnf aufgrund der Berechtigungsdatei ignoriert wird. Dies führt dazu, dass die gerade in my.cnf geschriebene Konfiguration nicht wirksam wird. [root@TNAS-2664 ~]# docker exec -it mysql_master /bin/bash root@40db0be51460:/#mysql -uroot -p123456 mysql: [Warnung] Die für alle beschreibbare Konfigurationsdatei „/etc/mysql/my.cnf“ wird ignoriert. mysql: [Warnung] Die Verwendung eines Passworts in der Befehlszeilenschnittstelle kann unsicher sein. Willkommen beim MySQL-Monitor. Befehle enden mit ; oder \g. Ändern Sie die Berechtigungen von my.cnf auf 664 root@40db0be51460:/# chmod 644 /etc/mysql/my.cnf root@40db0be51460:/# beenden Starten Sie mysql_slave neu, damit my.cnf wirksam wird [root@TNAS-2664 ~]# Docker startet mysql_master neu 9. Geben Sie mysql_master ein, um den Master-Status anzuzeigen mysql> Masterstatus anzeigen; +-------------------+----------+--------------+-------------------------------------------------+----------------------------------+ | Datei | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +-------------------+----------+--------------+-------------------------------------------------+----------------------------------+ | master-log.000001 | 156 | | mysql,Informationsschema,Leistungsschema,Sys | | +-------------------+----------+--------------+-------------------------------------------------+----------------------------------+ 1 Zeile im Satz (0,00 Sek.) mysql> beenden Bereiten Sie den mysql_slave-Container vor Erstellen Sie zwei Verzeichnisse auf dem Mac mini, um MySQL-Dateien zu speichern mkdir -p /Volumes/MacintoshHDD_Data/mysql_slave_db/mysql mkdir -p /Volumes/MacintoshHDD_Data/mysql_slave_db/mysql-files Erstellen Sie einen mysql_slave-Container zum Testen docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql_slave -v /Volumes/MacintoshHDD_Data/mysql_slave_db/mysql:/var/lib/mysql -v /Volumes/MacintoshHDD_Data/mysql_slave_db/mysql-files:/var/lib/mysql-files mysql Zeigen Sie die Container-ID von mysql_slave an, der derzeit auf dem Macmini ausgeführt wird /Volumes/MacintoshHDD_Data/mysql_slave_db docker ps CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN 8623ac99e5d4 mysql "docker-entrypoint.s…" vor 5 Sekunden Aktiv 4 Sekunden 33060/tcp, 0.0.0.0:3307->3306/tcp mysql_slave Verwenden Sie den Befehl „Docker cp“, um my.cnf auf den Hostcomputer zu kopieren und Änderungen vorzunehmen docker cp 8623ac99e5d4:/etc/mysql/my.cnf . Fügen Sie die folgende Konfiguration zu my.cnf hinzu Server-ID = 2 gtid-Modus = EIN enforce_gtid_consistency = 1 log-bin = Slave-Protokoll binlog_format = gemischt Ablaufprotokolle in Tagen = 14 sync-binlog = 1 log-bin-trust-function-creators = 1 # MASTER-DB # binlog-ignore-db = mysql, Informationsschema, Leistungsschema, sys automatische Inkrementierung = 2 automatischer Inkrement-Offset = 2 # SLAVE-DB # replicate-ignore-db = mysql, Informationsschema, Leistungsschema, Sys relay_log = Relay-Protokoll log-slave-updates = EIN Kopieren Sie my.cnf mit Docker CP in den mysql_master-Container. docker cp my.cnf 8623ac99e5d4:/etc/mysql/ Starten Sie mysql_slave neu, damit my.cnf wirksam wird Docker startet MySQL_Slave neu Geben Sie mysql_slave ein, um den Master-Status anzuzeigen mysql> Masterstatus anzeigen; +------------------+----------+--------------+-------------------------------------------------+------------------------------------------+ | Datei | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+-------------------------------------------------+------------------------------------------+ | slave-log.000001 | 1460 | | mysql,informationsschema,leistungsschema,sys | f102ae13-5341-11eb-a578-0242ac110002:1-5 | +------------------+----------+--------------+-------------------------------------------------+------------------------------------------+ 1 Zeile im Satz (0,00 Sek.) MySQL-Benutzer für die Replikation vorbereiten Bereiten Sie den MySQL-Benutzer für die Replikation in mysql_master vor mysql> ERSTELLEN SIE BENUTZER 'Slave'@'192.168.1.139' IDENTIFIZIERT DURCH 'Slave'; Abfrage OK, 0 Zeilen betroffen (0,59 Sek.) mysql> ERSTELLEN SIE BENUTZER 'Slave'@'172.17.0.2' IDENTIFIZIERT DURCH 'Slave'; Abfrage OK, 0 Zeilen betroffen (0,60 Sek.) mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'192.168.1.139'; Abfrage OK, 0 Zeilen betroffen (0,19 Sek.) mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'172.17.0.2'; Abfrage OK, 0 Zeilen betroffen (0,19 Sek.) mysql> Berechtigungen leeren; Abfrage OK, 0 Zeilen betroffen (0,10 Sek.) mysql> beenden Bereiten Sie den MySQL-Benutzer für die Replikation in mysql_slave vor mysql> ERSTELLEN SIE BENUTZER 'Slave'@'192.168.1.108' IDENTIFIZIERT DURCH 'Slave'; Abfrage OK, 0 Zeilen betroffen (0,02 Sek.) mysql> ERSTELLEN SIE BENUTZER 'Slave'@'172.17.0.6' IDENTIFIZIERT DURCH 'Slave'; Abfrage OK, 0 Zeilen betroffen (0,01 Sek.) mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'192.168.1.108'; Abfrage OK, 0 Zeilen betroffen (0,01 Sek.) mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'172.17.0.6'; Abfrage OK, 0 Zeilen betroffen (0,01 Sek.) mysql> Berechtigungen leeren; Abfrage OK, 0 Zeilen betroffen (0,00 Sek.) MySQL> Replikationskonfiguration Konfigurieren Sie mysql_master mysql> ändere Master in master_host='192.168.1.139',master_user='slave',master_password='slave',master_log_file='slave-log.000001',master_port=3307, master_log_pos=1460; Abfrage OK, 0 Zeilen betroffen, 2 Warnungen (1,17 Sek.) mysql> ändere Master in master_host='192.168.1.139',master_user='slave',master_password='slave',master_auto_position=1,get_master_public_key=1; Abfrage OK, 0 Zeilen betroffen, 2 Warnungen (0,45 Sek.) Konfigurieren Sie mysql_slave mysql> ändere Master in master_host='192.168.1.108',master_user='slave',master_password='slave',master_log_file='master-log.000001',master_port=3307, master_log_pos=156; Abfrage OK, 0 Zeilen betroffen, 2 Warnungen (0,15 Sek.) mysql> ändere Master in master_host='192.168.1.108',master_user='slave',master_password='slave',master_auto_position=1,get_master_public_key=1; Abfrage OK, 0 Zeilen betroffen, 2 Warnungen (0,14 Sek.) Aktivieren der Replikation Starten Sie den Slave auf mysql_master mysql> Slave starten; Abfrage OK, 0 Zeilen betroffen, 1 Warnung (0,00 Sek.) Beim Überprüfen des Slave-Status habe ich festgestellt, dass die Replikation nicht erfolgreich gestartet wurde. Es erscheint eine Fehlermeldung: Zugriff verweigert für Benutzer „Slave“@„172.17.0.1“ (mit Passwort: JA). Sie müssen den entsprechenden Benutzer und die entsprechenden Berechtigungen auf mysql_slave erstellen. mysql> Slave-Status anzeigen \G; *************************** 1. Reihe *************************** Slave_IO_State: Verbindung zum Master wird hergestellt Master_Host: 192.168.1.139 Master_User: Sklave Master_Port: 3307 Verbindungswiederholung: 60 Master_Log_Datei: Read_Master_Log_Pos: 4 Relay-Log-Datei: relay-log.000001 Relay_Log_Pos: 4 Relay_Master_Log_File: Slave_IO_Running: Verbindung wird hergestellt Slave_SQL_Running: Ja Replicate_Do_DB: Replicate_Ignore_DB: MySQL, Informationsschema, Leistungsschema, Sys Tabelle_replizieren: Tabelle_Ignorieren_replizieren: Wild_Do_Tabelle replizieren: Tabelle_Wild_Ignore_replizieren: Last_Errno: 0 Letzter_Fehler: Skip_Counter: 0 Exec_Master_Log_Pos: 0 Relay_Log_Space: 156 Until_Condition: Keine Bis_Log_Datei: Bis_Log_Pos: 0 Master_SSL_Allowed: Nein Master_SSL_CA_Datei: Master_SSL_CA_Pfad: Master_SSL_Zertifikat: Master_SSL_Chiffre: Master_SSL_Schlüssel: Sekunden_Hinter_Master: 0 Master_SSL_Verify_Server_Cert: Nein Last_IO_Errno: 1045 Last_IO_Error: Fehler beim Verbinden mit Master „[email protected]:3307“ – Wiederholungszeit: 60 Wiederholungen: 2 Meldung: Zugriff für Benutzer „Slave“@„172.17.0.1“ verweigert (mit Passwort: JA) Last_SQL_Errno: 0 Letzter_SQL_Fehler: Server-IDs replizieren_ignorieren: Master_Server_Id: 0 Master_UUID: Master_Info_Datei: mysql.slave_master_info SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Slave hat alle Relay-Logs gelesen; wartet auf weitere Updates Master_Retry_Count: 86400 Master_Bind: Letzter_IO_Error_Timestamp: 210110 13:02:12 Letzter_SQL_Fehler_Zeitstempel: Master_SSL_Crl: Master_SSL_Crlpfad: Abgerufenes_Gtid_Set: Ausgeführtes_Gtid_Set: Auto_Position: 1 DB replizieren_neu schreiben: Kanalname: Master_TLS_Version: Pfad des öffentlichen Masterschlüssels: Get_master_public_key: 1 Netzwerk-Namespace: 1 Zeile im Satz (0,01 Sek.) FEHLER: Keine Abfrage angegeben mysql> beenden mysql_slave startet den Slave und überprüft den Slave-Status, um sicherzustellen, dass alles normal ist. mysql> Slave-Status anzeigen; mysql> Slave-Status anzeigen\G; *************************** 1. Reihe *************************** Slave_IO_State: Wartet darauf, dass der Master ein Ereignis sendet Master_Host: 192.168.1.108 Master_User: Sklave Master_Port: 3307 Verbindungswiederholung: 60 Master_Log_Datei: master-log.000001 Read_Master_Log_Pos: 156 Relay-Log-Datei: relay-log.000002 Relay_Log_Pos: 373 Relay_Master_Log_File: master-log.000001 Slave_IO_Running: Ja Slave_SQL_Running: Ja Replicate_Do_DB: Replicate_Ignore_DB: MySQL, Informationsschema, Leistungsschema, Sys Tabelle_replizieren: Tabelle_Ignorieren_replizieren: Wild_Do_Tabelle replizieren: Tabelle_Wild_Ignore_replizieren: Last_Errno: 0 Letzter_Fehler: Skip_Counter: 0 Exec_Master_Log_Pos: 156 Relay_Log_Space: 576 Until_Condition: Keine Bis_Log_Datei: Bis_Log_Pos: 0 Master_SSL_Allowed: Nein Master_SSL_CA_Datei: Master_SSL_CA_Pfad: Master_SSL_Zertifikat: Master_SSL_Chiffre: Master_SSL_Schlüssel: Sekunden_Hinter_Master: 0 Master_SSL_Verify_Server_Cert: Nein Last_IO_Errno: 0 Letzter_E/A-Fehler: Last_SQL_Errno: 0 Letzter_SQL_Fehler: Server-IDs replizieren_ignorieren: Master_Server_Id: 1 Master_UUID: 9627309d-5341-11eb-aaa3-0242ac110006 Master_Info_Datei: mysql.slave_master_info SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Slave hat alle Relay-Logs gelesen; wartet auf weitere Updates Master_Retry_Count: 86400 Master_Bind: Zeitstempel des letzten IO-Fehlers: Letzter_SQL_Fehler_Zeitstempel: Master_SSL_Crl: Master_SSL_Crlpfad: Abgerufenes_Gtid_Set: Ausgeführtes_Gtid_Set: f102ae13-5341-11eb-a578-0242ac110002:1-5 Auto_Position: 1 DB replizieren_neu schreiben: Kanalname: Master_TLS_Version: Pfad des öffentlichen Masterschlüssels: Get_master_public_key: 1 Netzwerk-Namespace: 1 Zeile im Satz, 1 Warnung (0,01 Sek.) FEHLER: Keine Abfrage angegeben Erstellen Sie einen Benutzer auf mysql_slave mysql> ERSTELLEN SIE BENUTZER 'Slave'@'172.17.0.1' IDENTIFIZIERT DURCH 'Slave'; Abfrage OK, 0 Zeilen betroffen (0,01 Sek.) mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'172.17.0.1'; Abfrage OK, 0 Zeilen betroffen (0,00 Sek.) mysql> Berechtigungen leeren; Abfrage OK, 0 Zeilen betroffen (0,00 Sek.) Überprüfen Sie den Slave-Status auf mysql_master erneut, alles ist normal mysql> Slave-Status anzeigen \G; *************************** 1. Reihe *************************** Slave_IO_State: Wartet darauf, dass der Master ein Ereignis sendet Master_Host: 192.168.1.139 Master_User: Sklave Master_Port: 3307 Verbindungswiederholung: 60 Master_Log_Datei: slave-log.000001 Read_Master_Log_Pos: 2022 Relay-Log-Datei: relay-log.000002 Relay_Log_Pos: 2237 Relay_Master_Log_Datei: slave-log.000001 Slave_IO_Running: Ja Slave_SQL_Running: Ja Replicate_Do_DB: Replicate_Ignore_DB: MySQL, Informationsschema, Leistungsschema, Sys Tabelle_replizieren: Tabelle_Ignorieren_replizieren: Wild_Do_Tabelle replizieren: Tabelle_Wild_Ignore_replizieren: Last_Errno: 0 Letzter_Fehler: Skip_Counter: 0 Exec_Master_Log_Pos: 2022 Relay_Log_Space: 2440 Until_Condition: Keine Bis_Log_Datei: Bis_Log_Pos: 0 Master_SSL_Allowed: Nein Master_SSL_CA_Datei: Master_SSL_CA_Pfad: Master_SSL_Zertifikat: Master_SSL_Chiffre: Master_SSL_Schlüssel: Sekunden_Hinter_Master: 0 Master_SSL_Verify_Server_Cert: Nein Last_IO_Errno: 0 Letzter_E/A-Fehler: Last_SQL_Errno: 0 Letzter_SQL_Fehler: Server-IDs replizieren_ignorieren: Master_Server_Id: 2 Master_UUID: f102ae13-5341-11eb-a578-0242ac110002 Master_Info_Datei: mysql.slave_master_info SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Slave hat alle Relay-Logs gelesen; wartet auf weitere Updates Master_Retry_Count: 86400 Master_Bind: Zeitstempel des letzten IO-Fehlers: Letzter_SQL_Fehler_Zeitstempel: Master_SSL_Crl: Master_SSL_Crlpfad: Abgerufen_Gtid_Set: f102ae13-5341-11eb-a578-0242ac110002:1-7 Ausgeführtes_Gtid_Set: f102ae13-5341-11eb-a578-0242ac110002:1-7 Auto_Position: 1 DB replizieren_neu schreiben: Kanalname: Master_TLS_Version: Pfad des öffentlichen Masterschlüssels: Get_master_public_key: 1 Netzwerk-Namespace: 1 Zeile im Satz (0,01 Sek.) FEHLER: Keine Abfrage angegeben Testen der Replikation mysql> DATENBANK ERSTELLEN test_db_slave; Abfrage OK, 1 Zeile betroffen (0,01 Sek.) Erstellen Sie test_db_master auf mysql_master mysql> DATENBANK ERSTELLEN test_db_master; Abfrage OK, 1 Zeile betroffen (0,24 Sek.) Datenbanken auf mysql_slave anzeigen mysql> Datenbanken anzeigen; +--------------------+ | Datenbank | +--------------------+ | Informationsschema | |mysql | | Leistungsschema | |System| | test_db_master | | test_db_slave | +--------------------+ 6 Zeilen im Satz (0,00 Sek.) MySQL> Datenbanken auf mysql_master anzeigen mysql> Datenbanken anzeigen; +--------------------+ | Datenbank | +--------------------+ | Informationsschema | |mysql | | Leistungsschema | |System| | test_db_master | | test_db_slave | +--------------------+ 6 Zeilen im Satz (0,00 Sek.) MySQL> An diesem Punkt ist die MySQL-Replikationskonfiguration abgeschlossen. Dies ist das Ende dieses Artikels über die Replikationskonfiguration zwischen MySQL-Containern. Weitere Informationen zur Replikationskonfiguration von MySQL-Containern finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: HTML-Tabellen-Markup-Tutorial (14): Tabellenkopf
>>: Detaillierte Erklärung zur Verwendung von Tomcat Native zur Verbesserung der Tomcat IO-Effizienz
dig - Dienstprogramm zur DNS-Suche Wenn beim Zugr...
Mithilfe von Traceroute können wir den Pfad ermit...
Inhaltsverzeichnis 1. Filtern, Zuordnen und Reduz...
Inhaltsverzeichnis Vorwort 1. Verwenden Sie $attr...
Ein Index ist eine sortierte Datenstruktur! Die F...
1. Einleitung Ich habe zuvor einen Artikel geschr...
Inhaltsverzeichnis Was ist Rekursion und wie funk...
1. DOCTYPE ist unverzichtbar. Der Browser bestimm...
Inhaltsverzeichnis 1. Teilzeichenfolge () 2. subs...
Inhaltsverzeichnis Vorwort Requisiten Kontext Zus...
1. INSERT INTO SELECT-Anweisung Das Anweisungsfor...
Inhaltsverzeichnis Die Entstehung und Verwirrung ...
Während des täglichen Optimierungsprozesses stell...
Vorwort In JavaScript ist dies der Kontext zum Au...
In diesem Artikelbeispiel wird der spezifische Ja...