# Configuration

This page lists every config source, field, and default that `init()` accepts.

## Source Priority

`init(config?)` picks one source for each side using the table below (`src/MySQLPool.ts:52-72`). The chosen source is used as a whole; fields are never merged across sources:

| Pool | Source (highest first) |
|---|---|
| Read | `config.config` → `config.read` → `DB_READ_*` env vars |
| Write | `config.config` → `config.write` → `config.read` → `DB_WRITE_*` env vars |

```typescript
import MySQLPool from "@pardnchiu/mysql-pool";

// Read-write split
await MySQLPool.init({
  read: { host: "replica.local", user: "reader", password: "secret", database: "app", connectionLimit: 16 },
  write: { host: "primary.local", user: "writer", password: "secret", database: "app", connectionLimit: 4 },
});
```

## `MySQLConfig`

```typescript
interface MySQLConfig {
  host?: string;
  port?: number;
  user?: string;
  password?: string;
  database?: string;
  charset?: string;
  connectionLimit?: number;
}
```

Every field gets a default and is trimmed by `correctConfig()` (`src/MySQLPool.ts:40-50`):

| Field | Default | Detail |
|---|---|---|
| `host` | `localhost` | |
| `port` | `3306` | Also falls back to `3306` when it does not parse as an integer |
| `user` | `root` | |
| `password` | `""` | Leading and trailing whitespace is removed |
| `database` | `""` | An empty string skips that side's pool |
| `charset` | `utf8mb4` | |
| `connectionLimit` | `8` | Maximum open connections in the pool |

`MySQLConfig` is not exported from the package.

## Environment Variables

Read when no matching config object is passed:

| Read side | Write side | Default |
|---|---|---|
| `DB_READ_HOST` | `DB_WRITE_HOST` | `localhost` |
| `DB_READ_PORT` | `DB_WRITE_PORT` | `3306` |
| `DB_READ_USER` | `DB_WRITE_USER` | `root` |
| `DB_READ_PASSWORD` | `DB_WRITE_PASSWORD` | `""` |
| `DB_READ_DATABASE` | `DB_WRITE_DATABASE` | `""` (no pool) |
| `DB_READ_CHARSET` | `DB_WRITE_CHARSET` | `utf8mb4` |
| `DB_READ_CONNECTION` | `DB_WRITE_CONNECTION` | `4` |

Note the different connection defaults: `4` through environment variables, `8` through a config object without `connectionLimit`.

## Related Pages

- [Read-Write Pools](/read-write-pools)
- [Lifecycle and Shutdown](/shutdown)
