vitessio/vitess · error
database not found
Error message
database not found
What it means
vtcombo's DeleteKs returns "database not found" when the requested keyspace is not present in vtcombo's in-memory tablet/keyspace map after scanning for a match. vtcombo (used in local test clusters like vitessloader) holds a limited set of keyspaces, so deleting an unknown one yields this plain error. It is a lookup failure before any MySQL work is done.
Source
Thrown at go/vt/vtcombo/tablet_map.go:279
}
err = ts.DeleteTablet(ctx, tablet.alias)
if err != nil {
return err
}
}
}
var ks *vttestpb.Keyspace
index := 0
for _, keyspace := range tpb.Keyspaces {
if keyspace.Name == ksName {
ks = keyspace
break
}
index++
}
if ks == nil {
return errors.New("database not found")
}
conn, err := mysqld.GetDbaConnection(ctx)
if err != nil {
return err
}
defer conn.Close()
for _, shard := range ks.Shards {
q := fmt.Sprintf("DROP DATABASE IF EXISTS `vt_%s_%s`", ksName, shard.GetName())
if _, err = conn.ExecuteFetch(q, 1, false); err != nil {
return err
}
if err := ts.DeleteShard(ctx, ksName, shard.GetName()); err != nil {
return err
}
}
if err = ts.DeleteKeyspace(ctx, ksName); err != nil {View on GitHub (pinned to 01a25a7d17)
Solutions
- Verify the keyspace exists (list keyspaces) before calling DeleteKs
- Fix the keyspace name in the caller
- Treat the error as idempotent cleanup success if double-delete is expected
Example fix
// before
err := tm.DeleteKs(ctx, "commerce", false)
// after
if _, err := ts.GetServingNamespaces(ctx); err == nil { /* optionally check ks exists */ }
if ksExists(topo, "commerce") { err = tm.DeleteKs(ctx, "commerce", false) } Defensive patterns
Strategy: validation
Validate before calling
exists, err := ksExistsInVtcombo(topo, "commerce")
if err != nil { return err }
if !exists { /* skip DeleteKs or fail fast */ } Type guard
func isDatabaseNotFound(err error) bool { return err != nil && err.Error() == "database not found" } Try / catch
err := tm.DeleteKs(ctx, ks, false)
if err != nil && strings.Contains(err.Error(), "database not found") {
// treat as already-deleted (idempotent cleanup)
return nil
} Prevention
- List keyspaces before deleting in cleanup scripts
- Guard against double deletes
- Verify keyspace names against created fixtures
When it happens
Trigger: Calling DeleteKs with a keyspace name that was never created in the vtcombo process; deleting a keyspace twice; a race where another actor already removed the keyspace from the map.
Common situations: Test teardown scripts deleting keyspaces that failed to be created; typos in keyspace names in local dev setups; concurrent test cleanup.
Related errors
- CreateKeyspace(%v) failed: %v
- EnsureVSchema(%v) failed: %v
- invalid joined path
- VDiff not implemented in vtcombo
- not implemented in vtcombo
AI-assisted analysis of vitessio/vitess@01a25a7d17 (2026-09-01).
Data as JSON: /api/errors/1dae09324d6117ac.
Report an issue: GitHub.