What's the proper way to do it? Do I just copy the .sq3 file?
What if there are users on the site and file is being written while it's being copied?
What's the proper way to do it? Do I just copy the .sq3 file?
What if there are users on the site and file is being written while it's being copied?
The sqlite3 command line tool features the .backup
dot command.
You can connect to your database with:
sqlite3 my_database.sq3
and run the backup dot command with:
.backup backup_file.sq3
Instead of the interactive connection to the database, you can also do the backup and close the connection afterwards with
sqlite3 my_database.sq3 ".backup 'backup_file.sq3'"
Either way the result is a copy named backup_file.sq3
of the database my_database.sq3
.
It's different from regularly file copying, because it takes care of any users currently working on the database. There are proper locks set on the database, so the backup is done exclusively.
.backup
is the best way:
sqlite3 my_database ".backup my_database.back"
you can also try .dump
command, it gives you the ability to dump the entire database or tables into a text file. If TABLE specified, only dump tables matching LIKE pattern TABLE.
sqlite3 my_database .dump > my_database.back
A good way to make an archival copy using dump and store, Reconstruct the database at a later time.
sqlite3 my_database .dump | gzip -c > my_database.dump.gz
zcat my_database.dump.gz | sqlite3 my_database
Also check this question Do the SQLite3 .backup and .dump commands lock the database?
For streaming replication of SQLite, check out Litestream.
Compared to using the sqlite3-backup command, this is automatic, and incremental.
If you need to restore from backup, the data will be a lot more up to date than if you did a regular backup every hour for example.
Short and simple answer would be
sqlite3 m_database.sq3 ".backup m_database.sq3.bak"
People who want to do the backup from within their app should check out the backup API at https://www.sqlite.org/backup.html
In the simplest form you can run from project root a command of the following form (default format is JSON, other options include XML, YAML, see the links below):
./manage.py dumpdata --output mydata.json
You might want instead to dump only specific django apps in your project, e.g. assuming you created your app with manage.py startapp dinsdaleapp
:
./manage.py dumpdata dinsdaleapp --output dinsdaleapp-data.json
It's also possible to only dump specific models:
./manage.py dumpdata dinsdaleapp.institution -o institutions-data.json
To restore the previously created dump
./manage.py loaddata mydata.json
To dump flatpages:
./manage.py dumpdata flatpages -o flatpages.json
In case you prefer a timestamped backup:
./manage.py dumpdata flatpages -o dumps/flatpages-$(date +%Y-%m-%d_%H_%M_%S).json
For details and options see:
./manage.py dumpdata --help
./manage.py loaddata --help
Also see: