MySQL-Master-Slave-Replikation
MySQL-Video-TutorialDie Spalte stellt die Master-Slave-Replikation vor
Verwandte kostenlose Lernempfehlungen: MySQL-Video-Tutorial
Die Datenbankreplikation spielt eine sehr wichtige Rolle bei der Verbesserung der Hochverfügbarkeit und Leistung des Systems. Dieser Artikel enthält eine Zusammenfassung relevanter Kenntnisse zur MySQL-Master-Slave-Replikation. Wenn Sie in diesem Bereich arbeiten, hoffe ich, dass er für Sie hilfreich ist.
1 Hauptbibliothekskonfiguration
1.1 my.cnf-Konfiguration:
Nehmen Sie die folgende Grundkonfiguration in der Hauptbibliothekskonfigurationsdatei my.cnf vor:
log-bin = mysql-bin //二进制日志文件名称主体 log-bin-index = mysql-bin.index //二进制日志文件索引文件 server-id = 1 //唯一的服务器ID,为了保持唯一性,可以去ip的尾部 binlog-format = mixed //控制复制基于的方式,有基于语句(statement),基于行(row),混合(mixed),**主从库需要保持一致** #sync_binlog=1 //推荐配置,开启该选项,mysql每次在事务提交前会将二进制日志同步到磁盘上,保证在服务器崩溃时不会丢失事件。
Kopieren Sie standardmäßig alle Datenbanken siehe Abschnitt 7 (Kopierfilter).
比如说要指定db1和db2两个数据库进行主从复制: binlog-do-db = db1 binlog-do-db = db2
1.2 Replikationskonto hinzufügen:
Replikationskonto und Berechtigungseinstellungen hinzufügen:
mysql> grant replication slave, replicatin client on \*.\* to repl@'172.16.226.192' identified by 'repl123456'; //其中repl是用户名,repl123456为账户密码,172.16.226.168为备库的地址。 mysql> flush privileges; //在不重启mysql服务的情况下完成权限的更新
2 Standby-Datenbankkonfiguration
Nehmen Sie die folgende Grundkonfiguration in der Standby-Datenbank-Konfigurationsdatei my.cnf vor:
relay-log = slave-relay-bin //中继日志文件名称主体 relay-log-index = slave-relay-bin.index //中继日志文件索引文件 server-id = 2 //唯一的服务器ID,必须要异于主库 #read_only = 1 //限制备库为只读,可选 log_slave_updates = 1 //控制是否在中继日志执行之后,将同步过来的数据添加到自己的binlog中去,1代表是 skip_slave_start // 该选项能够阻止备库在崩溃后自动启动复制,建议开启 即使开启了建议的选项,备库仍然可能在崩溃后被中断,因为master.info和中级日志文件都不是崩溃安全的,所以建议开启一下选项: sync_master_info = 1 sync_relay_log = 1 sync_relay_log_info = 1
Sie können die Datenbank auch filtern Zu synchronisierende Dateien oder Tabellen finden Sie im Abschnitt Kopierfilterung.
3 Datenbank-Remote-Backup
Für die Datenbank-Remote-Sicherung können Sie mysqldump (logische Sicherung) für die Hot-Sicherung wählen, aber es wird langsamer, wenn die Datenmenge groß ist. Xtrabackup (physische Sicherung) kann auch eine Hot-Sicherung durchführen MySQL-Datenbank (hier wird Innobackupex verwendet) -1.5.1) Xtrabackup kann eine Online-Sicherung von Datenbanken wie InnoDB realisieren, die schnell ist und das normale Lesen und Schreiben nicht beeinträchtigt. Sichern Sie hier die gesamte Datenbank.
3.1 Erstellen Sie ein Sicherungskonto.
Erstellen Sie eine Benutzersicherung auf dem Hauptserver (verwenden Sie Mindestberechtigungen) für die Datenbanksicherung.
mysql> grant reload, lock tables, replication client on \*.\* to backup@'%' identified by 'backup123'; mysql> flush privileges; //在不重启mysql服务的情况下完成权限的更新
3.2 Vollständige Datenbanksicherung
Beide Schritte der vollständigen Sicherung und Wiederherstellungsvorbereitung werden auf dem Hauptdatenbankserver abgeschlossen.
innobackupex-1.5.1 --defaults-file=/etc/mysql/my.cnf --user=backup --password=backup123 /mysqlbackup --defaults-file:选择默认的配置文件 --user和--password:分别为进行备份的用户名和密码 /mysqlbackup:目标目录
3.3 Wiederherstellungsvorbereitung
Im Allgemeinen können die Daten nach Abschluss der Sicherung noch nicht für Wiederherstellungsvorgänge verwendet werden, da die gesicherten Daten möglicherweise nicht festgeschriebene Transaktionen oder Transaktionen enthalten, die festgeschrieben, aber noch nicht mit den Daten synchronisiert wurden Datei. Daher befinden sich die Datendateien derzeit immer noch in einem inkonsistenten Zustand. Die Hauptfunktion der „Vorbereitung“ besteht darin, die Datendateien in einen konsistenten Zustand zu versetzen, indem nicht festgeschriebene Transaktionen zurückgesetzt und festgeschriebene Transaktionen mit den Datendateien synchronisiert werden.
Mit der Option --apply-log des Befehls innobakupex können die oben genannten Funktionen implementiert werden. Zum Beispiel der folgende Befehl:
innobackupex-1.5.1 --apply-log --user=backup --password=backup123 /mysqlbackup/2017-01-11_21-20-57 如果执行正确,其最后输出的几行信息通常如下: xtrabackup: starting shutdown with innodb_fast_shutdown = 1 120407 9:01:36 InnoDB: Starting shutdown... 120407 9:01:40 InnoDB: Shutdown completed; log sequence number 92036620 120407 09:01:40 innobackupex: completed OK!
Beim Implementieren der „Vorbereitung“ kann innobackupex normalerweise auch die Option --use-memory verwenden, um die Größe des Speichers anzugeben, der verwendet werden kann. Der Standardwert beträgt normalerweise 100 MB. Wenn genügend Speicher verfügbar ist, können Sie dem Vorbereitungsprozess mehr Speicher zuweisen, um seine Abschlussgeschwindigkeit zu erhöhen.
3.4 Datenkopie
Kopieren Sie die auf dem Master-Server vorbereitete Datenbank auf den Slave-Server. (Natürlich können Sie auch packen und dann kopieren.) sowie die Sicherung. Der Speicherort der binären Protokollereignisse bis zu diesem Zeitpunkt. Wenn das Datenverzeichnis nicht leer ist, müssen Sie auch das Datenverzeichnis löschen.
Die Option --copy-back des Befehls innobackupex wird verwendet, um einen Wiederherstellungsvorgang durchzuführen. Der Wiederherstellungsprozess wird durchgeführt, indem alle datenbezogenen Dateien in das Datenverzeichnis des MySQL-Servers kopiert werden. innobackupex erhält relevante Informationen über das datadir-Verzeichnis über backup-my.cnf (Sie können das my.cnf-Verzeichnis auch über --defaults-file angeben und sicherstellen, dass der datadir-Pfad leer ist)
scp -r /mysqlbackup/ copyer@192.168.1.192:/data/
Bitte stellen Sie sicher, dass „innobackupex“ erscheint in der letzten Zeile der obigen Informationen: abgeschlossen OK!“. Nachdem die Daten im Datenverzeichnis wiederhergestellt wurden, müssen Sie sicherstellen, dass die Eigentümer und Gruppen aller Datendateien die richtigen Benutzer sind, z. B. MySQL. Andernfalls müssen Sie die Eigentümer und Gruppen der Datendateien ändern, bevor Sie beginnen mysqld. Zum Beispiel:
innobackupex-1.5.1 --copy-back /mysqlbackup 如果执行正确,其输出信息的最后几行通常如下: innobackupex: Starting to copy InnoDB log files innobackupex: in '/backup/2012-04-07_08-17-03' innobackupex: back to original InnoDB log directory '/mydata/data' innobackupex: Finished copying back files. 120407 09:36:10 innobackupex: completed OK!
chown -R mysql:mysql /var/lib/mysql/
service mysql start
Hinweis:
Wenn der Master- Slave-Verbindung ist hier nicht verbunden. Auf dem Master ist ein möglicher Grund, dass die Konfigurationsdatei my.cnf an den lokalen Computer gebunden ist, d. h. bind-address = 127.0.0.1. Andernfalls müssen wir sie nur auskommentieren Die externe Maschine kann nicht darauf zugreifen. Slave aktivieren:mysql> change master to master_host='192.168.1.208',master_user='repl', master_password='repl123456',master_log_file='mysql-bin.000001'(备份时得到的活动日志),master_log_pos=0(备份时得到的活动日志中事件的位置);
mysql> start slave;
mysql> show slave status; Slave_IO_Running: Yes //表示IO线程运行正常 Slave_SQL_Running: Yes //表示SQL线程运行正常 Seconds_Behind_Master: 0 //表示在网络条件较好的情况下,从库能够及时同步上主库
5 Die Verzögerung der Slave-Bibliothek ist groß
Wenn Sie feststellen, dass die Verzögerung der Slave-Bibliothek groß ist, müssen Sie den Grund für die große Verzögerung finden. Der Parameter innodb_flush_log_at_trx_commit hat einen größeren Einfluss auf die Schreibeffizienz von MySQL und hat drei Werte:
0:每隔一秒,把事务日志缓存区的数据写到日志文件中,以及把日志文件的数据刷新到磁盘上; 1:每个事务提交时候,把事务日志从缓存区写到日志文件中,并且刷新日志文件的数据到磁盘上; 2:每事务提交的时候,把事务日志数据从缓存区写到日志文件中;每隔一秒,刷新一次日志文件,但不一定刷新到磁盘上,而是取决于操作系统的调度;
取1时的IO耗费最大,虽然一致性和完整性方面效果最好,但是写入效率最低,而这也是导致从库延迟较大的原因(如果服务器配置较高或许会好些)。取0时mysql写入性能很好,但如果 mysqld 进程崩溃,通常会导致最后 1s 的日志丢失 。取2时的写入性能也很好,每次事务提交会写入日志文件,但并不会立即刷写到磁盘,日志文件会每秒刷写一次到磁盘。这时如果 mysqld 进程崩溃,由于日志已经写入到系统缓存,所以并不会丢失数据;在操作系统崩溃的情况下,通常会导致最后 1s 的日志丢失。
6 混合模式复制
正常情况下使用使用基于语句的复制,而对不安全的语句则切换到基于行的复制。主要有以下几种情况:
- 该语句调用了:
- UUID函数
- 用户自定义函数
- CURRENT_USER或USER函数
- LOAD_FILE函数
- 一个语句同时更新了两个或者两个以上含有AUTO_INCREMENT列的表
- 语句使用了服务器变量
- 存储引擎不允许使用基于语句的复制,例如,mysql cluster引擎
7 复制过滤
有时候我们不需要对数据库中所有的库进行复制,或者不想对指定库中的某些表进行复制操作,那么我们就需要对复制进行一定的过滤配置,以达到更合理的复制效果。
1. 基于master
**binlog-do-db=mysql**:主库只是将指定库(mysql)发生的变化记录到二进制日志中。 **binlog-ignore-db=mysql**:主库取消将指定库(mysql)发生的变化记录到二进制日志中。
2. 基于slave
针对数据库进行的过滤:
**replicate-do-db=mysql**:从库只是将指定库(mysql)发生的变化进行重现。 **replicate-ignore-db=mysql**:从库取消将指定库(mysql)发生的变化进行重现。 针对表进行的过滤: **replicate-wild_do-table=mysql.learn**:从库只是将指定库(mysql)中指定表(learn)发生的变化进行重现。 **replicate-wild_ignore-table=mysql.learn**:从库取消将指定库(mysql)中指定表(learn)发生的变化进行重现。
以上复制过滤方式乍一看没有问题,其实还是有需要注意的地方。因为这些过滤方式的效果与复制方式有关系。如果是基于语句的复制,binlog-do-db、binlog-ignore-db、replicate-do-db、replicate-ignore-db与跨库(如use库内和use外)有关系,这一点需要注意。
8 日志清理
暴力清理:(没有主从复制的情况下)
1、重启mysql服务器即可关闭bin日志的记录 2、通过reset master命令进行清理
条件清理
如果存在主从复制关系,则应当使用purge的方式来清理bin日志,语法如下:
purge {master|binary} logs to 'log_name' purge {master|binary} logs before 'date'
用户删除列于在指定的日志或日期之前的日志索引中的所有二进制日志,同时这些日志也会从日志索引文件的清单中删除。
eg. purge master logs to 'mysql-bin.000005'; purge master logs before '2014-08-30 00:00:00';//清除指定日期之前的日志 purge master logs before date_sub(now(),Interval 3 day);清除三天前的日志
定时清理
参数:expire_logs_days
说明:二进制日志自动删除/过期的天数。默认值为'0',即没有过期的
示例:expire_logs_days = 5,代表日志的有效时间为5天
什么时候会删除过期日志?
每次进行log flush的时候会自动删除过期的日志
什么时候会触发log flush?
1、重启 2、binlog文件的大小达到了最大限制 3、手动执行flush logs命令
写在最后
本文只是结合自己的学习以及实践过程进行了相关总结,如有不妥之处望您批评指正。推荐大家学习《高可用MYSQL》、《高性能MYSQL》两本书,最重要的还是实践实践再实践,欢迎交流,共同进步。
想了解更多编程学习,敬请关注php培训栏目!
Das obige ist der detaillierte Inhalt vonMySQL-Master-Slave-Replikation. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



