Bagaimanapun hasilnya adalah salinan bernama backup_file.sq3dari database my_database.sq3.
Ini berbeda dari penyalinan file secara teratur, karena menangani semua pengguna yang saat ini mengerjakan database. Ada kunci yang tepat yang ditetapkan pada database, sehingga pencadangan dilakukan secara eksklusif.
Anda dapat melakukan semuanya dalam satu baris ...sqlite3 m_database.sq3 ".backup m_database.sq3.bak"
Mark Setchell
@ Googie: Bisakah kita menggunakannya untuk replikasi? atau
mOna
4
@mOna: Ini hanyalah mekanisme untuk membuat cadangan. Replikasi berarti menyebarkan perubahan dengan cepat (semacam database terdistribusi), yang tidak akan berhasil untuk Anda.
Googie
Terima kasih atas balasannya :)
mOna
1
@RonJohn Ini sebenarnya membuat salinan file, tetapi juga menjamin, bahwa akses tulis ke database dibatasi dengan kunci yang tepat, jadi ini adalah operasi atom, tanpa modifikasi menengah.
Googie
6
.backup adalah cara terbaik.
sqlite3 my_database .backup my_database.back
Anda juga dapat mencoba perintah .dump, ini memberi Anda kemampuan untuk membuang seluruh database atau tabel ke dalam file teks. Jika TABLE ditentukan, hanya dump tabel yang cocok dengan pola LIKE TABLE.
sqlite3 my_database .dump > my_database.back
Cara yang baik untuk membuat salinan arsip menggunakan dump and store, Rekonstruksi database di lain waktu.
Pada SQLite 3.8.2, .backuptidak berfungsi seperti yang ditunjukkan di atas ("argumen FILENAME hilang pada .backup")
Francesc Rosas
4
Ini jawaban terbaik. Jika Anda menggunakan .backup pada database yang berfungsi yang digunakan oleh banyak orang, ini mungkin tidak berfungsi karena di beberapa titik database terkunci. Jadi jika Anda menggunakan ini di CRON, itu tidak akan berfungsi dan tidak akan memberi tahu Anda bahwa ada kesalahan ... lebih baik gunakan .dump (selalu berfungsi) atau API yang diberikan oleh SQLite.
Memristor
@Memristor Tapi bukankah .dump mengunci DB untuk orang lain? FWIW, saya lebih memilih cadangan yang gagal (dengan email ke admin) ke layanan yang terganggu.
Torsten Bronger
1
Harap perbaiki sintaks .backup dalam jawaban Anda. Tidak perlu 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();
}
Apakah Anda menyiratkan penyalinan terprogram di tingkat sistem file file database?
Andreas Tasoulas
4
1. Anda bahkan tidak mengatakan bahasa apa kode ini. OP mengatakan dia menggunakan PHP tapi ini sepertinya kode java. 2. Anda menyalin file byte demi byte. Apa untungnya melakukannya? Java (dan php) memiliki metode untuk menyalin file. Baca docs.oracle.com/javase/tutorial/essential/io/copy.html 3. Ini tidak mengatasi masalah yang mungkin membuat db ditulis saat Anda menyalinnya.
Jawaban:
Alat baris perintah sqlite3 menampilkan
.backup
perintah titik .Anda dapat terhubung ke database Anda dengan:
dan jalankan perintah titik cadangan dengan:
Selain koneksi interaktif ke database, Anda juga dapat melakukan backup dan menutup koneksi setelahnya dengan
Bagaimanapun hasilnya adalah salinan bernama
backup_file.sq3
dari databasemy_database.sq3
.Ini berbeda dari penyalinan file secara teratur, karena menangani semua pengguna yang saat ini mengerjakan database. Ada kunci yang tepat yang ditetapkan pada database, sehingga pencadangan dilakukan secara eksklusif.
sumber
sqlite3 m_database.sq3 ".backup m_database.sq3.bak"
.backup adalah cara terbaik.
Anda juga dapat mencoba perintah .dump, ini memberi Anda kemampuan untuk membuang seluruh database atau tabel ke dalam file teks. Jika TABLE ditentukan, hanya dump tabel yang cocok dengan pola LIKE TABLE.
Cara yang baik untuk membuat salinan arsip menggunakan dump and store, Rekonstruksi database di lain waktu.
Periksa juga pertanyaan ini Apakah perintah SQLite3 .backup dan .dump mengunci database?
sumber
.backup
tidak berfungsi seperti yang ditunjukkan di atas ("argumen FILENAME hilang pada .backup")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(); }
sumber