开源数据库Postgresql的备份和恢复
最近工作上使用的数据库一直是Postgresql,这是一款开源的数据库,而且任何个人可以将该数据库用于商业用途。在使用Postgresql的时候,让我最明显的感觉就是这数据库做的真心好,虽然说数据库的安装包真的很小,但是性能和操作的便捷是一点也不输给其他商业的大型数据库,另外在命令行界面下对该数据库直接进行操作的感觉真的是很爽。在使用数据库的时候,我们作为小公司的数据库管理员有一项工作是不可能避免的,那就是数据的备份和恢复问题。PostgreSQL虽然各个方面的有点很多,但是在数据库备份这方面,它是不支持增量备份的,这点确实让人觉得很是可惜啊。不过,瑕不掩瑜,总的来说这是一款很好的数据库软件。
PostgreSql支持的备份方式有三种:第一种是利用SQL语句备份,第二种是文件系统级别的备份,第三种是在线备份以及及时回复。一般而言第一种方式的备份基本已经都我们用了,而且也很是方便。
在第一种备份和恢复的方式中,我们主要使用到的工具有pg_dump,pg_dumpall,psql,pg_restore。下面主要说下这四个工具之间是如何合作完成备份和恢复这个操作的。其中pg_dump和pg_dumpall主要用于备份,这两者之间的区别显而易见,前者是用来对某个数据库进行备份,而后者是用来备份整个数据库集群的。psql和pg_restore用于恢复数据的,这两者不同的是psql只能用于采用默认格式备份的备份文件的恢复,而pg_restore则用于恢复采用自定义、目录和tar格式备份的数据的恢复。在第一种方面中主要的区别也就是这些了。下面把我备份数据库用的脚本贴出来,以供分享和交流。
@echo off rem PostgreSQL数据库备份脚本,该脚本不支持大数据对象的备份 set path=%path%;C:\Program Files\PostgreSQL\9.4\bin; set fileName=database.backup set fileDir=%homepath%\winsun\%Date:~0,4%%Date:~5,2% if not exist %fileDir% (mkdir %fileDir%) if exist %fileDir%\%fileName% (del %fileDir%\%fileName%) pg_dump -U postgres -d database -p 5432 -w -F t -if-exists -c -f %fileDir%\%fileName% pg_dump -U postgres -d database -p 5432 -w -if-exists -c -f %fileDir%\%fileName%.sql