Linux / Mac OS / 数据库 · 2016-03-02

用gzip/gunzip备份,压缩数据库

缘起:公司服务器上数据库越来越大,以前备份数据时将数据库整个dump出来,然后用tar czvf压缩备份,还原时用tar zxvf解压缩,每次都作这种事情的确很烦。

浏览PostgreSQL文档时,看到介绍数据库备份部分的内容时,找到一个不错的办法可以直接将数据库dump出来并自动压缩,还原数据库也可以从压缩文件直接还原到数据库,原来数据库dump出来大概50多M的plain text文件压缩后只有不到7MB,非常利于网络传输,且原理并不复杂,只用到了Linux的gzip/gunzip和管道命令而已。

MySQL:

Ruby代码  收藏代码
  1. # Backup
  2. mysqldump -u username -p dbname | gzip > outfile.gz
  3. # Restore
  4. cat outfile.gz | gunzip | mysql -u username -p dbname

PosgreSQL:

Ruby代码  收藏代码
  1. # Backup
  2. pg_dump dbname | gzip > outfile.gz
  3. # Restore
  4. cat outfile.gz | gunzip | psql dbname

还可以远程备份/还原,拿PosgreSQL举例:

Ruby代码  收藏代码
  1. pg_dump -h host1 dbname | psql -h host2 dbname

这种用法虽然基础,但确让我又一次体会到了Linux/Unix下面的工具,作一件小事,并把他做好这个原则。自己写代码模块的时候,习惯把关联功能集成在一起,比如一个encrypt模块,我会把加密/解密两个方法成对写成一个scope中,且其他人大抵也多是如此操作,合乎常理呀。但是Linux下面就把压缩,解压缩用两个程序来处理(gzip/gunzip),然后用管道把他们串联起来,然后就可以去执行一些匪夷所思的任务。赞叹