2017-09-12 1 views
1

Ich habe ein Problem mit dem Wiederherstellen von Datenbanken zu einer RDS-Instanz. Wir haben ungefähr 12 000 Datenbanken und ein Bash-Skript führt die Wiederherstellung durch, 10 Datenbanken gleichzeitig. Nach jeder 500-hundert-Datenbank schläft das Skript für eine Minute und führt die folgenden Abfragen aus: RESET QUERY CACHE;FLUSH QUERY CACHE;FLUSH TABLES;, außerdem gibt es nach jeder Datenbank eine Sekunde Schlaf.Amazon RDS nicht genügend Arbeitsspeicher

Ich habe ständig Probleme mit der RDS-Datenbank, sobald die InnoDB-Dateien beschädigt sind (ich denke nur wegen der fehlgeschlagenen Wiederherstellungsversuche habe ich eine neue Instanz erstellt, und es funktioniert gut), oder ich bekomme diese Fehlermeldung :

2017-09-11 06:11:43 29836 [ERROR] /rdsdbbin/mysql/bin/mysqld: Out of memory (Needed 114240 bytes) 
2017-09-11 06:11:43 29836 [ERROR] Out of memory; check if mysqld or some other process uses all available memory; if not, you may have to use 'ulimit' to allow mysqld to use more memory or you can add more swap space 

Nach der Fehlermeldung wird die DB-Instanz neu gestartet und die Wiederherstellung schlägt fehl. Es heißt, ich sollte die ulimit erhöhen, aber ich kann dies nicht auf dem Amazon RDS-Server tun, oder kann nicht mehr Swap-Speicherplatz hinzufügen.

Die Datenbank ist ein db.t2.medium, möchten wir wiederherstellen, um unsere täglichen Backups zu testen und nach der Wiederherstellung, verschleiern ich alle Benutzerdaten und erstellen Statistiken daraus, so sollte es frisch sein.

Was wäre die beste Lösung, um dies zu erreichen?

+0

Wie groß ist jede Datenbank? Machst du irgendetwas mit ihnen außer der Wiederherstellung? – stdunbar

+1

12.000 Datenbanken sind eine große Anzahl von Datenbanken für einen so kleinen Server, wobei sogar eine kleine Anzahl von Tabellen pro Datenbank angenommen wird. Der sinnvollste Ratschlag ist, viel größer zu beginnen und dann die Instanz nach unten zu skalieren. Wenn Sie darauf bestehen, den kleinen Rechner zu verwenden, ändern Sie die Formel für 'innodb_buffer_pool_size' in der Parametergruppe abwärts von' {DBInstanceClassMemory * 3/4} 'nach' {DBInstanceClassMemory * 2/4} ', um Speicherplatz freizugeben der Pufferpool kleiner - das ist nicht optimal, aber Sie brauchen mehr freien Speicher und das ist der einzige Weg, um es ohne Skalierung zu bekommen. –

+0

Erstellen Sie außerdem eine Dump-Datei mit '--no-data' und versuchen Sie, zuerst nur die Schemata wiederherzustellen, und gehen Sie dann zur vollständigen Sicherung. Die 'FLUSH'-Anweisungen sind unnötig. –

Antwort

1

Wenn Sie nicht genügend Arbeitsspeicher ausgeführt werden, bis die Datenbankgröße von einem t2.medium zu etwas Größeren

einem r3 Versuchen, dies hat 15.25GiB verglichen mit 4GiB auf einem t2.medium

Verwandte Themen