В любом случае результатом будет копия с именем backup_file.sq3базы данных my_database.sq3.
Это отличается от обычного копирования файлов, поскольку оно заботится обо всех пользователях, работающих в настоящее время с базой данных. В базе данных установлены надлежащие блокировки, поэтому резервное копирование выполняется исключительно.
Вы можете сделать все в одной строке ...sqlite3 m_database.sq3 ".backup m_database.sq3.bak"
Марк Сетчелл
@Googie: Можем ли мы использовать его для репликации? или
mOna
4
@mOna: Это всего лишь механизм для создания резервных копий. Репликация означает распространение изменений «на лету» (своего рода распределенная база данных), чего вы не сделаете.
Googie
Спасибо за ответ :)
mOna
1
@RonJohn Фактически он делает копию файла, но также гарантирует, что доступ для записи в базу данных ограничен соответствующими блокировками, поэтому это атомарная операция, без промежуточных модификаций.
Googie
6
.backup - лучший способ.
sqlite3 my_database .backup my_database.back
вы также можете попробовать команду .dump, она дает вам возможность выгрузить всю базу данных или таблицы в текстовый файл. Если указано TABLE, дампить только таблицы, соответствующие шаблону LIKE TABLE.
sqlite3 my_database .dump > my_database.back
Хороший способ сделать архивную копию с помощью дампа и сохранения, реконструировать базу данных позже.
В SQLite 3.8.2 .backupне работает, как показано выше («отсутствует аргумент FILENAME в .backup»)
Франсеск Росас
4
Это лучший ответ. Если вы используете .backup в рабочей базе данных, используемой многими, он может не работать, потому что в какой-то момент база данных заблокирована. Поэтому, если вы используете это в CRON, это не сработает и не сообщит вам об ошибке ... лучше используйте .dump (всегда работает) или API, предоставленный SQLite.
Memristor
@Memristor Но разве .dump не блокирует БД для других? FWIW, я бы предпочел неудачное резервное копирование (с письмом админу) прерванной службе.
Торстен Бронгер 09
1
Исправьте синтаксис .backup в своем ответе. Оператор '>' здесь не нужен
Нашев 06
-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();
}
Вы имеете в виду программное копирование файлов базы данных на уровне файловой системы?
Андреас Тасулас
4
1. Вы даже не говорите, на каком языке этот код. OP сказал, что он использует PHP, но, похоже, это java-код. 2. Копируете файл побайтно. Какая в этом должна быть польза? В Java (и php) есть методы для копирования файлов. Прочтите docs.oracle.com/javase/tutorial/essential/io/copy.html 3. Это не решает проблему, которая может быть записана в базу данных при ее копировании.
Ответы:
Инструмент командной строки sqlite3 содержит команду
.backup
точки .Вы можете подключиться к своей базе данных с помощью:
и запустите команду точки резервного копирования с помощью:
Вместо интерактивного подключения к базе данных вы также можете сделать резервную копию и затем закрыть соединение с помощью
В любом случае результатом будет копия с именем
backup_file.sq3
базы данныхmy_database.sq3
.Это отличается от обычного копирования файлов, поскольку оно заботится обо всех пользователях, работающих в настоящее время с базой данных. В базе данных установлены надлежащие блокировки, поэтому резервное копирование выполняется исключительно.
источник
sqlite3 m_database.sq3 ".backup m_database.sq3.bak"
.backup - лучший способ.
вы также можете попробовать команду .dump, она дает вам возможность выгрузить всю базу данных или таблицы в текстовый файл. Если указано TABLE, дампить только таблицы, соответствующие шаблону LIKE TABLE.
Хороший способ сделать архивную копию с помощью дампа и сохранения, реконструировать базу данных позже.
Также проверьте этот вопрос. Блокируют ли базы данных команды 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(); }
источник