banco de dados Rsync / Sqlite

1

Alguém já tentou banco de dados sqlite rsync'ing?

É possível acessar os dados enquanto eles são sincronizados?

    
por mnml 30.11.2009 / 10:02

6 respostas

3

Eu consideraria isso perigoso.

O banco de dados SQLite também possui arquivos de diário que precisam ser preservados.

Se você

  • rsync o banco de dados sem os arquivos de diário no meio de uma transação
  • copie o arquivo do banco de dados
  • acesse a cópia

É altamente provável que você tenha problemas de corrupção.

Use a API do SQLite Online Backup .

    
por 19.02.2010 / 22:40
3

Supondo que você gostaria de fazer isso via comandos shell, você poderia fazer algo como:

ssh user@host 'sqlite3 "/path/to/db.sqlite" ".backup /path/to/dbbackup.sqlite"'
rsync user@host:"/path/to/dbbackup.sqlite" "db.sqlite"

Primeiro, cria com segurança um backup do banco de dados existente e copia-o para "db.sqlite" em sua própria máquina.

    
por 02.12.2012 / 17:02
1

Como Noah apontou, é perigoso. Seu banco de dados será corrompido.

Você pode usar a biblioteca litereplica .

Ele faz todo o trabalho nos bastidores respeitando a transação normal do SQLite. E incrementalmente (somente as páginas alteradas são transferidas).

Ou a biblioteca rqlite .

Este último requer a instalação da linguagem Go.

    
por 16.11.2015 / 18:51
0

Não, os bancos de dados sqlite não são constantemente coerentes por padrão. No entanto, uma pesquisa em "sqlite copy file" encontrou uma página em fazendo backups on-line com o SQLite , que eu suspeito que cobrirá todos os problemas que você possa ter.

    
por 30.11.2009 / 10:24
0

As respostas anteriores estão corretas.

Mas se você tiver 100% de certeza de que há apenas uma atividade de leitura em seu banco de dados, você pode seguramente fazer qualquer cópia do arquivo do banco de dados. Eu fiz isso em um aplicativo de produção para idades sem problemas (cp, tar, rsync, scp, sftp). O arquivo do banco de dados é definido como somente leitura no nível do sistema operacional (chmod a-w) e as tentativas de gravação do banco de dados geram um erro

Error: attempt to write a readonly database

enquanto todas as seleções funcionam normalmente.

Então, é claro, essa abordagem pode ou não ser viável em relação à sua aplicação. A mesma abordagem pode ser usada para evitar gravações não autorizadas, como injeção de SQL, em um aplicativo da Web.

    
por 07.04.2012 / 18:38
0
  • Enquanto nenhuma transação estiver aberta, o rsync do banco de dados estará OK.

  • Enquanto uma transação está aberta, o rsync do banco de dados resultará em corrupção. Razão: você estará obtendo o banco de dados e o arquivo de diário que o acompanha em um momento ligeiramente diferente, quebrando a consistência que permitiria ao SQLite reconciliar o diário com o banco de dados. Se o SQLite não puder reconciliar o diário com o banco de dados, o banco de dados será deixado em um estado inconsistente, sem nenhuma maneira de informar o que fazia parte de uma transação parcialmente aplicada.

Para poder rsync um banco de dados SQLite, você precisará:

  • Use os comandos CLI do próprio SQLite para criar uma cópia de backup do arquivo de banco de dados. Isso aguardará para obter um bloqueio de gravação, copiar o arquivo e liberar o bloqueio de gravação, garantindo que nenhuma transação seja aplicada parcialmente. Então, rsync a cópia.

    .backup ?DB? file
    
  • Ou encerre todos os processos usando o banco de dados SQLite enquanto estiver fazendo o rsync.

por 31.05.2016 / 05:32

Tags