VillageSQL Extensions with versioning

VillageSQL Extensions with versioning

VillageSQL has just released it’s latest version 0.0.5 , describing this as stable release for installations with full MySQL 8.4.10 compatibility.

With my primary work around extensions, specifically vsql-statistics , I took the new versioning features for a test.

This new release provides the VERSION keyword for INSTALL EXTENSION and UNINSTALL EXTENSION. It also provides the new ALTER EXTENSION syntax.

I used the default installation instructions to install the pre-built binary on a system that already an installed 0.0.4 installation.

VillageSQL installation over existing installation

Installing the latest version on an existing system with an installed, but not running 0.0.4 version.

$  curl https://install.villagesql.com | bash

╔══════════════════════════════════════════════════════╗
║                                                      ║
║               VillageSQL Installation                ║
║             MySQL for the Agentic AI Era             ║
║                                                      ║
╚══════════════════════════════════════════════════════╝

Fetching latest stable release...
Latest stable release: 0.0.5

How would you like to install VillageSQL?

  1) Docker (Fastest, easiest to manage)
  2) Prebuilt Binary (Fast, no compilation needed)
  3) Build from Source (Slower, compiles everything locally)

Select [1-3]: 2

Installing prebuilt binary...

Following the installation you get the following version, and in this instance an already installed community extension. There was an issue on some environments with community extensions which I will discuss in a future post.

mysql> SELECT VERSION();
+-------------------------+
| version()               |
+-------------------------+
| 8.4.10-villagesql-0.0.5 |
+-------------------------+
1 row in set (0.00 sec)

mysql> SELECT * FROM information_schema.extensions;
+----------------+-------------------+-----------------+----------------------+--------------------+-----------------------+
| EXTENSION_NAME | EXTENSION_VERSION | PENDING_VERSION | PENDING_REQUESTED_AT | PENDING_LAST_ERROR | PENDING_LAST_ERROR_AT |
+----------------+-------------------+-----------------+----------------------+--------------------+-----------------------+
| vsql_fibonacci | 1.0.0             | NULL            | NULL                 | NULL               | NULL                  |
+----------------+-------------------+-----------------+----------------------+--------------------+-----------------------+
1 row in set (0.01 sec)

mysql> UNINSTALL EXTENSION vsql_fibonacci;

Installing Extensions without Versioning

The default INSTALL EXTENSION usage works without issue, VERSION is an optional attribute.

mysql> INSTALL EXTENSION vsql_ai;
Query OK, 0 rows affected (0.01 sec)

mysql> SELECT * FROM information_schema.extensions;
+-----------------+-------------------+-----------------+----------------------+--------------------+-----------------------+
| EXTENSION_NAME  | EXTENSION_VERSION | PENDING_VERSION | PENDING_REQUESTED_AT | PENDING_LAST_ERROR | PENDING_LAST_ERROR_AT |
+-----------------+-------------------+-----------------+----------------------+--------------------+-----------------------+
| vsql_ai         | 0.0.4             | NULL            | NULL                 | NULL               | NULL                  |
+-----------------+-------------------+-----------------+----------------------+--------------------+-----------------------+
1 row in set (0.00 sec)

mysql>  SELECT extension_name, negotiated_protocol, json_pretty(registration_json) FROM information_schema.extension_registration where extension_name = 'vsql_ai'\G
*************************** 1. row ***************************
                extension_name: vsql_ai
           negotiated_protocol: 3
json_pretty(registration_json): {
  "funcs": [
    {
      "name": "ai_prompt",
      "params": [
        "STRING",
        "STRING",
        "STRING",
        "STRING"
      ],
      "return_type": "STRING",
      "is_aggregate": false,
      "deterministic": false
    },
    {
      "name": "ai_embedding",
      "params": [
        "STRING",
        "STRING",
        "STRING",
        "STRING"
      ],
      "return_type": "STRING",
      "is_aggregate": false,
      "deterministic": false
    }
  ],
  "types": [],
  "sdk_version": "0.0.4",
  "extension_name": "",
  "extension_version": "",
  "requested_protocol": 3
}
1 row in set (0.00 sec)

VillageSQL official extensions are included automatically in the prebuilt, and can be found at:

$ ls -l ~/.villagesql/prebuilt/lib/veb/
total 4928
-rw-r--r--  1 rbradfor  staff  676864 Jul 12 09:04 vsql_ai.veb
-rw-r--r--  1 rbradfor  staff   69120 Jul 12 09:04 vsql_boolean.veb
-rw-r--r--  1 rbradfor  staff  100864 Jul 12 08:21 vsql_complex.veb
-rw-r--r--  1 rbradfor  staff   91136 Jul 12 09:04 vsql_crypto.veb
-rw-r--r--  1 rbradfor  staff  182784 Jul 12 09:04 vsql_cube.veb
-rw-r--r--  1 rbradfor  staff  106496 Jul 12 09:04 vsql_fuzzystrmatch.veb
-rw-r--r--  1 rbradfor  staff   86528 Jul 12 09:04 vsql_http.veb
-rw-r--r--  1 rbradfor  staff  138240 Jul 12 09:04 vsql_network_address.veb
-rw-r--r--  1 rbradfor  staff  409600 Jul 12 09:04 vsql_rest.veb
-rw-r--r--  1 rbradfor  staff   76288 Jul 12 08:21 vsql_simple.veb
-rw-r--r--  1 rbradfor  staff   94208 Jul 12 09:04 vsql_trgm.veb
-rw-r--r--  1 rbradfor  staff   95232 Jul 12 09:04 vsql_uuid.veb

