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
1: Ich werde nicht näher auf die Installation von...
Auswählen und ändern: Klicken Sie, um den aktuell...
Inhaltsverzeichnis 1. Was ist SVN? 2. Methoden zu...
1. MySQL-Transaktionskonzept MySQL-Transaktionen ...
Warum wird NULL so oft verwendet? (1) Javas Null ...
Inhaltsverzeichnis Manuelle Sicherung Timer-Siche...
Zur Erinnerung: Egal ob bei der Planung, Gestaltun...
So löschen Sie den in Docker erstellten Container...
Inhaltsverzeichnis Was ist NULL Zwei Arten von NU...
1. RTMP Das RTMP-Streaming-Protokoll ist ein von ...
Grundkenntnisse der responsiven Layoutentwicklung...
Der Textarea-Tag ist ein HTML-Tag, den wir häufig ...
Die in HTML häufig verwendeten Escape-Zeichen wer...
Chinesisch-Tutorial https://www.ncnynl.com/catego...
Inhaltsverzeichnis Überblick Dateideskriptoren Sy...