Skip to content

fix(database): Sync prefixlen of FTS index during restoration#459

Open
tanmoysrt wants to merge 1 commit intofrappe:developfrom
tanmoysrt:fix_physical_restoration_issue
Open

fix(database): Sync prefixlen of FTS index during restoration#459
tanmoysrt wants to merge 1 commit intofrappe:developfrom
tanmoysrt:fix_physical_restoration_issue

Conversation

@tanmoysrt
Copy link
Member

@tanmoysrt tanmoysrt commented Feb 25, 2026

We have started getting this error message while restoring tables with FTS Index :

(1808, "Schema mismatch (Index ft_description field description prefix len 0 doesn't match metadata file value 1))

Root Cause :

MariaDB has some special validation in place for FTS index. It really matters, how the FTS index was added in the database at first place. If we don't follow the same flow to re-create FTS, it will panic.

For example, If we add FTS Index via ALTER and take physical backup of the database

CREATE TABLE articles (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(200),
    content TEXT
) ENGINE=InnoDB;
ALTER TABLE articles ADD FULLTEXT INDEX ft_content (content);

We can't restore the tablespace ever, if we have created the target table with FTS index with the following syntax

CREATE TABLE articles (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(200),
    content TEXT,
    FULLTEXT INDEX ft_content (content)
) ENGINE=InnoDB;

SHOW CREATE TABLE ..... will always include FTS Index Creation regardless how it was added.

Solution :

The prefixlen metadata is available inside the .cfg file only (which generates during tablespace export). So, we have to parse the cfg file.

Source : https://github.com/MariaDB/server/blob/d755574c47f101917aee29ea847e214c24c92c0b/storage/innobase/row/row0import.cc#L2816

So, if the FTS indexes prefixlen is 1 according to .cfg file, we have to drop the FTS index and re-create using alter.

@tanmoysrt tanmoysrt force-pushed the fix_physical_restoration_issue branch from c2e92de to 6d2eef3 Compare February 25, 2026 06:35
@tanmoysrt tanmoysrt requested a review from Copilot February 25, 2026 06:47
@tanmoysrt tanmoysrt force-pushed the fix_physical_restoration_issue branch from 6d2eef3 to 711eb09 Compare February 25, 2026 06:51
@tanmoysrt tanmoysrt changed the title fix(database): Ensure to sync prefixlen of FTS index during restoration fix(database): Sync prefixlen of FTS index during restoration Feb 25, 2026
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR fixes a schema mismatch error during database restoration by ensuring FTS (Full-Text Search) index prefix lengths are properly synchronized from backup metadata. The issue occurs because MariaDB validates that FTS indexes are recreated using the same method (inline vs ALTER) as the original, which is tracked via the prefixlen field in .cfg files.

Changes:

  • Added a binary parser to extract FTS index prefix length metadata from MariaDB .cfg files
  • Modified the restoration workflow to collect FTS metadata and recreate indexes with correct prefix lengths when needed
  • Added test coverage for the .cfg file parser

Reviewed changes

Copilot reviewed 3 out of 4 changed files in this pull request and generated 4 comments.

File Description
agent/utils.py Implements binary parser for extracting FTS index prefix lengths from .cfg files
agent/tests/test_cfg_parser.py Adds unit test validating the parser correctly extracts FTS index metadata
agent/database_physical_restore.py Integrates FTS metadata collection and index synchronization into the restoration workflow

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@tanmoysrt tanmoysrt force-pushed the fix_physical_restoration_issue branch 2 times, most recently from f26bd11 to 78fc10a Compare February 25, 2026 06:59
The fix has been made to fix the following issue:

(1808, "Schema mismatch (Index ft_description field description prefix len 0 doesn't match metadata file value 1))

Check PR description or code inline comments for more info
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Development

Successfully merging this pull request may close these issues.

2 participants