Installating Extensions with a version

Downloading the prebuilt vsql-statistics extension from https://github.com/ronaldbradford/vsql-statistics/releases/tag/v.0.3 I was able to test the VERSION functionality after some file wrangling.

# Download correct OS/Arch from https://github.com/ronaldbradford/vsql-statistics/releases/tag/v.0.3
$ mv ~/Downloads/vsql_statistics-darwin-arm64.veb ~/.villagesql/prebuilt/lib/veb/
# After initial failure, renamed accordingly
$ mv ~/.villagesql/prebuilt/lib/veb/vsql_statistics-darwin-arm64.veb ~/.villagesql/prebuilt/lib/veb/vsql_statistics.veb

VERSION attribute validation

# Fails as it has to be renamed from the distro version to the proper name
mysql> INSTALL EXTENSION vsql_statistics VERSION '9.9.9';
ERROR 3219 (HY000): VEB file not found: vsql_statistics.veb

# Fails as version mismatches with manifest
mysql> INSTALL EXTENSION vsql_statistics VERSION '9.9.9';
ERROR 3219 (HY000): Cannot install extension 'vsql_statistics': manifest version is '0.5.0' but VERSION '9.9.9' was specified

# Correct installation
mysql> INSTALL EXTENSION vsql_statistics VERSION '0.5.0';
Query OK, 0 rows affected (0.35 sec)

mysql> SELECT * FROM information_schema.extensions;
+-----------------+-------------------+-----------------+----------------------+--------------------+-----------------------+
| EXTENSION_NAME  | EXTENSION_VERSION | PENDING_VERSION | PENDING_REQUESTED_AT | PENDING_LAST_ERROR | PENDING_LAST_ERROR_AT |
+-----------------+-------------------+-----------------+----------------------+--------------------+-----------------------+
| vsql_statistics | 0.5.0             | NULL            | NULL                 | NULL               | NULL                  |
+-----------------+-------------------+-----------------+----------------------+--------------------+-----------------------+
1 row in set (0.00 sec)

This highlighted the first build error of my extension workflow. The version is defined in the extension manifest.json which I wasn’t actually using for releases, I was used git tags and released this as 0.0.3. The INSTALL EXTENSION command both accepted and validated the VERSION was correct.

Installing vsql-statistics 0.0.3

After repackaging the extension locally with a corrected version.

mysql> select * from information_schema.extensions;
Empty set (0.00 sec)

mysql> install extension vsql_statistics VERSION '0.3.0';
Query OK, 0 rows affected (0.49 sec)

mysql> select * from information_schema.extensions;
+-----------------+-------------------+-----------------+----------------------+--------------------+-----------------------+
| EXTENSION_NAME  | EXTENSION_VERSION | PENDING_VERSION | PENDING_REQUESTED_AT | PENDING_LAST_ERROR | PENDING_LAST_ERROR_AT |
+-----------------+-------------------+-----------------+----------------------+--------------------+-----------------------+
| vsql_statistics | 0.3.0             | NULL            | NULL                 | NULL               | NULL                  |
+-----------------+-------------------+-----------------+----------------------+--------------------+-----------------------+
1 row in set (0.01 sec)

mysql>  SELECT extension_name, negotiated_protocol, json_pretty(registration_json) FROM information_schema.extension_registration where extension_name = 'vsql_statistics'\G
*************************** 1. row ***************************
                extension_name: vsql_statistics
           negotiated_protocol: 3
json_pretty(registration_json): {
  "funcs": [
    {
      "name": "STATS_IQR",
      "params": [
        "REAL"
      ],
      "return_type": "STRING",
      "is_aggregate": true,
      "deterministic": false
    },
    {
      "name": "STATS_TTEST",
      "params": [
        "REAL",
        "REAL",
        "REAL"
      ],
      "return_type": "STRING",
      "is_aggregate": true,
      "deterministic": false
    },
    {
      "name": "STATS_TTEST_GROUPS",
      "params": [
        "REAL",
        "REAL"
      ],
      "return_type": "STRING",
      "is_aggregate": true,
      "deterministic": false
    },
    {
      "name": "STATS_MODE",
      "params": [
        "REAL"
      ],
      "return_type": "STRING",
      "is_aggregate": true,
      "deterministic": false
    },
    {
      "name": "STATS_SKEWNESS",
      "params": [
        "REAL"
      ],
      "return_type": "STRING",
      "is_aggregate": true,
      "deterministic": false
    },
    {
      "name": "STATS_ZTEST",
      "params": [
        "REAL",
        "REAL",
        "REAL"
      ],
      "return_type": "STRING",
      "is_aggregate": true,
      "deterministic": false
    },
    {
      "name": "STATS_CHISQ_GOF",
      "params": [
        "REAL",
        "REAL"
      ],
      "return_type": "STRING",
      "is_aggregate": true,
      "deterministic": false
    },
    {
      "name": "STATS_CHISQ_INDEP",
      "params": [
        "REAL",
        "REAL",
        "REAL",
        "REAL"
      ],
      "return_type": "STRING",
      "is_aggregate": true,
      "deterministic": false
    },
    {
      "name": "STATS_KURTOSIS",
      "params": [
        "REAL"
      ],
      "return_type": "STRING",
      "is_aggregate": true,
      "deterministic": false
    },
    {
      "name": "STATS_COVARIANCE",
      "params": [
        "REAL",
        "REAL"
      ],
      "return_type": "STRING",
      "is_aggregate": true,
      "deterministic": false
    },
    {
      "name": "STATS_MEAN",
      "params": [
        "REAL",
        "REAL"
      ],
      "return_type": "STRING",
      "is_aggregate": true,
      "deterministic": false
    },
    {
      "name": "STATS_ANOVA",
      "params": [
        "REAL",
        "REAL"
      ],
      "return_type": "STRING",
      "is_aggregate": true,
      "deterministic": false
    }
  ],
  "types": [],
  "sdk_version": "0.0.4",
  "extension_name": "",
  "extension_version": "",
  "requested_protocol": 3
}
1 row in set (0.00 sec)

