diff --git a/.travis.yml b/.travis.yml
index a377de10306130f8e66cc3d4d8dc909456f9e14e..5ca72338bfbc3e5d12e0d791bbc1420c6172a0e7 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -16,14 +16,13 @@ matrix:
 
 before_install:
   - go get -v github.com/golang/lint/golint
-  - go install ./cmd/dbinit
 
 install:
   - go version
 
 before_script:
-  - dbinit -db_user user -db_password passwd
-  - dbinit -db_type mongo -admin_user '' -db_user user -db_password passwd
+  - mysql < db/seed.sql
+  - mongo db/seed.js
 
 sudo: false
 script:
diff --git a/README.md b/README.md
index db846d8ae6244bb1f03bbf42390cec5bbb81104b..b4f356dd9f1d539043b80b05c88e16542c651594 100644
--- a/README.md
+++ b/README.md
@@ -151,8 +151,9 @@ server {
 }
 ```
 
-Prior to using MySQL, MongoDB or SQLite you need to create the database and tables using the [dbinit tool](cmd/dbinit/dbinit.go).  
-dbinit hasn't been tested with mongo replica sets.
+Prior to using MySQL, MongoDB or SQLite you need to create the database and tables using [one of the provided files](db).  
+e.g. `mysql < db/seed.sql` or `mongo db/seed.js`.  
+Obviously you should setup a role user for running in prodution.
 
 ### datastore
 
diff --git a/cmd/dbinit/dbinit.go b/cmd/dbinit/dbinit.go
deleted file mode 100644
index 4cf0834675f41618dfbe4c43a9435f49eed4e27a..0000000000000000000000000000000000000000
--- a/cmd/dbinit/dbinit.go
+++ /dev/null
@@ -1,126 +0,0 @@
-package main
-
-import (
-	"database/sql"
-	"flag"
-	"fmt"
-	"log"
-	"strings"
-
-	mgo "gopkg.in/mgo.v2"
-
-	"github.com/go-sql-driver/mysql"
-	_ "github.com/mattn/go-sqlite3"
-)
-
-var (
-	host        = flag.String("host", "localhost", "host[:port]")
-	adminUser   = flag.String("admin_user", "root", "Admin user")
-	adminPasswd = flag.String("admin_password", "", "Admin password")
-	dbUser      = flag.String("db_user", "user", "Database user")
-	dbPasswd    = flag.String("db_password", "passwd", "Admin password")
-	dbType      = flag.String("db_type", "mysql", "Database engine (\"mysql\", \"sqlite\" or \"mongo\")")
-	sqliteDB    = flag.String("db_path", "certs.db", "Path to SQLite database")
-	authDB      = flag.String("authdb", "admin", "Admin database (mongo)")
-
-	certsDB     = "certs"
-	issuedTable = "issued_certs"
-	createTable = `CREATE TABLE IF NOT EXISTS ` + issuedTable + ` (
-			key_id VARCHAR(255) NOT NULL,
-			principals VARCHAR(255) NULL,
-			created_at DATETIME NULL,
-			expires_at DATETIME NULL,
-			revoked BOOLEAN DEFAULT NULL,
-			raw_key TEXT NULL,
-			PRIMARY KEY (key_id)
-		);`
-)
-
-func initSQLite() {
-	db, err := sql.Open("sqlite3", *sqliteDB)
-	if err != nil {
-		log.Fatal(err)
-	}
-	defer db.Close()
-
-	if _, err = db.Exec(createTable); err != nil {
-		log.Fatal(err)
-	}
-}
-
-func initMySQL() {
-	var createTableStmt = []string{
-		`CREATE DATABASE IF NOT EXISTS ` + certsDB + ` DEFAULT CHARACTER SET = 'utf8' DEFAULT COLLATE 'utf8_general_ci';`,
-		`USE ` + certsDB + `;`,
-		createTable,
-		`GRANT ALL PRIVILEGES ON certs.* TO '` + *dbUser + `'@'%' IDENTIFIED BY '` + *dbPasswd + `';`,
-	}
-
-	if len(strings.Split(*host, ":")) != 2 {
-		*host = fmt.Sprintf("%s:3306", *host)
-	}
-	conn := &mysql.Config{
-		User:   *adminUser,
-		Passwd: *adminPasswd,
-		Net:    "tcp",
-		Addr:   *host,
-	}
-	db, err := sql.Open("mysql", conn.FormatDSN())
-	if err != nil {
-		log.Fatalf("Error connecting to database: %v", err)
-	}
-	defer db.Close()
-	if err := db.Ping(); err != nil {
-		log.Fatalf("Unable to connect to database.")
-	}
-	for _, stmt := range createTableStmt {
-		_, err := db.Exec(stmt)
-		if err != nil {
-			log.Fatalf("Error running setup: %v", err)
-		}
-	}
-}
-
-func initMongo() {
-	di := &mgo.DialInfo{
-		Addrs:    strings.Split(*host, ","),
-		Username: *adminUser,
-		Password: *adminPasswd,
-		Database: *authDB,
-	}
-	session, err := mgo.DialWithInfo(di)
-	if err != nil {
-		log.Fatalln(err)
-	}
-	defer session.Close()
-	d := session.DB(certsDB)
-	if err := d.UpsertUser(&mgo.User{
-		Username: *dbUser,
-		Password: *dbPasswd,
-		Roles:    []mgo.Role{mgo.RoleReadWrite},
-	}); err != nil {
-		log.Fatalln(err)
-	}
-	c := d.C(issuedTable)
-	i := mgo.Index{
-		Key:    []string{"keyid"},
-		Unique: true,
-	}
-	if err != c.EnsureIndex(i) {
-		log.Fatalln(err)
-	}
-}
-
-func main() {
-	flag.Parse()
-	switch *dbType {
-	case "mysql":
-		initMySQL()
-	case "mongo":
-		initMongo()
-	case "sqlite":
-		initSQLite()
-	default:
-		log.Fatalf("Invalid database type")
-	}
-}
diff --git a/db/seed.js b/db/seed.js
new file mode 100644
index 0000000000000000000000000000000000000000..c9d62fabc3219e769bf74ed1fa73421a79af9ac9
--- /dev/null
+++ b/db/seed.js
@@ -0,0 +1,3 @@
+conn = new Mongo();
+db = conn.getDB("certs");
+db.issued_certs.createIndex({"keyid": 1}, {unique: true});
diff --git a/db/seed.sql b/db/seed.sql
new file mode 100644
index 0000000000000000000000000000000000000000..cf5e62abf84da1140b4b8b4a3ceda9a4a00571f6
--- /dev/null
+++ b/db/seed.sql
@@ -0,0 +1,13 @@
+CREATE DATABASE IF NOT EXISTS `certs`;
+
+USE `certs`;
+
+CREATE TABLE `issued_certs` (
+  `key_id` varchar(255) NOT NULL,
+  `principals` varchar(255) DEFAULT NULL,
+  `created_at` datetime DEFAULT NULL,
+  `expires_at` datetime DEFAULT NULL,
+  `revoked` tinyint(1) DEFAULT NULL,
+  `raw_key` text,
+  PRIMARY KEY (`key_id`)
+);
diff --git a/server/store/store_test.go b/server/store/store_test.go
index dbe2d955a0d51d344a806d826477ccf1c626c987..281a6149e9ec5704dc19bec1cf97a7de5b829b47 100644
--- a/server/store/store_test.go
+++ b/server/store/store_test.go
@@ -3,9 +3,11 @@ package store
 import (
 	"crypto/rand"
 	"crypto/rsa"
+	"database/sql"
 	"io/ioutil"
 	"os"
-	"os/exec"
+	"os/user"
+	"strings"
 	"testing"
 	"time"
 
@@ -15,10 +17,6 @@ import (
 	"golang.org/x/crypto/ssh"
 )
 
-var (
-	dbConfig = map[string]string{"username": "user", "password": "passwd", "address": "localhost"}
-)
-
 func TestParseCertificate(t *testing.T) {
 	t.Parallel()
 	a := assert.New(t)
@@ -93,8 +91,8 @@ func TestMySQLStore(t *testing.T) {
 	if os.Getenv("MYSQL_TEST") == "" {
 		t.Skip("No MYSQL_TEST environment variable")
 	}
-	dbConfig["type"] = "mysql"
-	db, err := NewSQLStore(dbConfig)
+	u, _ := user.Current()
+	db, err := NewSQLStore(map[string]string{"type": "mysql", "username": u.Username})
 	if err != nil {
 		t.Error(err)
 	}
@@ -106,8 +104,7 @@ func TestMongoStore(t *testing.T) {
 	if os.Getenv("MONGO_TEST") == "" {
 		t.Skip("No MONGO_TEST environment variable")
 	}
-	dbConfig["type"] = "mongo"
-	db, err := NewMongoStore(dbConfig)
+	db, err := NewMongoStore(map[string]string{"type": "mongo"})
 	if err != nil {
 		t.Error(err)
 	}
@@ -121,11 +118,21 @@ func TestSQLiteStore(t *testing.T) {
 		t.Error(err)
 	}
 	defer os.Remove(f.Name())
-	// This is so jank.
-	args := []string{"run", "../../cmd/dbinit/dbinit.go", "-db_type", "sqlite", "-db_path", f.Name()}
-	if err := exec.Command("go", args...).Run(); err != nil {
+
+	seed, err := ioutil.ReadFile("../../db/seed.sql")
+	if err != nil {
 		t.Error(err)
 	}
+	stmts := strings.Split(string(seed), ";")
+	d, _ := sql.Open("sqlite3", f.Name())
+	for _, stmt := range stmts {
+		if !strings.Contains(stmt, "CREATE TABLE") {
+			continue
+		}
+		d.Exec(stmt)
+	}
+	d.Close()
+
 	config := map[string]string{"type": "sqlite", "filename": f.Name()}
 	db, err := NewSQLStore(config)
 	if err != nil {