# MySQL for Agent (/database/providers/mysql/usage/mysql-for-agent)



`MySQLDb` stores an Agent's sessions and run history in MySQL.

## Usage [#usage]

Start in a [virtual environment](/sdk/setup).

Install Agno, SQLAlchemy, PyMySQL with its MySQL 8 authentication extra, and the OpenAI client:

```shell
uv pip install agno sqlalchemy "pymysql[rsa]" openai
```

### Run MySQL [#run-mysql]

Install [Docker Desktop](https://docs.docker.com/get-started/get-docker/), then start MySQL on port `3306`:

```bash
docker run -d \
  --name mysql \
  -e MYSQL_ROOT_PASSWORD=ai \
  -e MYSQL_DATABASE=ai \
  -e MYSQL_USER=ai \
  -e MYSQL_PASSWORD=ai \
  -p 3306:3306 \
  mysql:8
```

Set your OpenAI API key:

## Set OpenAI Key [#set-openai-key]

Set your `OPENAI_API_KEY` as an environment variable. You can get one [from OpenAI](https://platform.openai.com/account/api-keys).

<CodeBlockTabs defaultValue="Mac">
  <CodeBlockTabsList>
    <CodeBlockTabsTrigger value="Mac">
      Mac
    </CodeBlockTabsTrigger>

    <CodeBlockTabsTrigger value="Windows PowerShell">
      Windows PowerShell
    </CodeBlockTabsTrigger>
  </CodeBlockTabsList>

  <CodeBlockTab value="Mac">
    ```bash
    export OPENAI_API_KEY=sk-***
    ```
  </CodeBlockTab>

  <CodeBlockTab value="Windows PowerShell">
    ```powershell
    $env:OPENAI_API_KEY = "your-openai-api-key"
    ```
  </CodeBlockTab>
</CodeBlockTabs>

```python title="mysql_for_agent.py"
from agno.agent import Agent
from agno.db.mysql import MySQLDb

db_url = "mysql+pymysql://ai:ai@localhost:3306/ai"

db = MySQLDb(db_url=db_url)

agent = Agent(
    db=db,
    add_history_to_context=True,
)
agent.print_response("How many people live in Canada?")
agent.print_response("What is their national anthem called?")
```

## Run the example [#run-the-example]

Save the code as `mysql_for_agent.py`, start the database described above, and run:

```shell
python mysql_for_agent.py
```

## Parameters [#parameters]

| Parameter         | Type               | Default | Description                                                                                                                              |
| ----------------- | ------------------ | ------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| `id`              | `Optional[str]`    | `None`  | Database ID. Derived from the connection and schema when omitted.                                                                        |
| `db_engine`       | `Optional[Engine]` | `None`  | SQLAlchemy database engine. Provide this or `db_url`.                                                                                    |
| `db_schema`       | `Optional[str]`    | `None`  | Database schema. Uses `"ai"` when omitted.                                                                                               |
| `db_url`          | `Optional[str]`    | `None`  | Database URL. Provide this or `db_engine`.                                                                                               |
| `session_table`   | `Optional[str]`    | `None`  | Table for Agent, Team, and Workflow sessions. Uses `"agno_sessions"` when omitted.                                                       |
| `runs_table`      | `Optional[str]`    | `None`  | Table for session runs. Uses `"agno_runs"` with the default session table, or `<session_table>_runs` when `session_table` is customized. |
| `memory_table`    | `Optional[str]`    | `None`  | Table for memories. Uses `"agno_memories"` when omitted.                                                                                 |
| `metrics_table`   | `Optional[str]`    | `None`  | Table for metrics. Uses `"agno_metrics"` when omitted.                                                                                   |
| `eval_table`      | `Optional[str]`    | `None`  | Table for evaluation run data. Uses `"agno_eval_runs"` when omitted.                                                                     |
| `knowledge_table` | `Optional[str]`    | `None`  | Table for knowledge content. Uses `"agno_knowledge"` when omitted.                                                                       |
| `traces_table`    | `Optional[str]`    | `None`  | Table for traces. Uses `"agno_traces"` when omitted.                                                                                     |
| `spans_table`     | `Optional[str]`    | `None`  | Table for spans. Uses `"agno_spans"` when omitted.                                                                                       |
| `versions_table`  | `Optional[str]`    | `None`  | Table for schema versions. Uses `"agno_schema_versions"` when omitted.                                                                   |
| `create_schema`   | `bool`             | `True`  | Create the database schema when it does not exist. Set to `False` when migrations manage it.                                             |