MySQL ist ein Open Source Relational Database Management System. 1) Datenbank und Tabellen erstellen: Verwenden Sie die Befehle erstellte und creatEtable. 2) Grundlegende Vorgänge: Einfügen, aktualisieren, löschen und auswählen. 3) Fortgeschrittene Operationen: Join-, Unterabfrage- und Transaktionsverarbeitung. 4) Debugging -Fähigkeiten: Syntax, Datentyp und Berechtigungen überprüfen. 5) Optimierungsvorschläge: Verwenden Sie Indizes, vermeiden Sie ausgewählt* und verwenden Sie Transaktionen.

Sie können PhpMyAdmin in den folgenden Schritten öffnen: 1. Melden Sie sich beim Website -Bedienfeld an; 2. Finden und klicken Sie auf das Symbol phpmyadmin. 3. Geben Sie MySQL -Anmeldeinformationen ein; 4. Klicken Sie auf "Login".

MySQL ist ein Open Source Relational Database Management -System, das hauptsächlich zum schnellen und zuverlässigen Speicher und Abrufen von Daten verwendet wird. Sein Arbeitsprinzip umfasst Kundenanfragen, Abfragebedingungen, Ausführung von Abfragen und Rückgabergebnissen. Beispiele für die Nutzung sind das Erstellen von Tabellen, das Einsetzen und Abfragen von Daten sowie erweiterte Funktionen wie Join -Operationen. Häufige Fehler umfassen SQL -Syntax, Datentypen und Berechtigungen sowie Optimierungsvorschläge umfassen die Verwendung von Indizes, optimierte Abfragen und die Partitionierung von Tabellen.