Upgrading my extension

As with any testing, you first try to produce any error conditions first.

mysql> ALTER EXTENSION vsql_statistics VERSION '0.5.0';
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

This is correct, the AT RESTART is not specified, however the error could be a little more specific.

mysql> ALTER EXTENSION vsql_statistics VERSION '0.5.0' AT RESTART;
ERROR 3219 (HY000): VEB file not found: vsql_statistics-0.5.0.veb

I was curious how the process of having an installed extension and the .veb file of a specific version, and then a new version. In this case you can see the version suffix is required. Using the original extension version that I incorrectly packaged.

mv vsql_statistics-0.5.0.veb ~/.villagesql/prebuilt/lib/veb/
mysql> ALTER EXTENSION vsql_statistics VERSION '0.5.0' AT RESTART;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT * FROM information_schema.extensions;
+-----------------+-------------------+-----------------+-----------------------------+--------------------+-----------------------+
| EXTENSION_NAME  | EXTENSION_VERSION | PENDING_VERSION | PENDING_REQUESTED_AT        | PENDING_LAST_ERROR | PENDING_LAST_ERROR_AT |
+-----------------+-------------------+-----------------+-----------------------------+--------------------+-----------------------+
| vsql_statistics | 0.3.0             | 0.5.0           | 2026-07-18T07:43:44.528236Z | NULL               | NULL                  |
+-----------------+-------------------+-----------------+-----------------------------+--------------------+-----------------------+
1 row in set (0.01 sec)

I’m not sure how you can unstage this pending version incase you do not want to proceed with it.

Restarting VillageSQL to pickup new version

Stopping VillageSQL

$ ~/.villagesql/prebuilt/bin/mysqladmin -uroot -p --socket=/Users/rbradfor/.villagesql/mysql.sock shutdown
Enter password:
$ tail  /Users/rbradfor/.villagesql/mysql.log
2026-07-17T07:12:26.965254Z 0 [System] [MY-010232] [Server] XA crash recovery finished.
2026-07-17T07:12:27.031390Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2026-07-17T07:12:27.031421Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
2026-07-17T07:12:27.046945Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /tmp/mysqlx.sock
2026-07-17T07:12:27.046947Z 0 [System] [MY-010931] [Server] /Users/rbradfor/.villagesql/prebuilt/bin/mysqld: ready for connections. Version: '8.4.10-villagesql-0.0.5'  socket: '/Users/rbradfor/.villagesql/mysql.sock'  port: 3306  Source distribution.
2026-07-18T07:47:48.897770Z 13 [System] [MY-013172] [Server] Received SHUTDOWN from user root. Shutting down mysqld (Version: 8.4.10-villagesql-0.0.5).
2026-07-18T07:47:48.897891Z 0 [System] [MY-013172] [Server] Received SHUTDOWN from user <via user signal>. Shutting down mysqld (Version: 8.4.10-villagesql-0.0.5).
2026-07-18T07:47:50.904075Z 0 [Warning] [MY-010909] [Server] /Users/rbradfor/.villagesql/prebuilt/bin/mysqld: Forcing close of thread 11  user: 'root'.
2026-07-18T07:47:51.180791Z 0 [System] [MY-010910] [Server] /Users/rbradfor/.villagesql/prebuilt/bin/mysqld: Shutdown complete (mysqld 8.4.10-villagesql-0.0.5)  Source distribution.
2026-07-18T07:47:51.180832Z 0 [System] [MY-015016] [Server] MySQL Server - end.

Starting VillageSQL

