AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 231583
Accepted
Ivan Voras
Ivan Voras
Asked: 2019-03-08 08:42:45 +0800 CST2019-03-08 08:42:45 +0800 CST 2019-03-08 08:42:45 +0800 CST

Restaurando tabelas PostgreSQL mais rapidamente

  • 772

Há um sistema PostgreSQL PITR rodando em um sistema bastante grande, com centenas de bancos de dados com centenas de tabelas em cada um, e estamos enfrentando problemas baseados em restrições de tempo ao tentar restaurar tabelas individuais de um único banco de dados ou um conjunto de bancos de dados . O PITR está sendo gerenciado com Barman.

Com essa configuração, precisamos restaurar um cluster inteiro (que pode conter dezenas de dbs), extrair a tabela única e restaurar os dados - o que pode levar horas.

Estatisticamente, devido ao número de dbs envolvidos e ao número de pessoas envolvidas, isso acontece com frequência suficiente para se tornar um problema.

Existem soluções mais rápidas que nos dariam recursos semelhantes ao PITR? Eu pensei em fazer pg_dumpbackups manuais para cada tabela individualmente a cada hora, mas talvez existam soluções melhores?

postgresql backup
  • 1 1 respostas
  • 235 Views

1 respostas

  • Voted
  1. Best Answer
    jjanes
    2019-03-09T08:33:05+08:002019-03-09T08:33:05+08:00

    Suponho que você já tenha tentado a abordagem "envergonhar as pessoas para serem mais cuidadosas" sem sucesso.

    Acho que tentaria uma solução no banco de dados, como adicionar colunas de carimbo de data e hora à tabela e adicionar colunas para "exclusões temporárias" em vez de fazer exclusões definitivas, de forma que você possa executar consultas para restaurar uma tabela ao seu estado anterior. Se proibir exclusões definitivas no nível do usuário não for uma opção, você poderá manter algumas tabelas de log que permitem criar essas consultas restaurativas. Eu uso este módulo extensivamente para esse propósito, embora se eu estivesse começando do zero eu poderia considerar algo mais moderno como isso . Os gatilhos necessários para executar esse registro impõem uma sobrecarga considerável em qualquer operação DML, portanto, você terá que avaliar se pode tolerar isso.

    Um benefício dessa abordagem é que muitas vezes você pode criar consultas que corrigirão o erro de uma pessoa sem que todas as alterações após o erro sejam perdidas. É claro que se os dados ruins do oopsie levarem a erros em cascata porque o trabalho posterior dependeu dos dados ruins, isso pode não ser possível.

    Se isso não funcionar, talvez uma abordagem híbrida seja uma boa ideia. Você pode salvar instantâneos pg_dump de hora em hora e mantê-los por 12 horas (ou qualquer quantidade de armazenamento que você esteja disposto a dedicar a esse propósito). Se você raramente precisar voltar mais de 12 horas, faça fallback para o método de recuperação PITR. Se você seguir esse caminho, talvez queira usar as opções -Fcou -Fdpara pg_dump. Dessa forma, você pode fazer apenas um dump do banco de dados por hora, mas escolher quais tabelas restaurar no momento da restauração, em vez de no momento do dump.

    Se você quiser manter sua prática atual, há muitas maneiras de torná-la mais rápida, mas depende de qual é o gargalo atual. Se o gargalo estiver restaurando o backup básico do arquivo antes que você possa iniciar a recuperação, você pode manter algumas cópias já restauradas para que você possa iniciar a recuperação rapidamente usando um backup pré-estabelecido e apenas editando o arquivo pg_restore.conf e, em seguida, iniciando. Uma vez usado, você teria que jogá-lo fora e recriá-lo em segundo plano para que ele esteja pronto para a próxima vez. Se o gargalo for o tempo que leva para fazer o próprio PITR, você pode fazer backups de base mais frequentes e usar o mais recente, antigo o suficiente para ser usado no tempo de restauração desejado. Dessa forma, há menos trabalho para recuperar. Por exemplo, faça um backup básico todos os dias, mas guarde apenas um desde o início dos tempos, e um de hoje, e um de ontem. Sempre que você concluir com êxito um backup básico, exclua o de dois dias atrás.

    Você também pode manter um hot standby atrasado com "recovery_min_apply_delay" que está sempre cerca de 12 horas atrasado, mas quando você parar esse servidor, altere a configuração para avançar rapidamente para o tempo que você precisa e, uma vez feito, jogue-o fora e recrie para a próxima vez, provavelmente não será muito mais rápido do que apenas manter um backup de base recente, mas adicionará um pouco de complexidade.

    • 1

relate perguntas

  • Práticas recomendadas para executar a replicação atrasada do deslocamento de tempo

  • Backups de banco de dados no Oracle - Exportar o banco de dados ou usar outras ferramentas?

  • Os procedimentos armazenados impedem a injeção de SQL?

  • Sequências Biológicas do UniProt no PostgreSQL

  • Qual é a diferença entre a replicação do PostgreSQL 9.0 e o Slony-I?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve