Установка и настройка MySQL сервера MariaDB в виде контейнера Docker для продуктового использования

В этой статье мы рассмотрим как правильно установить и настроить сервер MySQL (MariaDB 10.3) для продуктового использования. Для настройки будем использовать установку СУБД в виде приложения Docker, при этом все постоянные данные будут храниться в файловой системе хоста.

Если вам интересно узнать о преимуществах MariaDB перед стандартной реализацией от Oracle, читайте статью, посвященную этому вопросу.

Docker. Использование Docker-контейнера позволяет не только обеспечивает чистое развертывание, не зависящее от программного обеспечения сервера, но и позволяет поддерживать несколько СУБД MySQL разных версий и различного назначения в рамках одной операционной системы.

MariaDB. Открытость, темп разработки и улучшения MariaDB гораздо выше, чем у традиционного MySQL, поэтому многие дистрибутивы используют его по умолчанию, а разработчики предпочитают движок MariaDB традиционному MySQL из-за новых возможностей, которые отсутствуют в MySQL.

Установка Docker

Если у вас уже настроен и установлен Docker, просто пропустите этот шаг. Если Docker не установлен, установите его по одному из руководств: Ubuntu 16.04 и 18.04, Debian 9 и 10, Centos 7 и приступайте к следующему шагу.

Настройка MariaDB 10.3

При установке MariaDB мы будем использовать внешний конфигурационный файл и внешний каталог хранения данных для того, чтобы при перезапуске контейнера вся информация оставалась в сохранности. Сначала создадим необходимые каталоги, в которых будут храниться настройки, журналы и базы данных MySQL:

sudo mkdir -p /opt/mariadb/{data,etc,logs}

Создадим конфигурационный файл /opt/mariadb/etc/config.cnf, который будет уточнять настройки, применяемые контейнером по умолчанию. В этом файле вы можете переопределять переменные MySQL для задания нужного поведения. Мы определим 3 переменных для демонстрации возможностей:

[mysqld]
log_error=/var/lib/mysql/logs/errorlog

slow_query_log=on
slow_query_log_file=/var/lib/mysql/logs/slowlog

Теперь можно запустить сам сервер MySQL:

sudo docker run -d --restart=always --name mariadb_1 \
         -v /opt/mariadb/data:/var/lib/mysql \
         -v /opt/mariadb/etc:/etc/mysql/conf.d \
         -v /opt/mariadb/logs:/var/lib/mysql/logs \
         -e MYSQL_ROOT_PASSWORD=secret \
         -p 127.0.0.1:3306:3306 mariadb:10.3

Обратите внимание на пароль пользователя root, который задается с помощью переменной окружения MYSQL_ROOT_PASSWORD. Этот пароль будет записан в системную БД mysql, если вы после остановите контейнер и поменяете его, это не окажет влияние на пароль в БД.

Проверка работоспособности

Проверить работоспособность сервера проще всего с помощью консольного клиента MySQL:

sudo docker run -it --rm --link mariadb_1:mysql mariadb:10.3 \
       mysql -hmysql -uroot -psecret

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 9
Server version: 10.3.13-MariaDB-1:10.3.13+maria~bionic-log mariadb.org binary distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> select version();
+--------------------------------------------+
| version()                                  |
+--------------------------------------------+
| 10.3.13-MariaDB-1:10.3.13+maria~bionic-log |
+--------------------------------------------+
1 row in set (0.000 sec)

Выгрузка дампов с помощью MySQLDump

Выгрузка данных БД для резервных копий в самом простом случае может выполняться стандартным MySQLDump:

sudo docker run -it --rm --link mariadb_1:mysql mariadb:10.3 \
   mysqldump --all-databases -hmysql -uroot -psecret > all-databases.sql

Заключение

В этом простом руководстве вы научились как развернуть сервер MariaDB, подходящий для продуктового использования с помощью Docker. Хранение файлов в каталогах хоста позволяет изменять настройки сервера, получать доступ к записям журналов и сами данным баз данных.

Читайте о популярных ошибках, которые часто встречаются при настройке MySQL в нашей статье.