Viewing Installed Extensions
Query installed extensions using the INFORMATION_SCHEMA view:- Use in both interactive sessions and scripts
- Standard SQL interface compatible with MySQL tools
Checking Extension Functions
Verify extension functions work after installation:Extension Directory
Check where VillageSQL looks for.veb files:
Configuring veb_dir
To change the extension directory location, setveb_dir in your MySQL configuration file:
my.cnf / my.ini:
- Path must be absolute (not relative)
- Directory must exist before server start
- MySQL user must have read permissions on the directory
- Only one
veb_diris supported (cannot have multiple paths) - Changes require server restart to take effect
Troubleshooting
Quick Reference
Extension Not Found
Error:Extension 'my_extension' not found
Debug steps:
Function Not Available After Install
Error:FUNCTION my_func does not exist
Debug steps:
Extension Shows Old Behavior After Update
Symptom: After replacing a.veb file and reinstalling, the extension still
runs old code.
Cause: VillageSQL expands .veb files into {datadir}/.veb_expansion_cache/ on first load. If you
copy a new .veb without first running UNINSTALL EXTENSION, the server continues
using the previously-expanded .so that is already loaded in memory.
Solution: Always follow the full UNINSTALL → replace → INSTALL cycle:
.veb file in veb_dir and reinstall:
Cannot Uninstall Extension
Error:Cannot uninstall extension: types in use
Solution:
Library Loading Errors
Error:Cannot load library: undefined symbol
Causes:
- Missing library dependencies
- ABI compatibility mismatch
- Incorrect MySQL version
Extension Name Validation Errors
Error:Failed to load VEF extension 'extension_name' with log message Extension name mismatch
Cause: The extension name in manifest.json doesn’t match the VEB filename.
Debug steps:
-
Check VEB filename matches manifest:
-
Verify manifest.json name field:
- VEB filename:
my_extension.veb - manifest.json:
"name": "my_extension"
- Using hyphens in manifest:
"name": "my-extension"❌ - VEB filename doesn’t match:
my-extension.vebvs"name": "my_extension"❌
Custom Type Comparison Errors
Error:Cannot compare types X and Y in =
Cause: Both sides of the comparison are custom types but from different types or extensions.
Error:
Unable to implicitly cast a non-custom type during compare with a custom type in =
Cause: One side of the comparison is a custom type column and the other is a value (literal or column) that cannot be automatically converted to that type.
Monitoring Extension Usage
Query Performance
Track VDF execution times using performance_schema:Custom Type Usage
Track which tables use custom types:Updating Extensions
To update an extension to a newer version, use the manual update process:ALTER EXTENSION UPDATE is not yet supported and is planned for a future release.
Manual Update Process
-
Uninstall the current version:
-
Replace the .veb file:
-
Install the new version:
-
Verify the update:
Cleaning Up
Remove Orphaned Expansion Directories
VillageSQL expands.veb files to {datadir}/.veb_expansion_cache/{name}/{sha256}/. Old versions accumulate over time.
Server restart automatically cleans up orphaned expansion directories.
Replication
Custom types require ROW format binlog. STATEMENT and MIXED modes are not supported for tables with custom type columns. INSERT, UPDATE, DELETE, and ALTER TABLE operations on custom type columns all replicate correctly in ROW format.INSTALL EXTENSION is not replicated — each server manages its own extensions.
Install the extension on every replica before replication starts, using the same
version as the source. The server enforces exact version matching; a version
mismatch stops replication.
If a replica encounters a custom type it doesn’t recognize, replication stops at
the DDL statement — on CREATE TABLE or ALTER TABLE, before any dependent DML
is applied. Install the correct extension version, then resume:
mysqldump preserves fully qualified custom type names in the output. Logical
restores work as long as the extension is installed on the target server before
importing the dump.
Using Extensions with Docker
When running VillageSQL in Docker, mount a local directory asveb_dir so you can add .veb files from the host without rebuilding the container.
Docker Compose example:
.veb file into ./extensions/ on the host, then install from SQL:
Getting Help
If you encounter issues not covered here:- Check Error Log: Most extension errors are logged with details
- Review Extension Docs: Extension-specific troubleshooting may exist
- Ask on Discord: Join the VillageSQL Discord
- File an Issue: Report bugs on GitHub Issues
Next Steps
System Reference
Query system tables and views
Uninstall Extensions
Remove extensions safely
Extension Architecture
Understand the internals

