Azure MySQL - Mem0

Azure Database for MySQL

Azure Database for MySQL is a fully managed relational database service that provides enterprise-grade reliability and security. It supports JSON-based vector storage for semantic search capabilities in AI applications.

Usage

import os
from mem0 import Memory

os.environ["OPENAI_API_KEY"] = "sk-xx"

config = {
    "vector_store": {
        "provider": "azure_mysql",
        "config": {
            "host": "your-server.mysql.database.azure.com",
            "port": 3306,
            "user": "your_username",
            "password": "your_password",
            "database": "mem0_db",
            "collection_name": "memories",
        }
    }
}

m = Memory.from_config(config)
m.add(messages, user_id="alice", metadata={"category": "movies"})

Using Azure Managed Identity

For production deployments, use Azure Managed Identity instead of passwords:

config = {
    "vector_store": {
        "provider": "azure_mysql",
        "config": {
            "host": "your-server.mysql.database.azure.com",
            "user": "your_username",
            "database": "mem0_db",
            "collection_name": "memories",
            "use_azure_credential": True,  # Uses DefaultAzureCredential
            "ssl_disabled": False
        }
    }
}

When use_azure_credential is enabled, the password is obtained via Azure DefaultAzureCredential (supports Managed Identity, Azure CLI, etc.)

Config

Here are the parameters available for configuring Azure MySQL:

Parameter Description Default Value
host MySQL server hostname Required
port MySQL server port 3306
user Database user Required
password Database password (optional with Azure) None
database Database name Required
collection_name Table name for storing vectors "mem0"
embedding_model_dims Dimensions of embedding vectors 1536
use_azure_credential Use Azure DefaultAzureCredential False
ssl_ca Path to SSL CA certificate None
ssl_disabled Disable SSL (not recommended) False
minconn Minimum connections in pool 1
maxconn Maximum connections in pool 5

Setup

Create MySQL Flexible Server using Azure CLI:

# Create resource group
az group create --name mem0-rg --location eastus

# Create MySQL Flexible Server
az mysql flexible-server create \
    --resource-group mem0-rg \
    --name mem0-mysql-server \
    --location eastus \
    --admin-user myadmin \
    --admin-password <YourPassword> \
    --version 8.0.21

# Create database
az mysql flexible-server db create \
    --resource-group mem0-rg \
    --server-name mem0-mysql-server \
    --database-name mem0_db

# Configure firewall
az mysql flexible-server firewall-rule create \
    --resource-group mem0-rg \
    --name mem0-mysql-server \
    --rule-name AllowMyIP \
    --start-ip-address <YourIP> \
    --end-ip-address <YourIP>

Enable Azure AD Authentication:

  1. In Azure Portal, navigate to your MySQL Flexible Server
  2. Go to Security > Authentication and enable Azure AD
  3. Add your application’s managed identity as a MySQL user:
CREATE AADUSER 'your-app-identity' IDENTIFIED BY 'your-client-id';
GRANT ALL PRIVILEGES ON mem0_db.* TO 'your-app-identity'@'%';
FLUSH PRIVILEGES;

For production, use Managed Identity to eliminate password management.