Introdução
- Ao copiar diretamente um banco de dados SQLite com
rsync, o tamanho do arquivo pode crescer por causa de índices e outros fatores, tornando o processo lento e instável. - Por isso, é proposto usar
.dumppara comprimir e restaurar em formato de texto.
Desenvolvimento
-
O comando
.dumpexporta todo o banco como texto SQL, e os índices são substituídos por uma única linha de comando, reduzindo o tamanho do arquivo.sqlite3 my_database.db .dump > my_database.db.txt -
O arquivo de texto pode ser ainda mais reduzido com compressão gzip:
sqlite3 my_database.db .dump | gzip -c > my_database.db.txt.gz -
O processo passa a ser: gerar o arquivo compactado no servidor, copiar para a máquina local e então restaurar:
ssh username@server "sqlite3 db.db .dump | gzip -c > db.txt.gz" rsync --progress username@server:db.txt.gz . gunzip db.txt.gz cat db.txt | sqlite3 restored.db -
O arquivo original do banco tinha 3,4 GB → o dump em texto 1,3 GB → o arquivo compactado com gzip 240 MB, uma redução de cerca de 14 vezes.
-
No método tradicional com
rsync, se o banco mudar durante a transferência, pode ocorrer o errodatabase disk image is malformed. -
Com o dump em texto, não há risco de alteração no conteúdo após o início da cópia, permitindo um backup consistente.
Conclusão
- O método
.dump+ compressão + restauração melhora tanto a velocidade quanto a estabilidade ao transferir grandes bancos SQLite. - É especialmente eficaz para bancos com muitos índices e pode reduzir a chance de falhas na transferência ou corrupção.
- Se você lida com SQLite de grande porte com frequência, esta é uma otimização prática que vale a pena aplicar.
2 comentários
Fiquei curioso sobre o contexto de por que esse tipo de tarefa é necessário.
No texto original, dizem que é para backup & análise. Talvez a ideia fosse analisar localmente com algo como o duckdb.