De cualquier manera, el resultado es una copia con el nombre backup_file.sq3de la base de datos my_database.sq3.
Es diferente de la copia de archivos regular, porque se ocupa de cualquier usuario que esté trabajando actualmente en la base de datos. Hay bloqueos adecuados establecidos en la base de datos, por lo que la copia de seguridad se realiza exclusivamente.
Puedes hacerlo todo en una sola línea ...sqlite3 m_database.sq3 ".backup m_database.sq3.bak"
Mark Setchell
@Googie: ¿Podemos usarlo para la replicación? o
lunes
4
@mOna: este es solo un mecanismo para realizar copias de seguridad. La replicación significa propagar los cambios sobre la marcha (una especie de base de datos distribuida), lo que no es suficiente para usted.
Googie
Gracias por la respuesta :)
mOna
1
@RonJohn Realmente hace una copia de un archivo, pero también asegura que el acceso de escritura a la base de datos está restringido con los bloqueos adecuados, por lo que es una operación atómica, sin modificaciones intermedias.
Googie
5
.backup es la mejor manera.
sqlite3 my_database .backup my_database.back
También puede probar el comando .dump, que le da la posibilidad de volcar la base de datos completa o tablas en un archivo de texto. Si se especifica TABLE, solo volcar tablas que coincidan con el patrón LIKE TABLE.
sqlite3 my_database .dump> my_database.back
Una buena forma de hacer una copia de archivo usando dump and store es reconstruir la base de datos más tarde.
En SQLite 3.8.2, .backupno funciona como se muestra arriba ("falta el argumento FILENAME en .backup")
Francesc Rosas
4
Esta es la mejor respuesta. Si está utilizando .backup en una base de datos en funcionamiento utilizada por muchos, es posible que no funcione porque en algún momento la base de datos está bloqueada. Entonces, si está usando esto en un CRON, no funcionará y no le dirá que hay un error ... mejor use .dump (siempre funciona) o la API proporcionada por SQLite.
Memristor
@Memristor ¿Pero no bloquea .dump la base de datos para otros? FWIW, preferiría una copia de seguridad fallida (con correo al administrador) a un servicio interrumpido.
Torsten Bronger
1
Corrija la sintaxis .backup en su respuesta. No necesita 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();}
¿Está insinuando la copia programática en el nivel del sistema de archivos de los archivos de la base de datos?
Andreas Tasoulas
4
1. Ni siquiera dices en qué idioma es este código. El OP dijo que está usando PHP, pero parece ser un código Java. 2. Copia un archivo byte a byte. ¿Cuál debería ser la ventaja de hacerlo? Java (y php) tienen métodos para copiar archivos. Lea docs.oracle.com/javase/tutorial/essential/io/copy.html 3. Esto no resuelve el problema en el que podría escribirse la base de datos mientras lo copia.
Respuestas:
La herramienta de línea de comandos sqlite3 presenta el
.backup
comando dot .Puede conectarse a su base de datos con:
y ejecute el comando backup dot con:
En lugar de la conexión interactiva a la base de datos, también puede hacer la copia de seguridad y luego cerrar la conexión con
De cualquier manera, el resultado es una copia con el nombre
backup_file.sq3
de la base de datosmy_database.sq3
.Es diferente de la copia de archivos regular, porque se ocupa de cualquier usuario que esté trabajando actualmente en la base de datos. Hay bloqueos adecuados establecidos en la base de datos, por lo que la copia de seguridad se realiza exclusivamente.
fuente
sqlite3 m_database.sq3 ".backup m_database.sq3.bak"
.backup es la mejor manera.
También puede probar el comando .dump, que le da la posibilidad de volcar la base de datos completa o tablas en un archivo de texto. Si se especifica TABLE, solo volcar tablas que coincidan con el patrón LIKE TABLE.
Una buena forma de hacer una copia de archivo usando dump and store es reconstruir la base de datos más tarde.
También verifique esta pregunta ¿Los comandos SQLite3 .backup y .dump bloquean la base de datos?
fuente
.backup
no funciona como se muestra arriba ("falta el argumento FILENAME en .backup")fuente