MySQL wird für seine Leistung, Zuverlässigkeit, Benutzerfreundlichkeit und Unterstützung der Gemeinschaft ausgewählt. 1.MYSQL bietet effiziente Datenspeicher- und Abruffunktionen, die mehrere Datentypen und erweiterte Abfragevorgänge unterstützen. 2. Übernehmen Sie die Architektur der Client-Server und mehrere Speichermotoren, um die Transaktion und die Abfrageoptimierung zu unterstützen. 3. Einfach zu bedienend unterstützt eine Vielzahl von Betriebssystemen und Programmiersprachen. V.

Redis verwendet eine einzelne Gewindearchitektur, um hohe Leistung, Einfachheit und Konsistenz zu bieten. Es wird E/A-Multiplexing, Ereignisschleifen, nicht blockierende E/A und gemeinsame Speicher verwendet, um die Parallelität zu verbessern, jedoch mit Einschränkungen von Gleichzeitbeschränkungen, einem einzelnen Ausfallpunkt und ungeeigneter Schreib-intensiver Workloads.

Die Position von MySQL in Datenbanken und Programmierung ist sehr wichtig. Es handelt sich um ein Open -Source -Verwaltungssystem für relationale Datenbankverwaltung, das in verschiedenen Anwendungsszenarien häufig verwendet wird. 1) MySQL bietet effiziente Datenspeicher-, Organisations- und Abruffunktionen und unterstützt Systeme für Web-, Mobil- und Unternehmensebene. 2) Es verwendet eine Client-Server-Architektur, unterstützt mehrere Speichermotoren und Indexoptimierung. 3) Zu den grundlegenden Verwendungen gehören das Erstellen von Tabellen und das Einfügen von Daten, und erweiterte Verwendungen beinhalten Multi-Table-Verknüpfungen und komplexe Abfragen. 4) Häufig gestellte Fragen wie SQL -Syntaxfehler und Leistungsprobleme können durch den Befehl erklären und langsam abfragen. 5) Die Leistungsoptimierungsmethoden umfassen die rationale Verwendung von Indizes, eine optimierte Abfrage und die Verwendung von Caches. Zu den Best Practices gehört die Verwendung von Transaktionen und vorbereiteten Staten