/Users/rbradfor/.villagesql/prebuilt/bin/mysqld --datadir=/Users/rbradfor/.villagesql/data --socket=/Users/rbradfor/.villagesql/mysql.sock --port=3306 --pid-file=/Users/rbradfor/.villagesql/mysql.pid --log-error=/Users/rbradfor/.villagesql/mysql.log --vsql_allow_preview_extensions=ON --daemonize
mysqld will log errors to /Users/rbradfor/.villagesql/mysql.log
mysqld is running as pid 93967
$ tail  -20 /Users/rbradfor/.villagesql/mysql.log
...
2026-07-18T07:47:51.180832Z 0 [System] [MY-015016] [Server] MySQL Server - end.
2026-07-18T07:49:00.901748Z 0 [System] [MY-015015] [Server] MySQL Server - start.
2026-07-18T07:49:01.055605Z 0 [System] [MY-010116] [Server] /Users/rbradfor/.villagesql/prebuilt/bin/mysqld (mysqld 8.4.10-villagesql-0.0.5) starting as process 93965
2026-07-18T07:49:01.059570Z 0 [Warning] [MY-010159] [Server] Setting lower_case_table_names=2 because file system for /Users/rbradfor/.villagesql/data/ is case insensitive
2026-07-18T07:49:01.067437Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2026-07-18T07:49:01.108096Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2026-07-18T07:49:01.172728Z 6 [System] [MY-010666] [Server] VillageSQL: 'Validating system schema...'
2026-07-18T07:49:01.174931Z 6 [System] [MY-010666] [Server] VillageSQL: 'System schema verification completed successfully'
2026-07-18T07:49:01.243067Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2026-07-18T07:49:01.243090Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
2026-07-18T07:49:01.252682Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /tmp/mysqlx.sock
2026-07-18T07:49:01.252709Z 0 [System] [MY-010931] [Server] /Users/rbradfor/.villagesql/prebuilt/bin/mysqld: ready for connections. Version: '8.4.10-villagesql-0.0.5'  socket: '/Users/rbradfor/.villagesql/mysql.sock'  port: 3306  Source distribution.

There is no logging at default verbosity of the work performed for the extension upgrade.

mysql> select @@log_error_verbosity;
+-----------------------+
| @@log_error_verbosity |
+-----------------------+
|                     2 |
+-----------------------+
1 row in set (0.00 sec)

Validating the upgraded extension

mysql> SELECT * FROM information_schema.extensions;
+-----------------+-------------------+-----------------+----------------------+--------------------+-----------------------+
| EXTENSION_NAME  | EXTENSION_VERSION | PENDING_VERSION | PENDING_REQUESTED_AT | PENDING_LAST_ERROR | PENDING_LAST_ERROR_AT |
+-----------------+-------------------+-----------------+----------------------+--------------------+-----------------------+
| vsql_statistics | 0.5.0             | NULL            | NULL                 | NULL               | NULL                  |
+-----------------+-------------------+-----------------+----------------------+--------------------+-----------------------+
1 row in set (0.00 sec)

mysql>  SELECT extension_name, negotiated_protocol, json_pretty(registration_json) FROM information_schema.extension_registration where extension_name = 'vsql_statistics'\G
*************************** 1. row ***************************
                extension_name: vsql_statistics
           negotiated_protocol: 3
json_pretty(registration_json): {
  "funcs": [
    {
      "name": "STATS_IQR",
      "params": [
        "REAL"
      ],
      "return_type": "STRING",
      "is_aggregate": true,
      "deterministic": false
    },
    {
      "name": "STATS_TTEST",
      "params": [
        "REAL",
        "REAL",
        "REAL"
      ],
      "return_type": "STRING",
      "is_aggregate": true,
      "deterministic": false
    },
    {
      "name": "STATS_TTEST_GROUPS",
      "params": [
        "REAL",
        "REAL"
      ],
      "return_type": "STRING",
      "is_aggregate": true,
      "deterministic": false
    },
    {
      "name": "STATS_MODE",
      "params": [
        "REAL"
      ],
      "return_type": "STRING",
      "is_aggregate": true,
      "deterministic": false
    },
    {
      "name": "STATS_SKEWNESS",
      "params": [
        "REAL"
      ],
      "return_type": "STRING",
      "is_aggregate": true,
      "deterministic": false
    },
    {
      "name": "STATS_ZTEST",
      "params": [
        "REAL",
        "REAL",
        "REAL"
      ],
      "return_type": "STRING",
      "is_aggregate": true,
      "deterministic": false
    },
    {
      "name": "STATS_CHISQ_GOF",
      "params": [
        "REAL",
        "REAL"
      ],
      "return_type": "STRING",
      "is_aggregate": true,
      "deterministic": false
    },
    {
      "name": "STATS_CHISQ_INDEP",
      "params": [
        "REAL",
        "REAL",
        "REAL",
        "REAL"
      ],
      "return_type": "STRING",
      "is_aggregate": true,
      "deterministic": false
    },
    {
      "name": "STATS_KURTOSIS",
      "params": [
        "REAL"
      ],
      "return_type": "STRING",
      "is_aggregate": true,
      "deterministic": false
    },
    {
      "name": "STATS_COVARIANCE",
      "params": [
        "REAL",
        "REAL"
      ],
      "return_type": "STRING",
      "is_aggregate": true,
      "deterministic": false
    },
    {
      "name": "STATS_MEAN",
      "params": [
        "REAL",
        "REAL"
      ],
      "return_type": "STRING",
      "is_aggregate": true,
      "deterministic": false
    },
    {
      "name": "STATS_ANOVA",
      "params": [
        "REAL",
        "REAL"
      ],
      "return_type": "STRING",
      "is_aggregate": true,
      "deterministic": false
    }
  ],
  "types": [],
  "sdk_version": "0.0.4",
  "extension_name": "",
  "extension_version": "",
  "requested_protocol": 3
}

Downgrading the version

To test downgrading and logging, I reverted to the previous version installed. Note: The deployed .veb file had to be renamed to the new file spec requirements.

Increasing the log_error_verbosity also showed what I wanted to see in execution, specifically 2026-07-18T07:58:16.773696Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Extension 'vsql_statistics': applying pending update from '0.5.0' to '0.3.0' (requested at 2026-07-18T07:54:08.567641Z)'

