In beiden Fällen ist das Ergebnis eine Kopie mit dem Namen backup_file.sq3der Datenbank my_database.sq3.
Es unterscheidet sich vom regulären Kopieren von Dateien, da es sich um alle Benutzer kümmert, die derzeit an der Datenbank arbeiten. Für die Datenbank sind geeignete Sperren festgelegt, sodass die Sicherung ausschließlich erfolgt.
Sie können alles in einer Zeile tun ...sqlite3 m_database.sq3 ".backup m_database.sq3.bak"
Mark Setchell
@Googie: Können wir es für die Replikation verwenden? oder
Montag,
4
@mOna: Dies ist nur ein Mechanismus zum Erstellen von Backups. Replikation bedeutet, Änderungen im laufenden Betrieb weiterzugeben (eine Art verteilte Datenbank), was für Sie nicht der Fall ist.
Googie
Danke für die Antwort :)
Montag,
1
@RonJohn Es erstellt tatsächlich eine Kopie einer Datei, stellt aber auch sicher, dass der Schreibzugriff auf die Datenbank durch geeignete Sperren eingeschränkt ist. Es handelt sich also um eine atomare Operation, keine Zwischenänderungen.
Googie
5
.backup ist der beste Weg.
sqlite3 my_database .backup my_database.back
Sie können auch den Befehl .dump ausprobieren, mit dem Sie die gesamte Datenbank oder Tabellen in eine Textdatei sichern können. Wenn TABLE angegeben ist, werden nur Dump-Tabellen ausgegeben, die dem LIKE-Muster TABLE entsprechen.
sqlite3 my_database .dump> my_database.back
Rekonstruieren Sie die Datenbank zu einem späteren Zeitpunkt, um mithilfe von Dump and Store eine Archivierungskopie zu erstellen.
Auf SQLite 3.8.2 .backupfunktioniert nicht wie oben gezeigt ("fehlendes FILENAME-Argument auf .backup")
Francesc Rosas
4
Dies ist die beste Antwort. Wenn Sie .backup für eine von vielen verwendete Arbeitsdatenbank verwenden, funktioniert dies möglicherweise nicht, da die Datenbank irgendwann gesperrt ist. Wenn Sie dies in einem CRON verwenden, funktioniert es nicht und es wird Ihnen nicht mitgeteilt, dass ein Fehler vorliegt. Verwenden Sie besser .dump (funktioniert immer) oder die von SQLite angegebene API.
Memristor
@Memristor Aber sperrt .dump die DB nicht für andere? FWIW, ich würde eine fehlgeschlagene Sicherung (mit E-Mail an den Administrator) einem gestörten Dienst vorziehen.
Torsten Bronger
1
Bitte korrigieren Sie die .backup-Syntax in Ihrer Antwort. Es braucht keinen '>' Operator
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();}
Bedeuten Sie programmgesteuertes Kopieren von Datenbankdateien auf Dateisystemebene?
Andreas Tasoulas
4
1. Sie sagen nicht einmal, welche Sprache dieser Code ist. Das OP sagte, er benutze PHP, aber dies scheint Java-Code zu sein. 2. Sie kopieren eine Datei byteweise. Was sollte der Vorteil davon sein? Java (und PHP) haben Methoden zum Kopieren von Dateien. Lesen Sie docs.oracle.com/javase/tutorial/essential/io/copy.html 3. Damit wird das Problem nicht behoben, in das die Datenbank möglicherweise geschrieben wird, während Sie sie kopieren.
Antworten:
Das Befehlszeilentool sqlite3 enthält den
.backup
Befehl dot .Sie können eine Verbindung zu Ihrer Datenbank herstellen mit:
und führen Sie den Sicherungspunktbefehl aus mit:
Anstelle der interaktiven Verbindung zur Datenbank können Sie auch die Sicherung durchführen und die Verbindung anschließend mit schließen
In beiden Fällen ist das Ergebnis eine Kopie mit dem Namen
backup_file.sq3
der Datenbankmy_database.sq3
.Es unterscheidet sich vom regulären Kopieren von Dateien, da es sich um alle Benutzer kümmert, die derzeit an der Datenbank arbeiten. Für die Datenbank sind geeignete Sperren festgelegt, sodass die Sicherung ausschließlich erfolgt.
quelle
sqlite3 m_database.sq3 ".backup m_database.sq3.bak"
.backup ist der beste Weg.
Sie können auch den Befehl .dump ausprobieren, mit dem Sie die gesamte Datenbank oder Tabellen in eine Textdatei sichern können. Wenn TABLE angegeben ist, werden nur Dump-Tabellen ausgegeben, die dem LIKE-Muster TABLE entsprechen.
Rekonstruieren Sie die Datenbank zu einem späteren Zeitpunkt, um mithilfe von Dump and Store eine Archivierungskopie zu erstellen.
Überprüfen Sie auch diese Frage. Sperren die SQLite3-Befehle .backup und .dump die Datenbank?
quelle
.backup
funktioniert nicht wie oben gezeigt ("fehlendes FILENAME-Argument auf .backup")quelle