Wie reduziere ich die Datenbankgröße unter AWS RDS MySQL?


7

Ich habe eine RDS MySQL-Datenbank bei Amazon Web Services.

Ich möchte die Größe der Datenbank im Control Panel reduzieren, um Geld zu sparen.

F: Wie mache ich es kleiner? Ihre Seite sagt, dass Sie es auf magische Weise tun müssen (von Backups oder dergleichen), aber ich möchte es nicht fälschlicherweise schlagen!

Schritt für Schritt bitte ... Danke! Geben Sie hier die Bildbeschreibung ein

Folgendes ist passiert: Amazon hat gefragt, wie groß meine gewünschte maximale Größe sein soll. Ich habe 10 GB gewählt. Ich habe dann Daten hinzugefügt, bis die Tabelle 10 GB überschreitet. Amazon hat dann die Größenbeschränkung automatisch auf 20 GB erhöht. In ihrem Handbuch geben sie an, dass "Erhöhen" automatisch erfolgt, "Verringern" jedoch nicht.

Gibt es eine Möglichkeit, eine neue 10-GB-Datenbank zu erstellen und die Daten mithilfe eines Schnappschusses darauf zu kopieren, nachdem einige der überschüssigen Daten entfernt wurden, sodass die Datengröße wieder unter 10 GB liegt?


Ich habe es gerade versucht. Das Verringern ist nicht nur nicht automatisch, sondern auch nicht zulässig. Ich habe gerade versucht, die Instanz mit einer niedrigeren Nummer zu ändern, und es wird eine rote Fehlermeldung angezeigt Requested storage size (5) cannot be less then the current storage size (10).
RolandoMySQLDBA

Entschuldigung, ich habe die Frage falsch verstanden. Ich dachte, Sie wollten nur die Datenbank verkleinern.
RolandoMySQLDBA

Antworten:


3

Schreiben Sie ein Skript, das ein Skript erstellt

MYSQL_CONN="-hAmazonRDSDNSName -u... -p..."
SQL="SELECT CONCAT('OPTIMIZE TABLE ',table_schema,'.',table_name,';')"
SQL="${SQL} OptimizeTableSQL FROM information_schema.tables WHERE table_schema = 'signs'"
SQL="${SQL} ORDER BY (data_length+index_length)"
mysql ${MYSQL_CONN} -AN -e"${SQL}" > /root/OptimizeAllTables.sql
less /root/OptimizeAllTables.sql

Wenn Sie zufrieden sind, dass das Skript die Aufgabe übernimmt, gehen Sie wie folgt vor:

mysql ${MYSQL_CONN} < /root/OptimizeAllTables.sql

Versuche es !!!

VORBEHALT

Da der Standardwert für innodb_file_per_table ON ist, wird die .ibdDatei jeder zu optimierenden InnoDB-Tabelle tatsächlich verkleinert. Bei allen MyISAM-Tabellen (von denen ich hoffe, dass Sie sie nicht haben) werden auch ihre .MYDund .MYIDateien verkleinert.

UPDATE 18.09.2012 18:19 EDT

Ich habe gerade Folgendes versucht:

  • Instanz1 mit 5G-Festplatte erstellt
  • Geänderte Instanz1 auf 10G-Festplatte
  • Modifizierte Instance1 bis 5G Datenträger (Fehlermeldung: Requested storage size (5) cannot be less then the current storage size (10))
  • Erstellen Sie Instanz2 mit 5G
  • Geladene Instanz1 mit 2 MB Daten
  • Schnappschuss von Instanz1 erstellt (gleiche Größe: 10G)

Wenn ich den Snapshot wiederherstelle, wird eine dritte Instanz erstellt. DB Snapshot muss die gesamte Serverinstanz sein, kein Dump.

Sie müssen das folgende unordentliche Verfahren ausführen:

  1. mysqldump die Daten von der 20 GB Instanz
  2. Erstellen Sie eine neue 10G-Instanz
  3. Laden Sie den mysqldump in die neue 10-GB-Instanz
  4. Überprüfen Sie, ob alle gewünschten Daten vorhanden sind
  5. zerstöre die alten 20GB

Führen Sie in Schritt 4 diese Big Storage Engine-Speicherabfrage sowohl für die 20-GB- als auch für die 10-GB-Instanz aus

SELECT IFNULL(B.engine,'Total') "Storage Engine",
CONCAT(LPAD(REPLACE(FORMAT(B.DSize/POWER(1024,pw),3),',',''),17,' '),' ',
SUBSTR(' KMGTP',pw+1,1),'B') "Data Size", CONCAT(LPAD(REPLACE(
FORMAT(B.ISize/POWER(1024,pw),3),',',''),17,' '),' ',
SUBSTR(' KMGTP',pw+1,1),'B') "Index Size", CONCAT(LPAD(REPLACE(
FORMAT(B.TSize/POWER(1024,pw),3),',',''),17,' '),' ',
SUBSTR(' KMGTP',pw+1,1),'B') "Table Size" FROM
(SELECT engine,SUM(data_length) DSize,SUM(index_length) ISize,
SUM(data_length+index_length) TSize FROM
information_schema.tables WHERE table_schema NOT IN
('mysql','information_schema','performance_schema') AND
engine IS NOT NULL GROUP BY engine WITH ROLLUP) B,
(SELECT 3 pw) A ORDER BY TSize;

Sie werden sehen, wie viel verschwendeter Speicherplatz bei der Migration von mysqldump auf die neue 10-GB-Instanz verschwunden ist. Dies wird definitiv alle InnoDB-Tabellen defragmentieren. Möglicherweise müssen Sie das obige Skript ( /root/OptimizeAllTables.sql) ausführen, das ich Ihnen oben gegeben habe, um OPTIMIZE TABLEalle Tabellen in der signsDatenbank einmal pro Woche auszuführen , um das .ibdso klein wie möglich zu halten . Sie können auch die zu überwachende Big Storage Engine-Speicherabfrage ausführen, wenn sie sich 10 GB nähert.


2
Ihr Code ist beängstigend, aber ich werde es versuchen. Übrigens, kennt jemand eine günstige Alternative zu AWS RDS MYSQL? Ich habe Wikispeedia seit 7 Jahren gebootet und es summiert sich!
aaaaaaa
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.