mysql> SET PERSIST log_error_verbosity=3;
Query OK, 0 rows affected (0.00 sec)

mysql> ALTER EXTENSION vsql_statistics VERSION '0.3.0' AT RESTART;
ERROR 3219 (HY000): VEB file not found: vsql_statistics-0.3.0.veb
# Not it does not pickup the existing vsql_statistics.veb file that was used for installation.
# $ mv vsql_statistics.veb vsql_statistics-0.3.0.veb

mysql> ALTER EXTENSION vsql_statistics VERSION '0.3.0' AT RESTART;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT * FROM information_schema.extensions;
+-----------------+-------------------+-----------------+-----------------------------+--------------------+-----------------------+
| EXTENSION_NAME  | EXTENSION_VERSION | PENDING_VERSION | PENDING_REQUESTED_AT        | PENDING_LAST_ERROR | PENDING_LAST_ERROR_AT |
+-----------------+-------------------+-----------------+-----------------------------+--------------------+-----------------------+
| vsql_statistics | 0.5.0             | 0.3.0           | 2026-07-18T07:54:08.567641Z | NULL               | NULL                  |
+-----------------+-------------------+-----------------+-----------------------------+--------------------+-----------------------+
1 row in set (0.01 sec)

# Shutdown

$ tail  -20 /Users/rbradfor/.villagesql/mysql.log
2026-07-18T07:55:54.821003Z 0 [Note] [MY-010733] [Server] Shutting down plugin 'InnoDB'
2026-07-18T07:55:54.821041Z 0 [Note] [MY-013072] [InnoDB] Starting shutdown...
2026-07-18T07:55:54.821313Z 0 [Note] [MY-011944] [InnoDB] Dumping buffer pool(s) to /Users/rbradfor/.villagesql/data/ib_buffer_pool
2026-07-18T07:55:54.822758Z 0 [Note] [MY-011944] [InnoDB] Buffer pool(s) dump completed at 260718 17:55:54
2026-07-18T07:55:54.827000Z 0 [Note] [MY-013084] [InnoDB] Log background threads are being closed...
2026-07-18T07:55:54.863996Z 0 [Note] [MY-013854] [InnoDB] Bytes written to disk by DBLWR (ON): 950272
2026-07-18T07:55:54.864232Z 0 [Note] [MY-012980] [InnoDB] Shutdown completed; log sequence number 36384594
2026-07-18T07:55:54.865126Z 0 [Note] [MY-012255] [InnoDB] Removed temporary tablespace data file: "ibtmp1"
2026-07-18T07:55:54.865168Z 0 [Note] [MY-010733] [Server] Shutting down plugin 'MEMORY'
2026-07-18T07:55:54.865184Z 0 [Note] [MY-010733] [Server] Shutting down plugin 'CSV'
2026-07-18T07:55:54.865197Z 0 [Note] [MY-010733] [Server] Shutting down plugin 'daemon_keyring_proxy_plugin'
2026-07-18T07:55:54.865218Z 0 [Note] [MY-010733] [Server] Shutting down plugin 'sha2_cache_cleaner'
2026-07-18T07:55:54.865230Z 0 [Note] [MY-010733] [Server] Shutting down plugin 'caching_sha2_password'
2026-07-18T07:55:54.865242Z 0 [Note] [MY-010733] [Server] Shutting down plugin 'sha256_password'
2026-07-18T07:55:54.865446Z 0 [Note] [MY-010733] [Server] Shutting down plugin 'binlog'
2026-07-18T07:55:54.865471Z 0 [Note] [MY-015020] [Server] MySQL Server: Plugins Shutdown - end.
2026-07-18T07:55:54.866688Z 0 [Note] [MY-015021] [Server] MySQL Server: Components Shutdown - start.
2026-07-18T07:55:54.871032Z 0 [Note] [MY-015022] [Server] MySQL Server: Components Shutdown - end (with return value = 0).
2026-07-18T07:55:54.871389Z 0 [System] [MY-010910] [Server] /Users/rbradfor/.villagesql/prebuilt/bin/mysqld: Shutdown complete (mysqld 8.4.10-villagesql-0.0.5)  Source distribution.
2026-07-18T07:55:54.871401Z 0 [System] [MY-015016] [Server] MySQL Server - end.

# Start

