{"record":{"id":"ddffef7544a90bd2","repo":"vitessio/vitess","slug":"empty-create-database-statement-for-v","errorCode":null,"errorMessage":"empty create database statement for %v","messagePattern":"empty create database statement for (.+?)","errorType":"error_code","errorClass":null,"httpStatus":null,"severity":"error","filePath":"go/vt/mysqlctl/schema.go","lineNumber":96,"sourceCode":"\t\tencodedTables[i] = sqltypes.EncodeStringSQL(tableName)\n\t}\n\n\treturn \"(\" + strings.Join(encodedTables, \", \") + \")\", nil\n}\n\n// GetSchema returns the schema for database for tables listed in\n// tables. If tables is empty, return the schema for all tables.\nfunc (mysqld *Mysqld) GetSchema(ctx context.Context, dbName string, request *tabletmanagerdatapb.GetSchemaRequest) (*tabletmanagerdatapb.SchemaDefinition, error) {\n\tsd := &tabletmanagerdatapb.SchemaDefinition{}\n\tbacktickDBName := sqlescape.EscapeID(dbName)\n\n\t// get the database creation command\n\tqr, fetchErr := mysqld.FetchSuperQuery(ctx, \"SHOW CREATE DATABASE IF NOT EXISTS \"+backtickDBName)\n\tif fetchErr != nil {\n\t\treturn nil, fetchErr\n\t}\n\tif len(qr.Rows) == 0 {\n\t\treturn nil, fmt.Errorf(\"empty create database statement for %v\", dbName)\n\t}\n\tsd.DatabaseSchema = strings.Replace(qr.Rows[0][1].ToString(), backtickDBName, \"{{.DatabaseName}}\", 1)\n\n\ttds, err := mysqld.collectBasicTableData(ctx, dbName, request.Tables, request.ExcludeTables, request.IncludeViews)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tctx, cancel := context.WithCancel(ctx)\n\tdefer cancel()\n\n\tallErrors := &concurrency.AllErrorRecorder{}\n\n\teg, ctx := errgroup.WithContext(ctx)\n\teg.SetLimit(getSchemaConcurrency)\n\n\t// Get per-table schema concurrently.\n\ttableNames := make([]string, 0, len(tds))","sourceCodeStart":78,"sourceCodeEnd":114,"githubUrl":"https://github.com/vitessio/vitess/blob/01a25a7d176f94613b8d59d799f438380a8760e4/go/vt/mysqlctl/schema.go#L78-L114","documentation":"GetSchema runs `SHOW CREATE DATABASE` to capture the database creation statement. If MySQL returns no rows for that statement (no create command available), this error is thrown and schema export aborts.","triggerScenarios":"Calling mysqld.GetSchema for a database where SHOW CREATE DATABASE returns zero rows — e.g. the database was dropped concurrently, an unusual empty/nonexistent db name, or a server not returning the create statement.","commonSituations":"Race between database drop and schema fetch; querying a db name with case/charset mismatch so MySQL resolves nothing; against proxies that don't implement SHOW CREATE DATABASE rows properly.","solutions":["Verify the database exists: run `SHOW CREATE DATABASE <name>` manually with the exact name","Confirm the keyspace/db name spelling and case matches what MySQL knows","Re-fetch after any concurrent DROP/CREATE migration finishes","Check the MySQL variant/proxy implements SHOW CREATE DATABASE with rows"],"exampleFix":"// before: GetSchema(ctx, \"VtData\", ...) for a dropped db\n// after: ensure db exists first\n// CREATE DATABASE IF NOT EXISTS `VtData`; then retry GetSchema","handlingStrategy":"try-catch","validationCode":"qr, err := mysqld.FetchSuperQuery(ctx, \"SHOW DATABASES LIKE '\"+dbName+\"'\")\nif err == nil && len(qr.Rows) == 0 {\n    return fmt.Errorf(\"database %s does not exist\", dbName)\n}","typeGuard":null,"tryCatchPattern":"sd, err := mysqld.GetSchema(ctx, dbName, nil, nil, false)\nif err != nil && strings.Contains(err.Error(), \"empty create database statement\") {\n    log.Warn(\"database missing or unreportable; recreating before retry\", slog.String(\"db\", dbName))\n    return retryAfterCreateDatabase(dbName)\n}","preventionTips":["Verify db existence before schema export","Avoid concurrent DROP DATABASE while exporting","Check SHOW CREATE DATABASE support on non-standard proxies"],"tags":["mysql","schema","mysqlctl"],"backgroundTag":"empty-schema-result","analyzedSha":"01a25a7d176f94613b8d59d799f438380a8760e4","analyzedAt":"2026-09-01T17:28:30.605Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}