Using MySQL

  • Tier: Free, Premium, Ultimate
  • Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated

Many applications depend on MySQL as their database, and you may need it for your tests to run.

Use MySQL with the Docker executor

If you want to use a MySQL container, you can use GitLab Runner with the Docker executor.

This example shows you how to set a username and password that GitLab uses to access the MySQL container. If you do not set a username and password, you must use root.

Variables set in the GitLab UI are not passed down to the service containers. For more information, see GitLab CI/CD variables.

  1. To specify a MySQL image, add the following to your .gitlab-ci.yml file:

    Copy to clipboard
    services:
      - mysql:latest
    • You can use any Docker image available on Docker Hub. For example, to use MySQL 5.5, use mysql:5.5.
    • The mysql image can accept environment variables. For more information, view the Docker Hub documentation.
  2. To include the database name and password, add the following to your .gitlab-ci.yml file:

    Copy to clipboard
    variables:
      # Configure mysql environment variables (https://hub.docker.com/_/mysql/)
      MYSQL_DATABASE: $MYSQL_DATABASE
      MYSQL_ROOT_PASSWORD: $MYSQL_ROOT_PASSWORD

    The MySQL container uses MYSQL_DATABASE and MYSQL_ROOT_PASSWORD to connect to the database. Pass these values by using variables ($MYSQL_DB and $MYSQL_PASS), rather than calling them directly.

  3. Configure your application to use the database, for example:

    Copy to clipboard
    Host: mysql
    User: runner
    Password: <your_mysql_password>
    Database: <your_mysql_database>

    In this example, the user is runner. You should use a user that has permission to access your database.

Use MySQL with the Shell executor

You can also use MySQL on manually-configured servers that use GitLab Runner with the Shell executor.

  1. Install the MySQL server:

    Copy to clipboard
    sudo apt-get install -y mysql-server mysql-client libmysqlclient-dev
  2. Choose a MySQL root password and type it twice when asked.

    As a security measure, you can run mysql_secure_installation to remove anonymous users, drop the test database, and disable remote logins by the root user.

  3. Create a user by logging in to MySQL as root:

    Copy to clipboard
    mysql -u root -p
  4. Create a user (in this case, runner) that is used by your application. Change $password in the command to a strong password.

    At the mysql> prompt, type:

    Copy to clipboard
    CREATE USER 'runner'@'localhost' IDENTIFIED BY '$password';
  5. Create the database:

    Copy to clipboard
    CREATE DATABASE IF NOT EXISTS `<your_mysql_database>` DEFAULT CHARACTER SET `utf8` \
    COLLATE `utf8_unicode_ci`;
  6. Grant the necessary permissions on the database:

    Copy to clipboard
    GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, CREATE TEMPORARY TABLES, DROP, INDEX, ALTER, LOCK TABLES ON `<your_mysql_database>`.* TO 'runner'@'localhost';
  7. If all went well, you can quit the database session:

    Copy to clipboard
    \q
  8. Connect to the newly-created database to check that everything is in place:

    Copy to clipboard
    mysql -u runner -p -D <your_mysql_database>
  9. Configure your application to use the database, for example:

    Copy to clipboard
    Host: localhost
    User: runner
    Password: $password
    Database: <your_mysql_database>

Example project

To view a MySQL example, create a fork of this sample project. This project uses publicly-available instance runners on GitLab.com. Update the README.md file, commit your changes, and view the CI/CD pipeline to see it in action.