Vraag mysqldump naar een tar.gz


Meestal na het dumpen van een MySQL-database met mysqldump opdracht Ik onmiddellijk tar / gzip het resulterende bestand. Ik ben op zoek naar een manier om dit in één opdracht te doen:

Dus van dit:

mysqldump dbname -u root -p > dbname.sql
tar czvf dbname.sql.tgz dbname.sql
rm dbname.sql

Aan zoiets als dit:

mysqldump dbname -u root -p > some wizardry > dbname.sql.tgz

Of nog beter (aangezien ik meestal het dumpbestand naar een andere server scp''m):

mysqldump dbname -u root -p > send dbname.sql.tgz to user@host

Ik ben bash tegen Debian.


80
2018-01-26 23:15


oorsprong




antwoorden:


mysqldump --opt <database> | gzip -c | ssh user@wherever 'cat > /tmp/yourfile.sql.gz'

Je kunt tar niet in een dergelijke pijp gebruiken, en je hebt het toch niet nodig, omdat je maar één bestand uitvoert. tar is alleen nuttig als je meerdere bestanden hebt.


97
2018-01-26 23:24



Je hebt gelijk dat je geen teer nodig hebt, maar je zou het in de pijplijn kunnen gebruiken als je dat wel deed, met mysqldump | tar cf - | gzip -c | ssh ... 'cat > file.tgz' - Darren Chamberlain
Werkt dat echt? Ik ben er vrij zeker van dat tar een lijst met bestandsnamen nodig heeft om aan te werken. - James
Ik heb dit bijgewerkt om lokaal te werken (niet op een externe SSH-server) oh, en ik gebruik een dynamische naam op basis van datum, dankzij de originele poster & antwoordfunctie! mysqldump --opt <database> | gzip -c | cat > $(date +%Y-%m-%d-%H.%M.%S).sql.gz - electblake
@electblake: u hoeft geen 'kat' te gebruiken als deze lokaal is. Net gzip -c > $(date +%Y-%m-%d-%H.%M.%S).sql.gz - James
Gewoon voor de lol, je zou kunnen gebruiken netcat in plaats van piping naar ssh. U zou een beetje kunnen besparen op de coderingsoverhead van ssh, als het wordt overgedragen via een beveiligd netwerk (of u geeft niet om de beveiliging). Tegenwoordig zou je ook kunnen overwegen om te gebruiken xz in plaats van gzip. - James


Als u dit lokaal uitvoert, gebruikt u de volgende opdracht om een ​​back-up van uw database te maken en deze te zipen met gzip:

mysqldump -u userName -p (passwordPrompt) yourDatabaseName | gzip -c > output.gz 

(Edit: fixed -c key)


37
2018-02-29 10:28



Ja, dit is de meest eenvoudige oplossing. Ik gebruik het ook. - Roman Snitko
Eenvoudig en gemakkelijk te gebruiken! Bedankt! - SPRBRN
Het zou waarschijnlijk moeten zijn gzip -c, toch? - pilsetnieks
leuk ... maar hoe stuur ik stderr door in dit commando? Als ik 2> / dev / null toevoeg, werkt het niet meer. En 2> / dev / null voordat pijp ook niet werkt. - Nelson Teixeira
mysqldump -u userName -p (passwordPrompt) yourDatabaseName 2> / var / log / dump-errors | gzip -v> output.gz - undefine


Gebruik een named pipe.

mkfifo mysql_pipe
gzip -9 -c < mysql_pipe > name_of_dump.gz &
mysqldump database > mysql_pipe 
rm mysql_pipe

Ik gebruik het de hele tijd, het is geweldig.

http://en.wikipedia.org/wiki/Named_pipe


18
2018-02-03 17:27



James doet hetzelfde in 1 regel. - Jon Haddad
..maar leren over named pipes is de moeite waard :-) - Tomasz Zieliński
mkfifo mysql_pipe; gzip -9 -c < mysql_pipe > name_of_dump.gz &; mysqldump database > mysql_pipe; rm mysql_pipe daar, één regel. Natuurlijk zou ik de pijp rond houden en elke keer gebruiken. - d34dh0r53


Ik schreef een snel script om een ​​remote mysql-database op te zuigen. Het gebruikt mysql-compressie, gzip en ssh-compressie. Zette een database van meerdere GB in een ongelooflijk tempo op.

    ssh -C user@host "mysqldump --opt --compress database <table> | gzip -9 -c" > outputfile.sql.gz

Een bijkomend voordeel is dat het geen vrije ruimte op de brondatabaseserver vereist, dus u kunt het gebruiken om een ​​back-up te maken van een database op een server zonder vrije schijfruimte voordat u uw gegevens snoeit.

Ik hoop dat het iemand helpt.


15
2018-06-18 15:52



Ik heb een eenvoudig shellscript gemaakt: #! / Bin / bash als [-z "$ 1"]; dan echo "Gebruik: $ {0} [host] [gebruiker] [database] [outputFile]" exit else HOST = $ 1 fi als [-z "$ 2"]; dan echo "Gebruik: $ {0} $ {1} [gebruiker] [database] [outputFile]" exit else USER = $ 2 fi als [-z "$ 3"]; dan echo "Gebruik: $ {0} $ {1} $ {2} [database] [outputFile]" exit else DB = $ 3 fi if [-z "$ 4"]; then OUTFILE = "$ {DB} .sql.gz" else OUTFILE = $ 4 fi COMMAND = "ssh -C $ {USER} @ $ {HOST} \" mysqldump --opt $ {DB} | gzip -9 -c \ "> $ {OUTFILE}" ssh -C $ {USER} @ $ {HOST} "mysqldump --opt $ {DB} | gzip -9 -c"> $ {OUTFILE} - Tony Dillon
Twee van die compressies zijn nutteloos: de optie om mysqldump comprimeert de gegevens in het serverproces en decomprimeert onmiddellijk opnieuw (als de mysqldump wordt uitgevoerd op de DB-server zelf). De optie -C voor ssh activeert gzip-compressie waardoor verdere CPU-cycli worden verspild omdat de gegevens al op dat punt zijn ge-zzzped. - MattW.


Gebruik pv en monitor rate!

mysqldump prod_db -h dbslave | pv | gzip -c > prod_2012_08_20.dump.tgz

Of, als u de grootte (3 GB) kent, krijgt u een nauwkeurige schatting:

mysqldump prod_db -h dbslave | pv -s 3g | gzip -c > prod_2012_08_20.dump.tgz

5
2017-08-20 23:08





Probeer dit:

mysqldump --all-databases --password=dbpassword | gzip -c | ssh user@servername "cat >/tmp/filename_of_your_choice.gz"

Niet dat ik op geen enkele manier goed ben in deze dingen, ik heb gewoon twee opties op het web samengevoegd tot één.

Het kan heel goed op een andere manier beter zijn, maar dit is een one-liner die voor mij werkt.

Het vereist echter wel ssh.keys worden geïnstalleerd en geaccepteerd als u het wilt gebruiken in scripts of crontab of gelijk.


3
2018-04-15 21:08



Welkom bij ServerFault. Het lijkt mij heel redelijk. - chicks


U kunt doen als:

mysqldump --add-drop-table -h dbhost -u dbuser -p dbname (tablename tablename ... ) | gzip -c > wp.sql.gz

bijv.

mysqldump --add-drop-table -h localhost -u root -p wordpress | gzip -c > wp.sql.gz


2
2018-03-10 08:45