You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
2.6 KiB
Markdown
63 lines
2.6 KiB
Markdown
# Restoring from a SQLite dump file
|
|
|
|
rqlite supports loading a node directly from a SQLite dump file. This is a fast and efficient manner to initialize a system from an existing SQLite database, or to restore from an existing [node backup](https://github.com/rqlite/rqlite/blob/master/DOC/BACKUPS.md). An example restore is shown below.
|
|
|
|
## Examples
|
|
The following examples show a trivial database being generated by `sqlite3`, the SQLite file being backed up, converted to the corresponding list of SQL commands, and then loaded into a rqlite node listening on localhost.
|
|
|
|
### rqlite CLI
|
|
```
|
|
~ $ sqlite3 restore.sqlite
|
|
SQLite version 3.22.0 2018-01-22 18:45:57
|
|
Enter ".help" for usage hints.
|
|
sqlite> CREATE TABLE foo (id integer not null primary key, name text);
|
|
sqlite> INSERT INTO "foo" VALUES(1,'fiona');
|
|
sqlite>
|
|
~ $ echo '.dump' | sqlite3 restore.sqlite > restore.dump # Convert SQLite database file to set of SQL commands
|
|
~ $ ./rqlite
|
|
Welcome to the rqlite CLI. Enter ".help" for usage hints.
|
|
127.0.0.1:4001> .schema
|
|
+-----+
|
|
| sql |
|
|
+-----+
|
|
127.0.0.1:4001> .restore restore.dump
|
|
last inserted ID: 1
|
|
rows affected: 1
|
|
database restored successfully
|
|
127.0.0.1:4001> select * from foo
|
|
+----+-------+
|
|
| id | name |
|
|
+----+-------+
|
|
| 1 | fiona |
|
|
+----+-------+
|
|
```
|
|
### HTTP
|
|
_Be sure to set the Content-type header as shown._
|
|
|
|
```bash
|
|
~ $ sqlite3 restore.sqlite
|
|
SQLite version 3.14.1 2016-08-11 18:53:32
|
|
Enter ".help" for usage hints.
|
|
sqlite> CREATE TABLE foo (id integer not null primary key, name text);
|
|
sqlite> INSERT INTO "foo" VALUES(1,'fiona');
|
|
sqlite>
|
|
~ $ echo '.dump' | sqlite3 restore.sqlite > restore.dump # Convert SQLite database file to set of SQL commands.
|
|
~ $ curl -XPOST localhost:4001/db/load -H "Content-type: text/plain" --data-binary @restore.dump
|
|
```
|
|
|
|
Let's connect to the node, and check that the data has been loaded correctly.
|
|
```bash
|
|
$ rqlite
|
|
127.0.0.1:4001> SELECT * FROM foo
|
|
+----+-------+
|
|
| id | name |
|
|
+----+-------+
|
|
| 1 | fiona |
|
|
+----+-------+
|
|
```
|
|
|
|
**Note that you must convert the SQLite file (in the above examples the file named `restore.sqlite`) to the list of SQL commands**. You cannot restore using the actual SQLite database file.
|
|
|
|
## Caveats
|
|
The behavior of the restore operation when data already exists on the cluster is undefined -- you should only restore to a cluster that has no data, or a brand-new cluster. Also, please **note that SQLite dump files normally contain a command to disable Foreign Key constraints**. To account for this if rqlite is running with Foreign Key constraints enabled, rqlite will automatically reenable Foreign Key constraints after the restore operation completes.
|