2019-09-04 21:01:54 +05:30
---
2020-06-23 00:09:42 +05:30
stage: Verify
group: Runner
2022-11-25 23:54:43 +05:30
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
2019-09-04 21:01:54 +05:30
type: reference
---
2021-11-11 11:23:49 +05:30
# Using MySQL **(FREE)**
2015-12-23 02:04:40 +05:30
2020-11-24 15:15:51 +05:30
Many applications depend on MySQL as their database, and you may
need it for your tests to run.
2015-12-23 02:04:40 +05:30
## Use MySQL with the Docker executor
2021-09-30 23:02:18 +05:30
If you want to use a MySQL container, you can use [GitLab Runner ](../runners/index.md ) with the Docker executor.
2015-12-23 02:04:40 +05:30
2021-06-08 01:23:25 +05:30
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` .
2021-11-11 11:23:49 +05:30
NOTE:
Variables set in the GitLab UI are not passed down to the service containers.
2023-04-23 21:23:45 +05:30
For more information, see [GitLab CI/CD variables ](../variables/index.md ).
2015-12-23 02:04:40 +05:30
2020-11-24 15:15:51 +05:30
1. To specify a MySQL image, add the following to your `.gitlab-ci.yml` file:
2015-12-23 02:04:40 +05:30
2020-11-24 15:15:51 +05:30
```yaml
services:
- mysql:latest
```
2019-10-12 21:52:04 +05:30
2020-11-24 15:15:51 +05:30
- You can use any Docker image available on [Docker Hub ](https://hub.docker.com/_/mysql/ ).
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 ](https://hub.docker.com/_/mysql/ ).
2015-12-23 02:04:40 +05:30
2020-11-24 15:15:51 +05:30
1. To include the database name and password, add the following to your `.gitlab-ci.yml` file:
2015-12-23 02:04:40 +05:30
2020-11-24 15:15:51 +05:30
```yaml
variables:
# Configure mysql environment variables (https://hub.docker.com/_/mysql/)
2021-11-11 11:23:49 +05:30
MYSQL_DATABASE: $MYSQL_DATABASE
MYSQL_ROOT_PASSWORD: $MYSQL_ROOT_PASSWORD
2020-11-24 15:15:51 +05:30
```
2015-12-23 02:04:40 +05:30
2020-11-24 15:15:51 +05:30
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 ](https://gitlab.com/gitlab-org/gitlab/-/issues/30178 ).
2015-12-23 02:04:40 +05:30
2020-11-24 15:15:51 +05:30
1. Configure your application to use the database, for example:
```yaml
Host: mysql
User: runner
Password: < your_mysql_password >
Database: < your_mysql_database >
```
2015-12-23 02:04:40 +05:30
2021-06-08 01:23:25 +05:30
In this example, the user is `runner` . You should use a user that has permission to
access your database.
2015-12-23 02:04:40 +05:30
## Use MySQL with the Shell executor
2020-11-24 15:15:51 +05:30
You can also use MySQL on manually-configured servers that use
2015-12-23 02:04:40 +05:30
GitLab Runner with the Shell executor.
2020-11-24 15:15:51 +05:30
1. Install the MySQL server:
2015-12-23 02:04:40 +05:30
2020-11-24 15:15:51 +05:30
```shell
sudo apt-get install -y mysql-server mysql-client libmysqlclient-dev
```
2015-12-23 02:04:40 +05:30
2020-11-24 15:15:51 +05:30
1. Choose a MySQL root password and type it twice when asked.
2015-12-23 02:04:40 +05:30
2021-02-22 17:27:13 +05:30
NOTE:
2020-11-24 15:15:51 +05:30
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.
2015-12-23 02:04:40 +05:30
2020-11-24 15:15:51 +05:30
1. Create a user by logging in to MySQL as root:
2015-12-23 02:04:40 +05:30
2020-11-24 15:15:51 +05:30
```shell
mysql -u root -p
```
2015-12-23 02:04:40 +05:30
2021-02-22 17:27:13 +05:30
1. Create a user (in this case, `runner` ) that is used by your
2020-11-24 15:15:51 +05:30
application. Change `$password` in the command to a strong password.
2015-12-23 02:04:40 +05:30
2020-11-24 15:15:51 +05:30
At the `mysql>` prompt, type:
2015-12-23 02:04:40 +05:30
2020-11-24 15:15:51 +05:30
```sql
CREATE USER 'runner'@'localhost' IDENTIFIED BY '$password';
```
2015-12-23 02:04:40 +05:30
2020-11-24 15:15:51 +05:30
1. Create the database:
2015-12-23 02:04:40 +05:30
2020-11-24 15:15:51 +05:30
```sql
CREATE DATABASE IF NOT EXISTS `<your_mysql_database>` DEFAULT CHARACTER SET `utf8` \
COLLATE `utf8_unicode_ci` ;
```
2015-12-23 02:04:40 +05:30
2020-11-24 15:15:51 +05:30
1. Grant the necessary permissions on the database:
2015-12-23 02:04:40 +05:30
2020-11-24 15:15:51 +05:30
```sql
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, CREATE TEMPORARY TABLES, DROP, INDEX, ALTER, LOCK TABLES ON `<your_mysql_database>` .* TO 'runner'@'localhost';
```
2015-12-23 02:04:40 +05:30
2020-11-24 15:15:51 +05:30
1. If all went well, you can quit the database session:
2015-12-23 02:04:40 +05:30
2020-11-24 15:15:51 +05:30
```shell
\q
```
2015-12-23 02:04:40 +05:30
2020-11-24 15:15:51 +05:30
1. Connect to the newly-created database to check that everything is
in place:
2015-12-23 02:04:40 +05:30
2020-11-24 15:15:51 +05:30
```shell
mysql -u runner -p -D < your_mysql_database >
```
2015-12-23 02:04:40 +05:30
2020-11-24 15:15:51 +05:30
1. Configure your application to use the database, for example:
2015-12-23 02:04:40 +05:30
2020-11-24 15:15:51 +05:30
```shell
Host: localhost
User: runner
Password: $password
Database: < your_mysql_database >
```
2015-12-23 02:04:40 +05:30
## Example project
2020-11-24 15:15:51 +05:30
To view a MySQL example, create a fork of this [sample project ](https://gitlab.com/gitlab-examples/mysql ).
2021-09-30 23:02:18 +05:30
This project uses publicly-available [shared runners ](../runners/index.md ) on [GitLab.com ](https://gitlab.com ).
2020-11-24 15:15:51 +05:30
Update the README.md file, commit your changes, and view the CI/CD pipeline to see it in action.