Im Moment kann ich die Sicherung mit mysqldump durchführen. Aber ich muss den Webserver herunterfahren UND es dauert ungefähr 5 Minuten, um die Sicherung durchzuführen. Wenn ich den Webserver nicht herunterfahre, dauert es ewig und wird nie beendet. Während des Backups kann nicht mehr auf die Website zugegriffen werden.
Gibt es eine schnellere / bessere Möglichkeit zum Sichern meiner 22 GB großen und wachsenden Datenbank?
Alle Tabellen sind MyISAM.
Antworten:
Ja.
Richten Sie die Replikation auf einem zweiten Computer ein. Wenn Sie eine Sicherung durchführen müssen, können Sie den sekundären Computer sperren, mysqlhotcopy oder mysqldump ausführen und dann entsperren. Es holt Ihren Master wieder ein und Sie müssen den Master nie offline schalten.
Sie können dies sogar auf demselben Computer ausführen, wenn Sie nichts dagegen haben, die Schreib-E / A zu verdoppeln. Idealerweise sollten Sie sie jedoch in Echtzeit auf einem zweiten physischen Server sichern und Ihre Snapshot-Backups so oft erstellen, wie Sie möchten ohne Ihren Produktionsserver zu stören.
Es ist theoretisch auch möglich, eine Datenbank mit einem bekannten Status und Binlogs wiederherzustellen. Ich habe es noch nie getan, bitte untersuchen Sie es zuerst, aber Sie könnten einen bekannten Status Ihrer Datenbank sichern, dann einfach alle neuen Binlogs sichern und sie wiedergeben, falls Sie jemals eine Wiederherstellung benötigen. Da Binlogs linear geschrieben werden, ist das Synchronisieren neuer Binlogs mit einem Remotecomputer sehr schnell.
Bearbeiten: In der Tat sieht es so aus, als ob die Verwendung von Binlogs für die Sicherung dokumentiert ist.
Diese Frage ist sehr verwandt
quelle
Verzeihen Sie mir, dass ich davon ausgehe, dass das Betriebssystem Linux ist. Wenn Sie LVM nicht verwenden, sollten Sie dies tun. Wenn ja, ist dies eine sehr einfache Möglichkeit, Backups per Snapshot zu erstellen.
Auf diese Weise können Sie nächtliche Sicherungen durchführen, ohne einen Slave-Server hinzufügen zu müssen. Ich bin sehr dafür, einen Slave-Server für Hochverfügbarkeit zu haben, aber ich möchte nicht, dass Sie glauben, dass Sie nicht weiterkommen, bis Sie diesen Slave erstellen können.
quelle
SPÜLTISCHE MIT LESESPERRE ist etwas, das Sie nicht regelmäßig (oder sogar halb regelmäßig) in einem Produktionssystem ausführen möchten. Es sollte nur ein letzter Ausweg sein.
Richten Sie mindestens zwei Replikations-Slaves ein (hierfür sind natürlich FLUSH TABLES WITH READ LOCK erforderlich). Sobald sie eingerichtet sind, können Sie eine Sicherung entfernen, während die andere als Ersatzmaster synchronisiert bleibt.
Wenn einer Ihrer Slaves ausfällt, können Sie einen Snapshot daraus verwenden, um einen zweiten (oder dritten) Slave wiederherzustellen. Wenn alle Ihre Slaves ausfallen, kehren Sie zu FLUSH TABLES WITH READ LOCK zurück.
Denken Sie daran, immer einen Prozess zu haben, der regelmäßig prüft, ob die Daten synchron sind. Verwenden Sie dazu so etwas wie mk-table-checksum.
Da 22 GB relativ klein sind, werden Sie keine Probleme damit haben. Dies mit einer großen Datenbank zu tun, könnte problematischer sein.
quelle
Die Lösung hier ist zweifach, wie oben beschrieben:
Beachten Sie, dass Sie, wenn Sie InnoDB für Ihre Tabellen verwenden, das Flag --single-transaction verwenden können, um zu vermeiden, dass Tabellensperren durchgeführt werden müssen, und trotzdem einen konsistenten Speicherauszug der Datenbank zu erhalten, auch auf dem Master, und damit Ihre Sicherungen ohne Server ausschalten. Die obige Lösung ist jedoch eine bessere.
Wenn Sie LVM unter Linux verwenden, können Sie auch einen LVM-Snapshot der Partition erstellen und diese anschließend sichern. LVM-Snapshots sind atomar. Wenn Sie also Tabellen mit Lesesperre leeren und anschließend Ihren Snapshot erstellen und entsperren, erhalten Sie einen konsistenten Snapshot.
Wenn Sie Bedenken haben, dass E / A-Konflikte dazu führen könnten, dass der Speicherauszug zu lange dauert, können Sie einen dritten Computer hinzufügen und mysqldump auf diesem Computer über das Netzwerk ausführen, um eine Überlastung Ihrer Festplatten zu vermeiden.
quelle
Abhängig von Ihrer Umgebung sind Schnappschüsse normalerweise ein hervorragender Weg. Insbesondere, wenn Sie den Master aus irgendeinem Grund sichern müssen. Wir führen Master- und Slave-Paare aus und verwenden auf beiden Snapshot-Backups.
FLUSH TABLES WITH READ LOCK;
UNLOCK TABLES;
Bei InnoDB-Tabellen sollten Sie ausführen,
SET AUTOCOMMIT=0;
bevor Sie die Lesesperre ausführen.quelle
Schauen Sie sich " Best Practice für das Sichern einer MySQL-Produktionsdatenbank " an. Es ist ein ähnlicher Beitrag zum Stack Overflow.
quelle
Sie könnten eine schrittweise Sicherung durchführen. Sichern Sie stündlich 1/24 der Datensätze. Das einzige Problem bei diesem Ansatz ist, dass Sie von diesem Zeitpunkt bis zum Zeitpunkt des Absturzes nichts verlieren, wenn er in den ersten Stunden des Tages abstürzt. In jedem Fall gehen weniger als 24 Stunden an Aufzeichnungen verloren (ich weiß nicht, wie wichtig das für Sie ist).
quelle