> For the complete documentation index, see [llms.txt](https://developer.harness.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developer.harness.io/open-source/use-harness-open-source/pipelines-1/samples/mysql.md).

# Mysql

This guide covers configuring continuous integration pipelines for projects that have a MySQL dependency.

## Basic Example <a href="#basic-example" id="basic-example"></a>

In the below example we demonstrate a pipeline that launches MySQL as a background step. The database server will be available at `database:3306`, where the hostname matches the background step name.

```yaml
kind: pipeline
spec:
  stages:
  - type: ci
    spec:
      steps:
      - name: database
        type: background
        spec:
          container: mysql
          envs:
            MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
            MYSQL_DATABASE: test

      - name: test
        type: run
        spec:
          container: mysql
          script: |-
            sleep 15
            mysql -u root -h database --execute="SELECT VERSION();"
```

## Database Options <a href="#database-options" id="database-options"></a>

If you need to start the mysql container with additional runtime options you can override the entrypoint and command arguments.

```yaml
      - name: database
        type: background
        spec:
          container: mysql
          entrypoint: "mysqld"
          args: [ "--character-set-server=utf8mb4" ]
          envs:
            MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
            MYSQL_DATABASE: test
```

## Database Settings <a href="#database-settings" id="database-settings"></a>

The official MySQL image provides environment variables used at startup to create the default username, password, database and more. Please see the official image [documentation](https://hub.docker.com/_/mysql/) for more details.

```yaml
      - name: database
        type: background
        spec:
          container: mysql
          entrypoint: "mysqld"
          args: [ "--character-set-server=utf8mb4" ]
          envs:
            MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
            MYSQL_DATABASE: test
```

## Common Problems <a href="#common-problems" id="common-problems"></a>

### Initialization <a href="#initialization" id="initialization"></a>

If you are unable to connect to the MySQL container please make sure you are giving MySQL adequate time to initialize and begin accepting connections.

```yaml
      - name: test
        type: run
        spec:
          container: mysql
          script: |-
            sleep 15
            mysql -u root -h database --execute="SELECT VERSION();"
```

### Incorrect Hostname <a href="#incorrect-hostname" id="incorrect-hostname"></a>

You cannot use `127.0.0.1` or `localhost` to connect with the Mysql container. If you are unable to connect to Mysql please verify you are using the correct hostname, corresponding with the name of the mysql service container.

Bad:

```yaml
      - name: test
        type: run
        spec:
          container: mysql
          script: |-
            sleep 15
            mysql -u root -h localhost --execute="SELECT VERSION();"
```

Good:

```yaml
      - name: test
        type: run
        spec:
          container: mysql
          script: |-
            sleep 15
            mysql -u root -h database --execute="SELECT VERSION();"
```
