Ich muss eine große Datei (beschädigte MySQL-Tabelle ~ 40 GB) auf einen separaten Server verschieben, um sie zu reparieren. (Beim Versuch, auf meinem Produktionsserver zu reparieren, wurde der Server schnell beendet.)
Zu diesem Zweck möchte ich die Dateien .frm, .MYI und .MYD von meinem Produktionsserver auf einen Cloud-Server synchronisieren.
Ich kopiere die Dateien von / var / lib / mysql / {database} / nach / home / {myuser}, damit ich den Root-Zugriff für den Befehl rsync nicht aktivieren und 100% sicher sein muss, dass die Datenbankdatei nicht vorhanden ist in Verwendung (es sollte nicht beschrieben oder gelesen werden, aber ich möchte meine Produktionsdatenbank natürlich nicht herunterfahren, um sicherzugehen).
Die erste Datei, die ich zu kopieren versuchte, war ungefähr 10 GB groß. Ich übertrage von einem Teil meines Produktionsservers auf den anderen, dh auf dasselbe Festplattenarray.
Leider hat der Kopierbefehl "cp filename newfilename" so viele Ressourcen beansprucht, dass der Server zum Stillstand kam.
Wie kann ich weniger Ressourcen verwenden, wenn ich die Datei in ein anderes Verzeichnis kopiere? (Es ist nicht wirklich wichtig, wie lange es dauert).
Angenommen, ich schaffe dies. Welche Ressourcennutzung kann ich dann erwarten, wenn ich die Datei mit der Cloud synchronisiere?
Kann jemand einen besseren Weg vorschlagen, dies zu tun? Mir geht schnell der Speicherplatz aus, daher muss diese Tabelle so schnell wie möglich repariert und archiviert werden.
quelle
nice
meistens aus Gewohnheit angefangen.iotop
ist auch dein Freund.nice -n 20 ionice -c 3 cp /var/lib/mysql/{database}/{table}.MYI /home/{USER}/
ausführte, war: Dies hat die Auslastung meines Servers etwas verlangsamt, aber die Website war für die Dauer der Übertragung verfügbarNeben der rsync-Bandbreitenbeschränkung gibt es zwei Möglichkeiten:
ionice -c 3 cp foo bar
buffer -u 150 -m 16m -s 100m -p 75 -i foo -o bar
ionice
wird mit dem E / A-Scheduler verbunden.buffer
ist ein kreisförmiger Puffer, der Zeichengeräten dabei helfen soll, effizienter zu sein, aber-u 150
zwischen den Schreibvorgängen wird eine Pause von 150 Mikrosekunden eingelegt, was laut Handbuch ausreichen kann, um einem Festplattenraum zum Atmen zu geben.Beide
ionice
undbuffer
sind in einem Ubuntu-Build erhältlich.iotop
ist praktisch, wenn Sie CONFIG_TASK_DELAY_ACCT in Ihrem Kernel konfiguriert haben, meine Ubuntu-Box dies jedoch nicht getan hat, was die Benutzerfreundlichkeit des Befehls stark einschränkt. Ich weiß bereits, welcher Befehl meine Festplatte übertönt, ich möchte ihr nur etwas Luft zum Atmen geben.Überprüfen Sie während des Kopiervorgangs die Ausgabe von
iostat -x 1
(normalerweise im sysstat-Paket) und stellen Sie fest, dass das Feld% Busy für Ihr Gerät während des Kopiervorgangs 90% oder weniger beträgt. Wenn es bei 99-100% liegt, hungern Sie nach anderen Prozessen für E / A.quelle
ionice -c 3 -p $pidUnison
arbeitet unisono auf externer Festplatte, danke !!Verwenden Sie rsync mit dem Schalter --bwlimit = KBPS (E / A-Bandbreite begrenzen; KByte pro Sekunde). Spielen Sie mit einer kleineren Datei herum und versuchen Sie, eine optimale Mischung zwischen Übertragungsgeschwindigkeit und Systemnutzung zu finden. Monitor in der zweiten Shell mit "vmstat 1"
quelle
rsync
kopiert Dateien lokal. Denken Sie nachrsync --bwlimit=28000 foo.frm /bar/foo.frm
und schauen Sie es sich dann aniostat
. Ich bin mir nicht sicher, warumvmstat
ich es Ihnen sagen würde, wenn Sie ein Laufwerk sättigen würden. Suchen Sie nach% beschäftigt iniostat
.Eine Alternative ist:
Aber ich glaube nicht, dass es funktionieren wird, wenn $ {src} eine wachsende Datei ist ... können Sie eine Möglichkeit vorschlagen, die Quelle zu kopieren und darauf zu warten, dass sie geschlossen wird ...
quelle