Meu servidor trac recentemente começou a ter problemas. Ele estava executando uma versão muito desatualizada do Ubuntu e não consegui usá-lo corretamente apt-get
para corrigir os problemas que estava tendo. Então, em vez disso, fiz backup da máquina e fiz uma instalação limpa do Ubuntu 12.04.
Agora tenho um novo servidor com o Postgres 9.1 devidamente instalado e funcionando. Desejo obter meu antigo banco de dados Postgres 8.4 do backup copiado e configurado na nova instalação. Como faço para fazer isso?
O que fiz até agora foi copiar os dados antigos do Postgres 8.4 e os diretórios bin do backup ( /var/lib/postgresql/8.4/main
e /usr/lib/postgresql/8.4/bin
) para /tmp/postgres.old
e /tmp/postgres-bin.old
na nova instalação. Parei de usar o Postgres 9.1 service postgres stop
e executei o comando:
sudo -u postgres /usr/lib/postgresql/9.1/bin/pg_upgrade \
--old-datadir=/tmp/postgres.old/main/ \
--new-datadir=/var/lib/postgresql/9.1/main/ \
--old-bindir=/tmp/postgres-bin.old/postgresql/8.4/bin \
--new-bindir=/usr/lib/postgresql/9.1/bin
Conforme descrito na documentação do Postgres . Parecia que funcionaria muito bem, exceto que recebi o erro:
Performing Consistency Checks
-----------------------------
Checking current, bin, and data directories ok
Checking cluster versions ok
connection to database failed: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
unable to connect to old postmaster started with the command: "/tmp/postgres-bin.old/postgresql/8.4/bin/pg_ctl" -w -l "/dev/null" -D "/tmp/postgres.old/main" -o "-p 5432 -c autovacuum=off -c autovacuum_freeze_max_age=2000000000" start >> "/dev/null" 2>&1
Failure, exiting
O problema parece ser que ele está tentando iniciar o servidor antigo e isso não funciona porque é muito antigo e não está instalado corretamente. Tentar iniciá-lo manualmente revela o problema:
root@mission:/tmp# sudo -u postgres /tmp/postgres-bin.old/postgresql/8.4/bin/postgres
/tmp/postgres-bin.old/postgresql/8.4/bin/postgres: error while loading shared libraries: libssl.so.0.9.8: cannot open shared object file: No such file or directory
Então, como posso restaurar bancos de dados antigos do Postgres 8.4 em uma nova instalação do Postgres 9.1 e atualizá-los?
Está falhando ao tentar executar os arquivos bin antigos porque está faltando uma dependência. Você precisará instalar suas dependências, instalar o 8.4 no novo servidor para esta tarefa ou criar uma VM com o 8.4 instalado, copiar os arquivos para a VM, fazer o que for necessário para iniciar a instância 8.4 na VM ( o que significa que o postgres precisará saber onde está o diretório de dados padrão). A partir daí, eu faria um
pg_dump
no(s) banco(s) de dados em questão e os restauraria no novo servidor. Isso provavelmente lhe daria o ambiente mais limpo.Então, aqui estão o que eu vejo como suas opções:
Usando pg_upgrade
No novo servidor (
pg_upgrade
)/tmp/postgres-bin.old/postgresql/8.4/bin/pg_ctl start -D /tmp/postgres.old/main/
/tmp/postgres-bin.old/postgresql/8.4/bin/pg_ctl stop -D /tmp/postgres.old/main/
Sem usar pg_upgrade
initdb
(oupg_createcluster
)pg_dump
Teve um problema semelhante hoje. Tive que migrar dois bancos de dados de uma versão 8.2.14 para 9.3.2, além de trocar os sistemas operacionais de Suse para Ubuntu. Tentei de várias formas, no final a 'mais fácil' venceu. Criei um dump com
pg_dump
mas usando inserções em vez de cópias e criei o banco de dados a partir do arquivo dump:Antes de importar o arquivo para o novo sistema, verifiquei os caminhos que eram usados em algumas funções e corrigi as informações do caminho. Tanto quanto eu posso ver, parece funcionar bem após a importação agora.