Overview
Building VillageSQL from source gives you the latest features and allows you to customize the build for your specific environment. These steps build VillageSQL on upstream MySQL 8.4. VillageSQL also builds on Percona Server as an alternative codebase — see the Percona Build page.Prerequisites
Before you begin, ensure you have the following installed:- Git - For cloning the repository
- A supported platform - Debian or Ubuntu Linux, or macOS with Homebrew
Step 1: Clone the Repository
Clone the VillageSQL Server repository from GitHub. Clone into your home directory so the CMake steps below work without modification:-b publish/mysql-8.4_0.0.6.
The repository is several GB due to the MySQL codebase.
Step 2: Install Build Dependencies
Run the setup script from the repository you just cloned. The script detects your operating system and installs the packages the build needs:apt-get and asks for sudo. On macOS it uses
Homebrew. VillageSQL CI installs its build dependencies with the same script,
so the package list stays current with the build.
The script supports Debian or Ubuntu Linux and macOS. On another Linux
distribution, read
villagesql/bld_tools/setup_linux_build_env.sh and
install the equivalent packages with your own package manager.Step 3: Configure with CMake
Create a build directory outside the repository and configure the project:Paths use
$HOME rather than ~ throughout, on both platforms. The shell only
expands ~ at the start of a word, so --datadir=~/mysql-data/data reaches
mysqld as a directory literally named ~ and the server aborts. Quoting
"$HOME/..." also keeps the path in one piece if your home directory name
contains a space. Replace the repository path with your actual clone location
if different.CMake Options Explained
<path-to-repo>- Path to the cloned VillageSQL repository-DWITH_DEBUG=1- Builds with the DBUG facility and assertions, unoptimized (recommended for development)-DCMAKE_INSTALL_PREFIX="$HOME/mysql"- Sets installation directory
Additional CMake Options
Production build:If you need to reconfigure, clear the CMake cache first (run from within the build directory):
Step 4: Compile the Code
Build VillageSQL using make with parallel compilation. From within the build directory: Build everything (recommended):mysql client that
Step 7 uses, the extension SDK, and the
example extensions’ .veb files.
Build the server and client only:
.veb files, so INSTALL EXTENSION vsql_complex finds no bundle to install
and an extension build that passes -DVillageSQL_BUILD_DIR finds no SDK.
When complete, verify the server and client binaries were built:
Step 5: Initialize the Database
Before starting the server for the first time, initialize the data directory: Production (with generated password - recommended):--user=root flag:
Use
--initialize (with password) for production-like setups. Use --initialize-insecure (no password) only for local development and testing. When using --initialize, a temporary password will be generated and printed to the console: A temporary password is generated for root@localhost: <password>Step 6: Start the Server
Start the VillageSQL server:Step 7: Connect with MySQL Client
Open a new terminal and connect to the server using the MySQL client: If using —initialize-insecure (no password):Verify Installation
Check that you’re running VillageSQL:Step 8: Set Up Users and Database
Change Root Password
If you used--initialize, change the temporary password:
Create a Development User
For daily development, create a non-root user:Create a Database
Step 9: Run the Tests
Verify the build with the VillageSQL test suite, from the build directory:--nounit-tests skips the upstream MySQL unit tests, which include known failures. Run the VillageSQL unit tests separately:
Troubleshooting
Build Fails with Missing Dependencies
Run the setup script again. Step 3 leaves you in the build directory, so give the script its absolute path:Server Won’t Start
- Verify the data directory was initialized:
ls "$HOME/mysql-data/data/" - Check if another MySQL/VillageSQL instance is using port 3306
- Review error logs in
$HOME/mysql-data/data/*.err
Extension Installation Fails
- Ensure the extension library (
.soon Linux,.dylibon macOS) exists in the build output - Check that VillageSQL has the necessary permissions to load extensions
- Verify the extension name and .veb filename are correct
Next Steps
Using Extensions
Learn how to install, update, and manage VillageSQL extensions.
Creating Extensions
Build your own custom extensions for VillageSQL.
Getting Started
Quick start guide for VillageSQL.