$ tail  -100 /Users/rbradfor/.villagesql/mysql.log
2026-07-18T07:58:16.699561Z 1 [Note] [MY-012923] [InnoDB] Creating shared tablespace for temporary tables
2026-07-18T07:58:16.699682Z 1 [Note] [MY-012265] [InnoDB] Setting file './ibtmp1' size to 12 MB. Physically writing the file full; Please wait ...
2026-07-18T07:58:16.702476Z 1 [Note] [MY-012266] [InnoDB] File './ibtmp1' size is now 12 MB.
2026-07-18T07:58:16.702622Z 1 [Note] [MY-013627] [InnoDB] Scanning temp tablespace dir:'./#innodb_temp/'
2026-07-18T07:58:16.705217Z 1 [Note] [MY-013018] [InnoDB] Created 128 and tracked 128 new rollback segment(s) in the temporary tablespace. 128 are now active.
2026-07-18T07:58:16.705307Z 1 [Note] [MY-012976] [InnoDB] 8.4.10 started; log sequence number 36384604
2026-07-18T07:58:16.705438Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2026-07-18T07:58:16.707508Z 1 [Note] [MY-011089] [Server] Data dictionary restarting version '80300'.
2026-07-18T07:58:16.747273Z 1 [Note] [MY-012357] [InnoDB] Reading DD tablespace files
2026-07-18T07:58:16.748315Z 1 [Note] [MY-012356] [InnoDB] Scanned 13 tablespaces. Validated 13.
2026-07-18T07:58:16.752138Z 1 [Note] [MY-010006] [Server] Using data dictionary with version '80300'.
2026-07-18T07:58:16.754482Z 2 [Note] [MY-010666] [Server] VillageSQL: 'Setting Schema Version to mysql-8.4_0.0.5'
2026-07-18T07:58:16.756223Z 0 [Note] [MY-011332] [Server] Plugin mysqlx reported: 'IPv6 is available'
2026-07-18T07:58:16.756499Z 0 [Note] [MY-011323] [Server] Plugin mysqlx reported: 'X Plugin ready for connections. bind-address: '::' port: 33060'
2026-07-18T07:58:16.756509Z 0 [Note] [MY-011323] [Server] Plugin mysqlx reported: 'X Plugin ready for connections. socket: '/tmp/mysqlx.sock''
2026-07-18T07:58:16.769317Z 6 [System] [MY-010666] [Server] VillageSQL: 'Validating system schema...'
2026-07-18T07:58:16.769480Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Verified table villagesql.properties'
2026-07-18T07:58:16.770016Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Verified table villagesql.custom_columns'
2026-07-18T07:58:16.770257Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Verified table villagesql.custom_sp_params'
2026-07-18T07:58:16.770437Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Verified table villagesql.extensions'
2026-07-18T07:58:16.770660Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Verified table villagesql.custom_indexes'
2026-07-18T07:58:16.770849Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Verified table villagesql.custom_index_columns'
2026-07-18T07:58:16.770929Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Initializing VictionaryClient'
2026-07-18T07:58:16.770937Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Reloading all system table metadata'
2026-07-18T07:58:16.770955Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Loaded 3 villagesql.properties entries'
2026-07-18T07:58:16.771056Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Loaded 1 villagesql.extensions entries'
2026-07-18T07:58:16.771131Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Loaded 0 villagesql.custom_columns entries'
2026-07-18T07:58:16.771188Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Loaded 0 villagesql.custom_sp_params entries'
2026-07-18T07:58:16.771244Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Loaded 0 villagesql.custom_indexes entries'
2026-07-18T07:58:16.771251Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Index ID counter initialized to 0 (max existing id)'
2026-07-18T07:58:16.771304Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Loaded 0 villagesql.custom_index_columns entries'
2026-07-18T07:58:16.771311Z 6 [Note] [MY-010666] [Server] VillageSQL: 'VictionaryClient initialized'
2026-07-18T07:58:16.771314Z 6 [System] [MY-010666] [Server] VillageSQL: 'System schema verification completed successfully'
2026-07-18T07:58:16.771322Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Loading installed extensions from villagesql.extensions table'
2026-07-18T07:58:16.771329Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Expanding VEB for extension 'vsql_statistics''
2026-07-18T07:58:16.773010Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Expansion path: /Users/rbradfor/.villagesql/data/.veb_expansion_cache/vsql_statistics/021467a16dda204a65a0a26930a9e803ffaeb80001a00ef94a9f7ca025b700e5'
2026-07-18T07:58:16.773020Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Extension 'vsql_statistics' already expanded at /Users/rbradfor/.villagesql/data/.veb_expansion_cache/vsql_statistics/021467a16dda204a65a0a26930a9e803ffaeb80001a00ef94a9f7ca025b700e5, skipping extraction'
2026-07-18T07:58:16.773029Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Loading VEF extension from: /Users/rbradfor/.villagesql/data/.veb_expansion_cache/vsql_statistics/021467a16dda204a65a0a26930a9e803ffaeb80001a00ef94a9f7ca025b700e5/lib/vsql_statistics.so'
2026-07-18T07:58:16.773644Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Successfully loaded VEF extension '/Users/rbradfor/.villagesql/data/.veb_expansion_cache/vsql_statistics/021467a16dda204a65a0a26930a9e803ffaeb80001a00ef94a9f7ca025b700e5/lib/vsql_statistics.so' (protocol 3, 12 funcs, 0 types)'
2026-07-18T07:58:16.773649Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Calling vef_unregister for extension '/Users/rbradfor/.villagesql/data/.veb_expansion_cache/vsql_statistics/021467a16dda204a65a0a26930a9e803ffaeb80001a00ef94a9f7ca025b700e5/lib/vsql_statistics.so''
2026-07-18T07:58:16.773696Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Extension 'vsql_statistics': applying pending update from '0.5.0' to '0.3.0' (requested at 2026-07-18T07:54:08.567641Z)'
2026-07-18T07:58:16.773704Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Loading VEB manifest for extension 'vsql_statistics' version '0.3.0''
2026-07-18T07:58:16.773756Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Extension 'vsql_statistics' has version '0.3.0''
2026-07-18T07:58:16.773761Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Validated extension 'vsql_statistics' version '0.3.0''
2026-07-18T07:58:16.773768Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Loading VEF extension from: /Users/rbradfor/.villagesql/data/.veb_expansion_cache/vsql_statistics/021467a16dda204a65a0a26930a9e803ffaeb80001a00ef94a9f7ca025b700e5/lib/vsql_statistics.so'
2026-07-18T07:58:16.774266Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Successfully loaded VEF extension '/Users/rbradfor/.villagesql/data/.veb_expansion_cache/vsql_statistics/021467a16dda204a65a0a26930a9e803ffaeb80001a00ef94a9f7ca025b700e5/lib/vsql_statistics.so' (protocol 3, 12 funcs, 0 types)'
2026-07-18T07:58:16.774272Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Validating 12 VDFs from extension 'vsql_statistics''
2026-07-18T07:58:16.774284Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Registering VDF 'STATS_IQR' from extension 'vsql_statistics''
2026-07-18T07:58:16.774288Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Successfully registered VDF 'STATS_IQR''
2026-07-18T07:58:16.774292Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Registering VDF 'STATS_TTEST' from extension 'vsql_statistics''
2026-07-18T07:58:16.774301Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Successfully registered VDF 'STATS_TTEST''
2026-07-18T07:58:16.774304Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Registering VDF 'STATS_TTEST_GROUPS' from extension 'vsql_statistics''
2026-07-18T07:58:16.774307Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Successfully registered VDF 'STATS_TTEST_GROUPS''
2026-07-18T07:58:16.774311Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Registering VDF 'STATS_MODE' from extension 'vsql_statistics''
2026-07-18T07:58:16.774314Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Successfully registered VDF 'STATS_MODE''
2026-07-18T07:58:16.774317Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Registering VDF 'STATS_SKEWNESS' from extension 'vsql_statistics''
2026-07-18T07:58:16.774320Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Successfully registered VDF 'STATS_SKEWNESS''
2026-07-18T07:58:16.774323Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Registering VDF 'STATS_ZTEST' from extension 'vsql_statistics''
2026-07-18T07:58:16.774326Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Successfully registered VDF 'STATS_ZTEST''
2026-07-18T07:58:16.774329Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Registering VDF 'STATS_CHISQ_GOF' from extension 'vsql_statistics''
2026-07-18T07:58:16.774333Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Successfully registered VDF 'STATS_CHISQ_GOF''
2026-07-18T07:58:16.774336Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Registering VDF 'STATS_CHISQ_INDEP' from extension 'vsql_statistics''
2026-07-18T07:58:16.774339Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Successfully registered VDF 'STATS_CHISQ_INDEP''
2026-07-18T07:58:16.774342Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Registering VDF 'STATS_KURTOSIS' from extension 'vsql_statistics''
2026-07-18T07:58:16.774345Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Successfully registered VDF 'STATS_KURTOSIS''
2026-07-18T07:58:16.774348Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Registering VDF 'STATS_COVARIANCE' from extension 'vsql_statistics''
2026-07-18T07:58:16.774351Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Successfully registered VDF 'STATS_COVARIANCE''
2026-07-18T07:58:16.774354Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Registering VDF 'STATS_MEAN' from extension 'vsql_statistics''
2026-07-18T07:58:16.774357Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Successfully registered VDF 'STATS_MEAN''
2026-07-18T07:58:16.774360Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Registering VDF 'STATS_ANOVA' from extension 'vsql_statistics''
2026-07-18T07:58:16.774363Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Successfully registered VDF 'STATS_ANOVA''
2026-07-18T07:58:16.774369Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Successfully registered VEF extension 'vsql_statistics' from '/Users/rbradfor/.villagesql/data/.veb_expansion_cache/vsql_statistics/021467a16dda204a65a0a26930a9e803ffaeb80001a00ef94a9f7ca025b700e5/lib/vsql_statistics.so''
2026-07-18T07:58:16.774373Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Validated 1 of 1 installed extensions'
2026-07-18T07:58:16.774422Z 6 [Note] [MY-010666] [Server] VillageSQL: 'Cleaning up orphaned expansion directories'
2026-07-18T07:58:16.774748Z 6 [Note] [MY-010666] [Server] VillageSQL: 'No orphaned expansion directories found'
2026-07-18T07:58:16.774985Z 0 [Note] [MY-010856] [Server] Failed to open the crashed binlog file when source server is recovering it.
2026-07-18T07:58:16.776934Z 0 [Note] [MY-013911] [Server] Crash recovery finished in binlog engine. No attempts to commit, rollback or prepare any transactions.
2026-07-18T07:58:16.776956Z 0 [Note] [MY-013911] [Server] Crash recovery finished in InnoDB engine. No attempts to commit, rollback or prepare any transactions.
2026-07-18T07:58:16.778965Z 0 [Note] [MY-012487] [InnoDB] DDL log recovery : begin
2026-07-18T07:58:16.778990Z 0 [Note] [MY-012488] [InnoDB] DDL log recovery : end
2026-07-18T07:58:16.779087Z 0 [Note] [MY-011946] [InnoDB] Loading buffer pool(s) from /Users/rbradfor/.villagesql/data/ib_buffer_pool
2026-07-18T07:58:16.779314Z 0 [Note] [MY-011946] [InnoDB] Buffer pool(s) load completed at 260718 17:58:16
2026-07-18T07:58:16.780253Z 0 [Note] [MY-012922] [InnoDB] Waiting for purge to start
2026-07-18T07:58:16.833060Z 0 [Note] [MY-010913] [Server] You have not provided a mandatory server-id. Servers in a replication topology must have unique server-ids. Please refer to the proper server start-up parameters documentation.
2026-07-18T07:58:16.833272Z 0 [Note] [MY-010182] [Server] Found ca.pem, server-cert.pem and server-key.pem in data directory. Trying to enable SSL support using them.
2026-07-18T07:58:16.834407Z 0 [Note] [MY-010304] [Server] Skipping generation of SSL certificates as certificate files are present in data directory.
2026-07-18T07:58:16.836017Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2026-07-18T07:58:16.836032Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
2026-07-18T07:58:16.836192Z 0 [Note] [MY-010308] [Server] Skipping generation of RSA key pair through --sha256_password_auto_generate_rsa_keys as key files are present in data directory.
2026-07-18T07:58:16.836332Z 0 [Note] [MY-010308] [Server] Skipping generation of RSA key pair through --caching_sha2_password_auto_generate_rsa_keys as key files are present in data directory.
2026-07-18T07:58:16.836797Z 0 [Note] [MY-010252] [Server] Server hostname (bind-address): '*'; port: 3306
2026-07-18T07:58:16.836843Z 0 [Note] [MY-010253] [Server] IPv6 is available.
2026-07-18T07:58:16.836851Z 0 [Note] [MY-010264] [Server]   - '::' resolves to '::';
2026-07-18T07:58:16.836863Z 0 [Note] [MY-010251] [Server] Server socket created on IP: '::'.
2026-07-18T07:58:16.842763Z 0 [Note] [MY-011025] [Repl] Failed to start replica threads for channel ''.
2026-07-18T07:58:16.843832Z 7 [Note] [MY-010051] [Server] Event Scheduler: scheduler thread started with id 7
2026-07-18T07:58:16.843845Z 0 [Note] [MY-011240] [Server] Plugin mysqlx reported: 'Using SSL configuration from MySQL Server'
2026-07-18T07:58:16.844475Z 0 [Note] [MY-011243] [Server] Plugin mysqlx reported: 'Using OpenSSL for TLS connections'
2026-07-18T07:58:16.844513Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /tmp/mysqlx.sock
2026-07-18T07:58:16.844547Z 0 [System] [MY-010931] [Server] /Users/rbradfor/.villagesql/prebuilt/bin/mysqld: ready for connections. Version: '8.4.10-villagesql-0.0.5'  socket: '/Users/rbradfor/.villagesql/mysql.sock'  port: 3306  Source distribution.
mysql> SELECT * FROM information_schema.extensions;
+-----------------+-------------------+-----------------+----------------------+--------------------+-----------------------+
| EXTENSION_NAME  | EXTENSION_VERSION | PENDING_VERSION | PENDING_REQUESTED_AT | PENDING_LAST_ERROR | PENDING_LAST_ERROR_AT |
+-----------------+-------------------+-----------------+----------------------+--------------------+-----------------------+
| vsql_statistics | 0.3.0             | NULL            | NULL                 | NULL               | NULL                  |
+-----------------+-------------------+-----------------+----------------------+--------------------+-----------------------+
1 row in set (0.02 sec)

