Postgresql – Backup de todas as base de dados
Motivado por esse post ( http://www.vivaolinux.com.br/dica/PostgreSQL-Fazendo-backup-de-um-servidor-inteiro ) resolvi fazer algumas adaptações para atender as minhas especificações.
Eu preciso ter backup do servidor inteiro mais não necessáriamente preciso retornar todas as bases para o novo servidor novamente, por esse motivo fiz o meu próprio script para resolver esse problema.
Utilizando a linguagem python associada aos aplicativos do postgresql montei esta rotina.
#!/usr/bin/env python #! -*- coding:utf8 -*- ######################################################## # Script para fazer o pg_dump de todos os # bancos da máquina em que ele for executado # Valdinei dos Santos # valdineidossantos(at)gmail.com.br # 27 Julho de 2009 ######################################################## #Importando o getstatusoutput responsavel por executar os comandos do sistema operacional from commands import getstatusoutput from datetime import datetime from os import path #config psql="/usr/bin/psql" pg_dump="/usr/bin/pg_dump" user="pguser-vale" host="valdineidossantos.com" repository = "/media/backup/databases/" #Functions def getAllDatabases(psql, user, host): print "\nRecuperando as bases de dados do servidor %s" % host command = "%s -U %s -h %s -l" % (psql, user, host) status, output = getstatusoutput ( command ) if int(status) == 0: #return lista de servidores return stringToListServers( output ) else: return [[],] def stringToListServers( databaseString ): print "\nFormatando a string" temp_pieces = databaseString.split("\n") dataBases = [] for i in temp_pieces[3:]: try: pieces = i.split("|") owner = pieces[1].strip() dbName = pieces[0].strip() encode = pieces[2].strip() data = [dbName, encode, owner] if data: dataBases.append ( data ) except Exception, e: continue #print e.__doc__ return dataBases #Init if __name__ == '__main__': allDataBases = getAllDatabases(psql, user, host) day = datetime.now().strftime("%Y%m%d") for database, encode, owner in allDataBases: #name Example databasename-20092707.dump dumpName = "%s-%s.dump" % (database, day) #/dev/null/databasename-20092707.dump file = path.join(repository, dumpName) command = "%s -U %s -h %s -E %s -f %s -i -Fc %s " % (pg_dump, user, host, encode, file, database) status, output = getstatusoutput( command) if int(status) > 0: print "Erro no backup da database %s\n %s" % (database, output)
Após esse script finalizado teremos no diretorio que foi setado no config “repository” todos os bancos de dados disponiveis no servidor.
Para voltar novamente com a base dados para o novo servidor rodamos o comando.
pg_restore -d |nome da base dados| -Fc |caminho/nome do arquivo dump|
Temos algumas outras opções em shell script mas preferi usar o python 🙂
julho 27th, 2009 at 13:29
Salve salve Valdinei. Gostei pra caramba do script 🙂
Publica ele no VOL também hehe
Forte abraço e parabéns pelo blog! 😉
julho 27th, 2009 at 21:03
Dinei,
Segue um script parecido so que em ShellScript:
outubro 19th, 2010 at 05:49
Dump não é backup!
“pg_dump NÃO é backup” por Fábio Telles Rodrigues
http://www.postgresql.org.br/eventos/pgday/sp/2010
outubro 19th, 2010 at 06:22
Não é backup?
Engraçado sempre fiz isso como backup e nunca tive problemas…
O que seria backup nobre colega?
março 17th, 2015 at 14:45
Boa tarde Valdinei, depois leia esse artigo desse link que você poderá entender: http://savepoint.blog.br/dump-nao-e-backup/
maio 16th, 2016 at 08:24
Essa frase diz tudo: “pg_dump não é O backup, ele é parte de uma estratégia de backup” Fabio Telles
Recomendo muito a leitura do artigo indicado pelo Leonardo, logo acima…