Atualizando o PostgreSQL no EC2 com impacto mínimo na configuração existente

1

Eu tenho o PostgreSQL 9.2 instalado em uma instância do EC2, com yum install . Agora preciso atualizar para o PostgreSQL 9.4. Eu notei que yum list lista 9.2, 9.3 e 9.4 como pacotes completamente separados, então não posso simplesmente atualizar usando a funcionalidade de atualização do yum.

Eu tenho um banco de dados que precisa sobreviver ao updgrade. Além disso, tenho alguma configuração configurada em /var/lib/pgsql9/data (certificado do servidor / chave em .crt / .key arquivos, alterações em pg_hba.conf , alterações em postgresql.conf ) que também devem sobreviver.

Eu vi esta pergunta mas as informações de lá não são relevantes para o yum pacote cenário (e parece desatualizado), e além disso, não aborda especificamente as preocupações de configuração.

Qual é a maneira correta / recomendada de realizar a atualização, mantendo minhas configurações e garantindo que o banco de dados estará operacional após a atualização?

    
por Eugene Osovetsky 07.01.2016 / 17:59

1 resposta

2

Eu encontrei uma maneira de fazer isso, mas não tenho certeza se é a maneira correta / recomendada. Meus passos estão abaixo:

1. Salve a configuração existente

Execute sudo vim /var/lib/pgsql9/data/postgresql.conf e sudo vim /var/lib/pgsql9/data/pg_hba.conf e copie todas as configurações não comentadas em algum lugar. Mais tarde você terá que configurá-los manualmente na nova versão do PostgreSQL.

2. Instale a nova versão do PostgreSQL

Use yum list para encontrar os nomes de pacotes corretos e instalá-los. No meu caso, eu precisava de sudo yum install postgresql94.x86_64 e sudo yum install postgresql94-server.x86_64

Execute postgres --version , pg_dumpall --version e psql --version para garantir que a versão foi atualizada para a nova.

3. Salve os dados existentes e encerre o banco de dados

Interrompa todos os processos que possam alterar o banco de dados (por exemplo, seu aplicativo da web). Execute sudo pg_dumpall >db.out , seguido por sudo service postgresql stop logo depois disso para parar o servidor e evitar mais alterações de dados. Examine o despejo de dados resultante com vim db.out - ele deve ter todos os seus dados e esquema do banco de dados no formato SQL simples. Você pode querer fazer o backup deste arquivo antes de continuar.

4. Salve o diretório antigo do banco de dados

sudo mv /var/lib/pgsql9 /var/lib/pgsql9.old

5. Crie um novo diretório de banco de dados para a nova versão do PostgreSQL

sudo mkdir /var/lib/pgsql9

sudo chown postgres /var/lib/pgsql9

sudo su postgres

No prompt sudo su : initdb -D /var/lib/pgsql9/data

Em seguida, pressione Ctrl-D

6. Copie os certificados para o novo diretório do banco de dados

Se você estiver usando certificados, copie-os para o novo diretório e dê a eles a propriedade adequada, por exemplo:

sudo cp /var/lib/pgsql9.old/data/server.key /var/lib/pgsql9/data

sudo cp /var/lib/pgsql9.old/data/server.crt /var/lib/pgsql9/data

sudo chown postgres /var/lib/pgsql9/data/server.crt

sudo chown postgres /var/lib/pgsql9/data/server.key

7. Configurar o novo banco de dados

Use sudo vim /var/lib/pgsql9/data/postgresql.conf e sudo vim /var/lib/pgsql9/data/pg_hba.conf para configurar o banco de dados de acordo com as configurações salvas na etapa 1.

8. Corrija o serviço postgresql para apontar para a nova versão

Executar ls -ila /etc/rc.d/init.d - observe como você tem um script para cada versão ( postgresql92 , postgresql94 ), mas o postgresql está vinculado à versão antiga. Corrija isso executando sudo ln -sf /etc/rc.d/init.d/postgresql94 /etc/rc.d/init.d/postgresql e execute o comando ls novamente para verificar se o link está correto.

9. Execute o serviço

Execute sudo service postgresql start . Se o serviço falhar ao iniciar, é provável que seja um erro de permissão (você esqueceu a chown acima) ou um erro de sintaxe de configuração. Você pode examinar os logs ( /var/lib/pgsql94/pgstartup.log e os arquivos em /var/lib/pgsql9/data/pg_log ) para procurar o erro. Se o serviço foi iniciado corretamente, você pode executar sudo su postgres , depois psql para verificar se seu banco de dados está em execução (use \q para sair e pressione Ctrl-D para sair de sudo su ).

10. Restaure seus dados antigos

sudo cp db.out /var/lib/pgsql9/data

sudo chown postgres /var/lib/pgsql9/data/db.out

sudo su postgres

E nesse prompt:

psql -d postgres -f /var/lib/pgsql9/data/db.out

Você deve ver um monte de comandos de banco de dados. Nesse ponto, seu banco de dados é atualizado e está em execução. Você pode verificar executando psql . Use o comando \list para ver uma lista de bancos de dados, \connect (database_name) para se conectar ao seu banco de dados, \dt para ver uma lista de tabelas uma vez conectadas ou executar comandos SQL terminados por ponto-e-vírgula. Digite \q para sair.

Depois de verificar, pressione Ctrl-D para sair de sudo su .

11. Limpar

Neste ponto, quando tiver certeza de que tudo está funcionando, você poderá remover /var/lib/pgsql9.old , /var/lib/pgsql9/db.out , db.out e quaisquer outros backups.

    
por 07.01.2016 / 23:31