Get Hands-on with Amazon EKS - Workshop Event Series
Whether you're taking your first steps with Kubernetes or you're an experienced practitioner looking to sharpen your skills, our Amazon EKS workshop series delivers practical, real-world experience that moves you forward. Learn directly from AWS solutions architects and EKS specialists through hands-on sessions designed to build your confidence with Kubernetes. Register now and start building with Amazon EKS!
Wie behebe ich Fehler bei einer RDS für MySQL- oder MariaDB-Instance, bei der „Speicher voll“ angezeigt wird?
Ich möchte Fehler bei einer Amazon Relational Database Service (Amazon RDS) für MySQL- oder MariaDB-Instance beheben, bei der der Speicherplatz voll angezeigt wird.
Kurzbeschreibung
Um Fehler bei einer Amazon RDS für MySQL- oder MariaDB-Instance zu beheben, bei der der Speicherplatz voll ist, überprüfe den gesamten Speicherplatz, der auf der DB-Instance belegt ist, um zu ermitteln, welcher Speicherplatz belegt ist. Du kannst den Speicherplatz auf der DB-Instance für die folgenden Objekte verwenden:
- Vom Benutzer erstellte Datenbanken
- Temporäre Tabellen
- Binäre Protokolle oder MySQL-Standby-Instance-Relay-Protokolle (wenn Sie eine Read Replica verwenden)
- InnoDB-Tablespace
- Allgemeine Protokolle, langsame Abfrageprotokolle und Fehlerprotokolle
Nachdem du den Speicherplatz überprüft und festgestellt hast, was den Speicherplatz verwendet, kannst du Speicherplatz zurückfordern. Anschließend kannst du die FreeStorageSpace-Metrik überwachen, um weitere Speicherplatzprobleme zu vermeiden.
Hinweis: Wenn der verfügbare Speicherplatz plötzlich abnimmt, führe den Befehl SHOW FULL PROCESSLIST aus, um Abfragen auf DB-Instance-Ebene zu überprüfen. Der Befehl SHOW FULL PROCESSLIST liefert Informationen über alle aktiven Verbindungen und Abfragen, die von jeder Verbindung ausgeführt werden. Um die Transaktionen zu überprüfen, die schon lange aktiv sind, führe den Befehl INFORMATION_SCHEMA.INNODB_TRX oder SHOW ENGINE INNODB STATUS aus. Überprüfe dann die Ausgabe.
Lösung
Gehe wie folgt vor, um Fehler bei einer Amazon RDS für MySQL- oder MariaDB-Instance zu beheben, bei der der Speicherplatz voll angezeigt wird:
Überprüfe den gesamten Speicherplatz, der auf der MySQL-DB-Instance belegt ist
Ide die Größe jeder vom Benutzer erstellten Datenbank
SELECT SUBSTRING_INDEX(TABLESPACE_NAME,"/",1) AS DATABASE_NAME, ROUND((DATA_FREE/1024/1024/1024),3) AS 'REUSABLE (GB)', ROUND(SUM((TOTAL_EXTENTS * EXTENT_SIZE)/1024/1024/1024),3) AS 'TOTAL (GB)' FROM INFORMATION_SCHEMA.FILES GROUP BY DATABASE_NAME ORDER BY 'TOTAL (GB)' DESC;
Überprüfe die Größe jeder Tabelle für eine Benutzerdatenbank, die du angibst:
Hinweis: Ersetze example-database-name durch deinen Datenbanknamen.
SELECT SUBSTRING_INDEX(TABLESPACE_NAME,"/",-1) as 'TABLE_NAME', ROUND((total_extents * extent_size)/1024/1024/1024,3) AS "TableSizeinGB" from information_schema.files WHERE FILE_NAME LIKE 'example-database-name';
Den gesamten Speicherplatz überprüfen, der auf der MariaDB-Instance verwendet wird
Identifiziere die Größe jeder vom Benutzer erstellten Datenbank:
mysql> SELECT table_schema, ROUND(SUM(data_length+index_length)/1024/1024/1024,2) "size in GB" FROM information_schema.tables GROUP BY 1 ORDER BY 2 DESC;
Überprüfe die Größe jeder Tabelle für eine Benutzerdatenbank, die du angibst:
Hinweis: Ersetze example-database durch den Datenbanknamen und example-table durch den Tabellennamen.
mysql> SELECT table_schema "example-database", example-table,(data_length + index_length)/1024/1024/1024 AS "TableSizeinGB" from information_schema.tables where table_schema='database_name';
Temporären Tabellen überprüfen
Von InnoDB-Benutzern erstellte temporäre Tabellen und interne temporäre Tabellen auf der Festplatte werden in einer temporären Tablespace-Datei namens ibtmp1 erstellt. Temporäre Tablespace-Dateien können bis ibtmp2 im MySQL-Datenverzeichnis erweitert werden. Wenn die temporäre Tabelle ibtmp1 zu viel Speicherplatz belegt, dann starte die DB-Instance neu, um den Speicherplatz freizugeben.
Hinweis: Du kannst nur die MySQL-Versionen 5.7 und höher oder die MySQL-Versionen 8.0 und höher verwenden, um die Dateigrößen des InnoDB-Tablespaces abzufragen.
Identifiziere den temporären InnoDB-Tablespace:
mysql> SELECT file_name, tablespace_name, table_name, engine, index_length, total_extents, extent_size from information_schema.files WHERE file_name LIKE '%ibtmp%';
Um Speicherplatz zu regenerieren, der von einer globalen temporären Tablespace-Datendatei belegt wird, starte den MySQL-Server oder die DB-Instance neu. Weitere Informationen findest du unter Der temporäre Tablespace auf der MySQL-Website.
InnoDB-Tablespace überprüfen
MySQL erstellt möglicherweise interne temporäre Tabellen, die aufgrund einer Abfrage nicht entfernt werden können. Diese temporären Tabellen sind nicht Teil der Tabelle mit dem Namen tables in information_schema. Weitere Informationen findest du unter Interne Verwendung temporärer Tabellen in MySQL auf der MySQL-Website.
Identifiziere die internen temporären Tabellen:
mysql> SELECT * FROM information_schema.innodb_sys_tables WHERE name LIKE '%#%';
Identifiziere den InnoDB-System-Tablespace:
mysql> SELECT file_name, tablespace_name, table_name, engine, index_length, total_extents, extent_size from information_schema.files WHERE file_name LIKE '%ibdata%';
Hinweis: Die vorherige Abfrage wird in den MySQL-Versionen 5.7 und höher oder in den MySQL-Versionen 8.0 und höher unterstützt.
Wenn die Größe des System-Tablespaces zunimmt, kannst du ihn nicht verringern. Um dies zu umgehen, kannst du die InnoDB-Tabellen speichern und die Tabellen in eine neue MySQL-DB-Instance importieren. Um große System-Tablespaces zu vermeiden, verwende file-per-table-Tablespaces. Weitere Informationen findest du unter File-per-Table-Tablespaces auf der MySQL-Website.
Wenn du Innodb_file_per_table aktivierst, speichert jede Tabelle die Daten und den Index in einer eigenen Tablespace-Datei. Führe OPTIMIZE TABLE aus, um den Speicherplatz zurückzugewinnen. Weitere Informationen findest du unter Anweisung OPTIMIZE TABLE auf der MySQL-Website.
Hinweis: Der Befehl OPTIMIZE TABLE verwendet den Algorithmus COPY, um temporäre Tabellen zu erstellen, die dieselbe Größe wie die Originaltabelle haben. Stelle sicher, dass du über freien Speicherplatz verfügst, bevor du OPTIMIZE TABLE ausführst.
Führe den folgenden Befehl aus, um die Tabelle zu optimieren:
Hinweis: Ersetze example-table-name durch die Tabelle, die du optimieren möchtest.
mysql> OPTIMIZE TABLE example-table-name;
(Optional) Führe den folgenden Befehl aus, um die Tabelle neu zu erstellen:
Hinweis: Ersetze example-table-name durch die Tabelle, die du optimieren möchtest.
mysql> ALTER TABLE example-table-name ENGINE=INNODB;
Binärprotokolle überprüfen
Wenn du automatische Backups auf die Amazon RDS-Instance einschaltest, werden die Binärprotokolle automatisch auf die DB-Instance aktiviert. Binärprotokolle werden auf der Festplatte gespeichert und verbrauchen Speicherplatz, werden jedoch bei jeder Konfiguration zur Aufbewahrung von Binärprotokollen entfernt. Der standardmäßige binlog-Aufbewahrungswert für die Instance ist auf Null gesetzt und Dateien werden sofort entfernt.
Um Probleme mit wenig Speicherplatz zu vermeiden, lege in Amazon RDS für MySQL einen entsprechenden Wert für den Aufbewahrungszeitraum für Binätprotokolle fest.
Um die Anzahl der Stunden, für die ein Binärprotokoll aufzubewahren, führe den Befehl mysql.rds_show\ _configuration aus:
CALL mysql.rds_show_configuration;
Um den Speicherplatz zu reduzieren, den die Binärprotokolle belegen, reduziere die Anzahl der Stunden, in denen ein Binärprotokoll aufbewahrt wird. Ein Wert von NULL entfernt Protokolle sofort.
Wenn es eine Standby-Instance für die aktive Instance gibt, überwache die ReplicaLag-Metrik auf der Standby-Instance. Die ReplicaLag-Metrik gibt alle Verzögerungen an, die bei der Verarbeitung von Binärprotokollen auf der aktiven Instance oder von Relay-Protokollen auf der Standby-Instance auftreten.
Wenn es Probleme beim Löschen oder bei der Replikation gibt, können sich Binärprotokolle im Laufe der Zeit ansammeln und zusätzlichen Speicherplatz beanspruchen. Verwende den Befehl SHOW BINARY LOGS, um die Anzahl der Binärprotokolle auf einer Instance und die Dateigröße zu überprüfen. Weitere Informationen findest du unter SHOW BINARY LOGS-Anweisung auf der MySQL-Website.
Wenn die DB-Instance als Replikations-Standby-Instance fungiert, überprüfe Relay_Log_Space, um die Größe der Relay-Protokolle einzusehen:
SHOW SLAVE STATUS\G
Überprüfe die MySQL-Protokolle (allgemeine Protokolle, langsame Abfrageprotokolle und Fehlerprotokolle)
Um die Größe von langsamen Abfragen, allgemeinen Protokollen vom Typ DATEI und Fehlerprotokollen zu überprüfen, sieh dir die Datenbankprotokolldateien an und liste sie auf.. Wenn das langsame Abfrageprotokoll und die allgemeinen Protokolltabellen zu viel Speicherplatz belegen, rotiere die Protokolltabellen manuell, um die tabellenbasierten MySQL-Protokolle zu verwalten.
Um die alten Daten zu entfernen und Speicherplatz zu regenerieren, führe die folgenden Befehle zweimal hintereinander aus:
mysql> CALL mysql.rds_rotate_slow_log;mysql> CALL mysql.rds_rotate_general_log;
Hinweis: Die Tabellen geben keine genaue Dateigröße der Protokolle an. Ändere den Parameterwert für log_output in Datei für slow_log und general_log.
Amazon RDS DB-Instance überwachen und skalieren
Gehe wie folgt vor, um die Amazon RDS-Instance zu überwachen und zu skalieren:
- Verwende Amazon CloudWatch, um die Amazon RDS-DB-Instance zu überwachen.
- Richte CloudWatch-Alarme für die FreeStorageSpace-Metrik ein, um Benachrichtigungen zu erhalten, wenn der Speicherplatz auf einen bestimmten Schwellenwert sinkt. Weitere Informationen findest du unter Wie kann ich CloudWatch-Alarme erstellen, um den freien Amazon RDS-Speicherplatz zu überwachen und Probleme mit einem vollen Speicher zu vermeiden?
- Verwende die Amazon RDS-Speicher-Autoscaling-Funktion, um die Kapazität automatisch zu verwalten.
- Sprache
- Deutsch
Ähnliche Videos

