Який правильний спосіб це зробити? Чи просто скопіювати файл .sq3?
Що робити, якщо на сайті є користувачі, а файл копіюється під час копіювання?
Який правильний спосіб це зробити? Чи просто скопіювати файл .sq3?
Що робити, якщо на сайті є користувачі, а файл копіюється під час копіювання?
Відповіді:
Інструмент командного рядка sqlite3 містить .backup
крапка .
Ви можете підключитися до бази даних за допомогою:
sqlite3 my_database.sq3
і запустіть команду резервної точки за допомогою:
.backup backup_file.sq3
Замість інтерактивного підключення до бази даних ви також можете зробити резервну копію та закрити підключення після
sqlite3 my_database.sq3 ".backup 'backup_file.sq3'"
У будь-якому випадку результатом є копія з іменем backup_file.sq3
бази даних my_database.sq3
.
Це відрізняється від регулярного копіювання файлів, оскільки воно опікується всіма користувачами, які зараз працюють над базою даних. У базі даних встановлені належні блокування, тому резервне копіювання виконується виключно.
sqlite3 m_database.sq3 ".backup m_database.sq3.bak"
.backup - найкращий спосіб.
sqlite3 my_database .backup my_database.back
Ви також можете спробувати команду .dump, це дає вам можливість скидати всю базу даних або таблиці в текстовий файл. Якщо вказано ТАБЛИЦЮ, вивантажувати лише таблиці, що відповідають ТАБЛИЦІ ПОДОБНОГО.
sqlite3 my_database .dump > my_database.back
Хороший спосіб зробити архівну копію за допомогою дампа та зберігання, реконструювати базу даних пізніше.
sqlite3 my_database .dump | gzip -c > my_database.dump.gz
zcat my_database.dump.gz | sqlite3 my_database
Також перевірте це питання. Чи блокують команди SQLite3 .backup та .dump базу даних?
.backup
не працює, як показано вище ("відсутній аргумент FILENAME на .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();
}