Default handling using the new filename spec

Performing some additional validation to see how the default INSTALL EXTENSION operated with the new naming started, when 1 extension file exists, the VERSION is not required.

mysql> UNINSTALL EXTENSION vsql_statistics;
Query OK, 0 rows affected (0.01 sec)

mysql> SELECT * FROM information_schema.extensions;
Empty set (0.00 sec)

mysql> INSTALL EXTENSION vsql_statistics;
ERROR 3219 (HY000): Multiple versions of extension 'vsql_statistics' found in '/Users/rbradfor/.villagesql/prebuilt/lib/veb/'; specify a version with INSTALL EXTENSION vsql_statistics VERSION 'x.y.z'

# rm vsql_statistics-0.5.0.veb

mysql> INSTALL EXTENSION vsql_statistics;
Query OK, 0 rows affected (0.01 sec)

mysql> SELECT * FROM information_schema.extensions;
+-----------------+-------------------+-----------------+----------------------+--------------------+-----------------------+
| EXTENSION_NAME  | EXTENSION_VERSION | PENDING_VERSION | PENDING_REQUESTED_AT | PENDING_LAST_ERROR | PENDING_LAST_ERROR_AT |
+-----------------+-------------------+-----------------+----------------------+--------------------+-----------------------+
| vsql_statistics | 0.3.0             | NULL            | NULL                 | NULL               | NULL                  |
+-----------------+-------------------+-----------------+----------------------+--------------------+-----------------------+
1 row in set (0.00 sec)

Conclusion

This was a successful validation of the first point for new functionality in the 0.0.5 release.

In a subsequent post I will be validating Bug: VEF STRING return type silently truncates output at 255 bytes #641 that I raised.

Tagged with: MySQL VillageSQL Extensions

Producing Two Sample T-Test statistics with SQL

The two sample t-test for equal variance is a statistical test to determine if the means of two groups are different enough that the difference is likely caused by some underlying difference, rather than random chance.

Building your first VillageSQL Extension with AI skills

This is a technical walkthrough of the vsql-extension-builder recently released May 28 at Percona Live Bay Area 2026 and found at https://github.com/villagesql/villagesql-skills . Highlights Install VillageSQL pre-built binary first Install SDK with pre-built binary second Install the skill Run it with your AI tool The output can be found at https://github.

Why using production workloads over simulated workloads is critical

AI-Assisted SQL Tuning Last week in his keynote speech at Percona Live Bay Area 2026 , Andy Pavlo presented Databases: The Final Boss of Agents and provided some useful insights into query optimization of simulated workloads leveraging AI.