MySQL und SQL sind wesentliche Fähigkeiten für Entwickler. 1.MYSQL ist ein Open -Source -Relational Database Management -System, und SQL ist die Standardsprache, die zum Verwalten und Betrieb von Datenbanken verwendet wird. 2.MYSQL unterstützt mehrere Speichermotoren durch effiziente Datenspeicher- und Abruffunktionen, und SQL vervollständigt komplexe Datenoperationen durch einfache Aussagen. 3. Beispiele für die Nutzung sind grundlegende Abfragen und fortgeschrittene Abfragen wie Filterung und Sortierung nach Zustand. 4. Häufige Fehler umfassen Syntaxfehler und Leistungsprobleme, die durch Überprüfung von SQL -Anweisungen und Verwendung von Erklärungsbefehlen optimiert werden können. 5. Leistungsoptimierungstechniken umfassen die Verwendung von Indizes, die Vermeidung vollständiger Tabellenscanning, Optimierung von Join -Operationen und Verbesserung der Code -Lesbarkeit.

Das Erstellen einer SQL -Datenbank umfasst 10 Schritte: Auswählen von DBMs; Installation von DBMs; Erstellen einer Datenbank; Erstellen einer Tabelle; Daten einfügen; Daten abrufen; Daten aktualisieren; Daten löschen; Benutzer verwalten; Sichern der Datenbank.
