mysqldump 到 tar.gz

pyg*_*ex1 98 mysql debian bash tar gzip

通常在使用mysqldump命令转储 MySQL 数据库后,我会立即 tar/gzip 生成的文件。我正在寻找一种在一个命令中执行此操作的方法:

所以从这个:

mysqldump dbname -u root -p > dbname.sql
tar czvf dbname.sql.tgz dbname.sql
rm dbname.sql
Run Code Online (Sandbox Code Playgroud)

对于这样的事情:

mysqldump dbname -u root -p > some wizardry > dbname.sql.tgz
Run Code Online (Sandbox Code Playgroud)

或者甚至更好(因为我通常将转储文件 scp 到另一台服务器):

mysqldump dbname -u root -p > send dbname.sql.tgz to user@host
Run Code Online (Sandbox Code Playgroud)

我在 debian 上运行 bash。

Jam*_*mes 110

mysqldump --opt <database> | gzip -c | ssh user@wherever 'cat > /tmp/yourfile.sql.gz'
Run Code Online (Sandbox Code Playgroud)

你不能在这样的管道中使用 tar,而且你也不需要它,因为你只输出一个文件。tar 仅在您有多个文件时才有用。

  • 您不需要 tar 是对的,但是如果需要,您可以在管道中使用它,使用 `mysqldump | 焦油 cf - | gzip -c | ssh ...'猫&gt; file.tgz'` (6认同)
  • @electblake:如果它是本地的,则不需要使用“cat”。只需`gzip -c &gt; $(date +%Y-%m-%d-%H.%M.%S).sql.gz` (4认同)
  • 我将此更新为在本地工作(而不是在远程 ssh 服务器上)哦,我使用了基于日期的动态名称,感谢原始海报和回答者!`mysqldump --opt &lt;数据库&gt; | gzip -c | cat &gt; $(date +%Y-%m-%d-%H.%M.%S).sql.gz` (3认同)

小智 50

如果您在本地运行它,只需使用以下命令备份您的数据库并使用 gzip 压缩它:

mysqldump -u userName -p (passwordPrompt) yourDatabaseName | gzip -c > output.gz 
Run Code Online (Sandbox Code Playgroud)

(编辑:固定 -c 键)

  • 是的,这是最简单的解决方案。我也用它。 (2认同)
  • 它可能应该是`gzip -c`,对吧? (2认同)

Jon*_*dad 18

使用命名管道。

mkfifo mysql_pipe
gzip -9 -c < mysql_pipe > name_of_dump.gz &
mysqldump database > mysql_pipe 
rm mysql_pipe
Run Code Online (Sandbox Code Playgroud)

我一直在用,太棒了。

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

  • ..但是学习命名管道是值得的:-) (16认同)
  • James 在 1 行中做同样的事情。 (6认同)

小智 18

我写了一个快速脚本来吸收远程 mysql 数据库。它使用 mysql 压缩、gzip 和 ssh 压缩。以令人难以置信的速度吸收了多 GB 的数据库。

    ssh -C user@host "mysqldump --opt --compress database <table> | gzip -9 -c" > outputfile.sql.gz
Run Code Online (Sandbox Code Playgroud)

一个附带的好处是它不需要源数据库服务器上的可用空间,因此您可以在修剪数据之前使用它来备份具有零可用磁盘空间的服务器上的数据库。

希望它可以帮助某人。


小智 5

使用pv和监控率!

mysqldump prod_db -h dbslave | pv | gzip -c > prod_2012_08_20.dump.tgz
Run Code Online (Sandbox Code Playgroud)

或者,如果您知道大小 (3GB),请获得准确的估计:

mysqldump prod_db -h dbslave | pv -s 3g | gzip -c > prod_2012_08_20.dump.tgz
Run Code Online (Sandbox Code Playgroud)