Table A-7. Generic SQLite backend capabilities
Native | Yes |
Master | Yes |
Slave | Yes |
Superslave | Yes |
Module name | gsqlite |
Launch name | gsqlite |
This backend retrieves all data from a SQLite database, which is a RDBMS that's embedded into the application itself, so you won't need to be running a seperate server process. It also reduces overhead, and simplifies installation. At http://www.sqlite.org you can find more information about SQLite.
As this is a generic backend, built on top of the gSql framework, you can specify all queries as documented in Generic MySQL and PgSQL backends.
SQLite exists in two incompatible versions, numbered 2 and 3, and from 2.9.21 onwards, PowerDNS supports both. It is recommended to go with version 3 as it is newer, has better performance and is actively maintained.
Before you can begin compiling PowerDNS with the SQLite backend you need to have the SQLite utility and library installed on your system. You can download these from http://www.sqlite.org/download.html, or you can use packages (if your distribution provides those).
When you've installed the library you can use: ./configure --with-modules="gsqlite" or ./configure --with-modules="gsqlite3" to configure PowerDNS to use the SQLite backend. Compilation can then proceed as usual.
SQLite is included in most PowerDNS binary releases.
Before you can use this backend you first have to set it up and fill it with data. The default setup conforms to the following schema:
create table domains ( id INTEGER PRIMARY KEY, name VARCHAR(255) NOT NULL, master VARCHAR(128) DEFAULT NULL, last_check INTEGER DEFAULT NULL, type VARCHAR(6) NOT NULL, notified_serial INTEGER DEFAULT NULL, account VARCHAR(40) DEFAULT NULL ); CREATE UNIQUE INDEX name_index ON domains(name); CREATE TABLE records ( id INTEGER PRIMARY KEY, domain_id INTEGER DEFAULT NULL, name VARCHAR(255) DEFAULT NULL, type VARCHAR(6) DEFAULT NULL, content VARCHAR(255) DEFAULT NULL, ttl INTEGER DEFAULT NULL, prio INTEGER DEFAULT NULL, change_date INTEGER DEFAULT NULL ); CREATE INDEX rec_name_index ON records(name); CREATE INDEX nametype_index ON records(name,type); CREATE INDEX domain_id ON records(domain_id); create table supermasters ( ip VARCHAR(25) NOT NULL, nameserver VARCHAR(255) NOT NULL, account VARCHAR(40) DEFAULT NULL );
This schema contains all elements needed for master, slave and superslave operation.
After you have created the database you probably want to fill it with data. If you have a BIND zonefile it's as easy as: zone2sql --zone=myzonefile --gmysql | sqlite powerdns.sqlite, but you can also use AXFR (or insert data manually).
To communicate with a SQLite database, use either the 'sqlite' or 'sqlite3' program, and feed it SQL.
The last thing you need to do is telling PowerDNS to use the SQLite backend.
# in pdns.conf launch=gsqlite # or gsqlite3 gsqlite-database=<path to your SQLite database> # or gsqlite3-database
Then you can start PowerDNS and it should notify you that a connection to the database was made.