> ## Documentation Index
> Fetch the complete documentation index at: https://docs.mem0.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Azure MySQL

> Use Azure Database for MySQL as a vector store in Mem0 with JSON-based vector storage for semantic search.

[Azure Database for MySQL](https://azure.microsoft.com/products/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

```python theme={null}
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)
messages = [
    {"role": "user", "content": "I'm planning to watch a movie tonight. Any recommendations?"},
    {"role": "assistant", "content": "How about thriller movies? They can be quite engaging."},
    {"role": "user", "content": "I'm not a big fan of thriller movies but I love sci-fi movies."},
    {"role": "assistant", "content": "Got it! I'll avoid thriller recommendations and suggest sci-fi movies in the future."}
]
m.add(messages, user_id="alice", metadata={"category": "movies"})
```

#### Using Azure Managed Identity

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

```python theme={null}
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
        }
    }
}
```

<Note>
  When `use_azure_credential` is enabled, the password is obtained via Azure DefaultAzureCredential (supports Managed Identity, Azure CLI, etc.)
</Note>

### 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 credential) | `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:

```bash theme={null}
# 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:

```sql theme={null}
CREATE AADUSER 'your-app-identity' IDENTIFIED BY 'your-client-id';
GRANT ALL PRIVILEGES ON mem0_db.* TO 'your-app-identity'@'%';
FLUSH PRIVILEGES;
```

<Tip>
  For production, use [Managed Identity](https://learn.microsoft.com/azure/active-directory/managed-identities-azure-resources/) to eliminate password management.
</Tip>
