> For the complete documentation index, see [llms.txt](https://axiomemu.gitbook.io/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://axiomemu.gitbook.io/docs/dataserver/dataserver-ini.md).

# DataServer.ini

Primary configuration file for DataServer. All keys live under a single `[DataServerInfo]` section.

## File Location

```
DataServer/DataServer.ini
```

Loaded once at startup. Changes require a DataServer restart.

## Configuration

All keys belong to section `[DataServerInfo]`.

| Key              | Type   | Default   | Effect                                                                                                                                                                    |
| ---------------- | ------ | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `DataServerODBC` | string | *(empty)* | ODBC DSN name for SQL Server. Must exist in Windows ODBC Data Sources on the DataServer host. Required.                                                                   |
| `DataServerUSER` | string | *(empty)* | SQL login user. Leave empty to use Windows Authentication if the DSN is configured for it.                                                                                |
| `DataServerPASS` | string | *(empty)* | SQL login password. Leave empty when using Windows Authentication.                                                                                                        |
| `DataServerPort` | int    | `55960`   | TCP port GameServers connect to. Must match each GameServer's DataServer port setting.                                                                                    |
| `AdvancedLog`    | 0 or 1 | `0`       | Enables verbose per-packet logging on both inter-server dispatchers (GS-DS and the extended guild/castle/gens channel). Noisy; use only when diagnosing a specific issue. |
| `LicenseKey`     | string | *(empty)* | 64-char hex license token tied to this DataServer instance. Required; empty or invalid prevents startup.                                                                  |

## Connection Pool

DataServer opens the primary connection plus 4 pool connections, all using the same DSN and credentials. The pool size is fixed at compile time and not configurable via the INI.

Implications for SQL Server sizing:

* Each DataServer consumes 5 concurrent SQL logins
* The SQL login must permit at least 5 simultaneous sessions
* Under load, all 5 can be busy at once; plan `max worker threads` and `max connections` accordingly

## AdvancedLog

| Value | Output                                                                                                      |
| ----- | ----------------------------------------------------------------------------------------------------------- |
| `0`   | Standard log only (connections, errors, summary lines)                                                      |
| `1`   | Adds per-packet header logging for the main GS-DS dispatcher and for the extended guild/castle/gens channel |

Leave off in production. Enable temporarily when tracing a specific save or load path, then disable; the extra I/O slows the server under load.

## Important Behavior

* Keys are read with the Windows INI parser. A missing file or missing key yields the documented default (empty string for text keys, the listed integer for numeric keys), so a missing or unreadable `DataServer.ini` results in an empty DSN and an empty license key, which then fail license activation and the SQL connect
* License activation runs before anything else. An empty or invalid `LicenseKey` stops the process before the SQL connect is attempted
* Primary database connection is attempted first; pool connections open next. Either failure keeps the TCP port closed, so GameServers cannot connect
* License activation requires the license service to be reachable at startup. Offline grace only applies to heartbeats after a successful activation, not to the activation itself
* Quotes, trailing spaces, and BOM can cause silent value truncation
* Related files loaded from the DataServer root alongside this INI: [`AllowableIpList.txt`](/docs/dataserver/allowableiplist.md) and [`BadSyntax.txt`](/docs/dataserver/badsyntax.md)

## Examples

{% tabs %}
{% tab title="Minimal local setup" %}
{% code title="DataServer.ini" %}

```ini
[DataServerInfo]
DataServerODBC = MuOnline
DataServerPort = 55960
LicenseKey = YOUR-KEY-HERE
```

{% endcode %}
{% endtab %}

{% tab title="Production with SQL auth" %}
{% code title="DataServer.ini" %}

```ini
[DataServerInfo]
DataServerODBC = MuOnline
DataServerUSER = mu_app
DataServerPASS = <strong-password>
DataServerPort = 55960
AdvancedLog = 0
LicenseKey = YOUR-KEY-HERE
```

{% endcode %}
{% endtab %}
{% endtabs %}

## Common Issues

* **Startup freezes at "Loading files..."** - `LicenseKey` is empty, invalid, or the license service is unreachable
* **"Could not connect to database"** - DSN name typo, wrong credentials, or the DSN targets the wrong SQL Server instance
* **"Could not connect pool connection N"** - primary login works but the SQL login's session limit is below 5
* **GameServer cannot reach DataServer** - `DataServerPort` changed but GameServer config was not updated, or a firewall blocks the port
* **Excessive log noise, slow responses** - `AdvancedLog` left at `1` under production load

## Related Pages

* [AllowableIpList.txt](/docs/dataserver/allowableiplist.md) - GameServer IP whitelist loaded alongside this INI
* [BadSyntax.txt](/docs/dataserver/badsyntax.md) - forbidden substrings for character and guild names
* [ConnectServer.ini](/docs/connectserver/connectserver-ini.md) - sibling INI for ConnectServer using the same parser conventions
