Как загрузить файл БД SQLite3 в локальную систему?
Если вы используете что-то вроде FTP или SCP, чтобы получить его напрямую, когда сервер подключен к сети, вполне возможно, что вы получите поврежденныйфайл.Подумайте об этом: для передачи такого файла через Интернет потребуется не менее нескольких секунд - несколько секунд, в течение которых ваш сайт все еще находится в сети и транзакции выполняются с файлом БД сервера.Таким образом, первые байты файла будут отражать, например, транзакцию 1003, а последние байты будут отражать транзакцию 1015. По сути, файл БД изменяется, пока вы все еще его скачиваете.
И мы до сих пор не попали в файлы журнала БДи частичные транзакции.
Вам нужна атомарная копия файла БД.Даже cp
на сервере может быть недостаточно быстрым.Вам нужен способ блокировать БД при копировании файла.
Есть три способа сделать это:
Использовать sqlite3
Оболочка утилит на сервере и .dump
БД.Затем вы можете сжать дамп SQL, загрузить его и восстановить локальную базу данных.Немного громоздко, но почти гарантированно сработает.
Используйте API резервного копирования SQLite3 .Утилита sqlite3 имеет команду .backup
, которая делает то же самое.Тогда вы можете просто скачать новый файл БД.К сожалению, старые версии SQLite могут не поддерживать это.
Заблокируйте файл БД с помощью утилиты оболочки sqlite3, используйте cp
, чтобы скопировать его, разблокировать.Старый, немного опасный способ, поэтому я не буду вдаваться в подробности.
Остановите сервер, чтобы никакие транзакции не выполнялись, скопируйте файл, перезапустите.Я не считаю это фактическим решением, поэтому оно не включено в окончательный счет.
Кстати, эта страница содержит несколько распространенных способов испортитьБД SQLite3 - возможно, вы захотите взглянуть ...