De qualquer maneira, o resultado é uma cópia nomeada backup_file.sq3do banco de dados my_database.sq3.
É diferente da cópia regular de arquivos, porque cuida de todos os usuários que estão trabalhando no banco de dados. Existem bloqueios adequados definidos no banco de dados, portanto, o backup é feito exclusivamente.
Você pode fazer tudo em uma linha ...sqlite3 m_database.sq3 ".backup m_database.sq3.bak"
Mark Setchell
@Googie: Podemos usá-lo para replicação? ou
segunda
4
@mOna: Este é apenas um mecanismo para fazer backups. Replicação significa propagar mudanças em tempo real (uma espécie de banco de dados distribuído), o que isso não fará por você.
Googie
Obrigado pela resposta :)
mOna,
1
@RonJohn Na verdade, faz uma cópia de um arquivo, mas também garante que o acesso de gravação ao banco de dados seja restrito com os bloqueios apropriados, portanto, é uma operação atômica, sem modificações intermediárias.
Googie
5
.backup é a melhor maneira.
sqlite3 my_database .backup my_database.back
você também pode tentar o comando .dump, ele oferece a capacidade de despejar todo o banco de dados ou tabelas em um arquivo de texto. Se TABLE for especificado, apenas despeja tabelas que correspondem ao padrão LIKE TABLE.
sqlite3 my_database .dump> my_database.back
Uma boa maneira de fazer uma cópia de arquivo usando dump and store, reconstruir o banco de dados posteriormente.
No SQLite 3.8.2, .backupnão funciona como mostrado acima ("argumento FILENAME ausente em .backup")
Francesc Rosas
4
Esta é a melhor resposta. Se você estiver usando .backup em um banco de dados de trabalho usado por muitos, pode não funcionar porque em algum ponto o banco de dados está bloqueado. Então se você estiver usando isso em um CRON não vai funcionar e não vai te dizer que há um erro ... melhor usar .dump (sempre funciona) ou a API fornecida pelo SQLite.
Memristor de
@Memristor Mas o .dump não bloqueia o banco de dados para outros? FWIW, eu preferiria um backup com falha (com e-mail para o administrador) a um serviço interrompido.
Torsten Bronger,
1
Corrija a sintaxe .backup em sua resposta. Não precisa do operador '>'
Nashev
-23
try {
final String inFileName ="/data/data/your app package/databases/db";File dbFile = new File(inFileName);
FileInputStream fis = new FileInputStream(dbFile);
String path = Environment.getExternalStorageDirectory().getAbsolutePath()+"/CALC/Backup";File dir = new File(path);if(!dir.exists()) dir.mkdirs();
String outFileName = path +"/filename";// output file name
//Open the empty db as the output stream
OutputStream output = new FileOutputStream(outFileName);// Transfer bytes from the inputfile to the outputfile
byte[] buffer = new byte[1024];
int length;while((length = fis.read(buffer))>0){
output.write(buffer,0, length);}
Toast.makeText(getActivity(),"Backup Successfully",2).show();//Close the streams
output.flush();
output.close();
fis.close();}
catch (Exception e){
e.printStackTrace();}
Você está sugerindo a cópia programática no nível do sistema de arquivos dos arquivos do banco de dados?
Andreas Tasoulas
4
1. Você nem mesmo diz que idioma é esse código. O OP disse que está usando PHP, mas parece ser um código java. 2. Você copia um arquivo byte por byte. Qual deve ser a vantagem de fazer isso? Java (e php) possuem métodos para copiar arquivos. Leia docs.oracle.com/javase/tutorial/essential/io/copy.html 3. Isso não resolve o problema de que o banco de dados pode ser gravado enquanto você o copia.
Respostas:
A ferramenta de linha de comando sqlite3 apresenta o
.backup
comando dot .Você pode se conectar ao seu banco de dados com:
e execute o comando backup dot com:
Em vez da conexão interativa com o banco de dados, você também pode fazer o backup e fechar a conexão depois com
De qualquer maneira, o resultado é uma cópia nomeada
backup_file.sq3
do banco de dadosmy_database.sq3
.É diferente da cópia regular de arquivos, porque cuida de todos os usuários que estão trabalhando no banco de dados. Existem bloqueios adequados definidos no banco de dados, portanto, o backup é feito exclusivamente.
fonte
sqlite3 m_database.sq3 ".backup m_database.sq3.bak"
.backup é a melhor maneira.
você também pode tentar o comando .dump, ele oferece a capacidade de despejar todo o banco de dados ou tabelas em um arquivo de texto. Se TABLE for especificado, apenas despeja tabelas que correspondem ao padrão LIKE TABLE.
Uma boa maneira de fazer uma cópia de arquivo usando dump and store, reconstruir o banco de dados posteriormente.
Verifique também esta questão Os comandos SQLite3 .backup e .dump bloqueiam o banco de dados?
fonte
.backup
não funciona como mostrado acima ("argumento FILENAME ausente em .backup")fonte