Переход на БД MySQL
Этот документ представляет собой руководство по настройке и запуску MySQL для использования с Marzban. Рассмотрены различные варианты настройки, включая MariaDB и Percona Server.
MySQL, Percona Server и MariaDB — три популярных системы управления базами данных (СУБД), основанные на открытом коде. Все они происходят от одного и того же исходного кода MySQL, но с течением времени развились в разные направления с уникальными особенностями.
Используемые файлы:
Директория/opt/marzban/
- .env
- docker-compose.yml
Предварительные требования
Прежде чем начать, убедитесь, что вы добавили себя в группу docker
, чтобы избежать необходимости использования sudo
при каждом вызове команд Docker:
Шаги настройки
Шаг 1: Создание тома для данных MySQL
Шаг 2: Инициализация базы данных
Для инициализации базы данных необходимо запустить контейнер с MySQL, задав следующие переменные окружения:
Переменная | Значение | Описание |
---|---|---|
MYSQL_ROOT_PASSWORD | super-puper-password | пароль для суперпользователя MySQL |
MYSQL_USER | marzban | имя пользователя базы данных для Marzban |
MYSQL_PASSWORD | super-password | пароль для пользователя базы данных |
MYSQL_DATABASE | marzban | имя базы данных для Marzban |
MYSQL_ROOT_HOST | 127.0.0.1 | адрес хоста, с которого разрешено подключение суперпользователя. Изменять не требуется. |
Варианты запуска контейнера:
Рекомендуется использовать LTS версию MariaDB, и стабильные версии других СУБД
Ниже приведены примеры запуска контейнера для каждого из вариантов MySQL, MariaDB и Percona Server.
Шаг 3: Остановка контейнера
После инициализации базы данных контейнер необходимо остановить контейнер, использовав следующую команду, введя пароль суперпользователя по запросу:
Шаг 4: Интеграция
Для интеграции MySQL с приложением Marzban через docker-compose
, необходимо добавить соответствующие сервисы в docker-compose.yml
файл.
Ниже приведены примеры конфигураций для каждого из вариантов MySQL, MariaDB и Percona Server.
Здесь мы устанавливаем некоторые параметры, рассмотрим их немного подробнее:
Параметр | Описание |
---|---|
disable-log-bin | отключает бинарный лог, что может ускорить работу MySQL, так как уменьшается количество операций записи на диск. Важно отметить, что отключение бинарного лога может повлиять на возможности репликации и восстановления данных. |
host-cache-size=0 | отключает кэширование информации о хостах, с которых поступают подключения. Это может ускорить MySQL, уменьшая задержку при новых соединениях, особенно в средах с большим количеством подключений |
innodb-open-files=1024 | увеличивает количество файлов, которые InnoDB может открыть одновременно. Это позволяет более эффективно управлять параллелизмом, ускоряя обработку запросов, особенно при работе с большим количеством таблиц. |
innodb-buffer-pool-size=268435456 | устанавливает размер буфера InnoDB в 256MB (по умолчанию 128MB). Увеличение этого параметра позволяет хранить больше данных и индексов в памяти, что существенно может ускорить чтение и запись, особенно для интенсивных операций. Однако стоит учитывать, что увеличение этого размера на системах с ограниченным объемом RAM может привести к проблемам с производительностью. |
Шаг 5: Установка строки подключения к базе данных
В файле .env
, необходимом для работы вашего приложения, следует указать строку подключения к базе данных, используя данные, заданные при инициализации контейнера:
Перед заполнением строки подключения, убедитесь, что вы используете правильные учетные данные, заданные в шаге 2, при инициализации контейнера MySQL:
Переменная | Значение | Описание |
---|---|---|
MYSQL_USER | marzban | имя пользователя базы данных для Marzban |
MYSQL_PASSWORD | super-password | пароль для пользователя базы данных |
MYSQL_ROOT_HOST | 127.0.0.1 | адрес хоста |
MYSQL_DATABASE | marzban | имя базы данных для Marzban |
Эта строка позволит вашему приложению подключаться к базе данных MySQL, настроенной в Docker, обеспечивая безопасное и удобное управление данными.
Перезапускаем контейнер
Шаг 6: Перенос данных из SQLite в MySQL
Процедура переноса данных включает создание дампа данных из вашей старой базы данных SQLite, предоставление этого дампа контейнеру MySQL и, наконец, перенос данных из SQLite в MySQL. Ниже представлены шаги и команды для выполнения этих задач.
Создание дампа из старой базы SQLite:
Для выполнения дампа базы данных SQLite, нам потребуется пакет для работы с ней
Создадим дамп с данными из вашей базы данных SQLite, используя следующую команду:
Эта команда выполняет дамп данных из файла db.sqlite3, находящегося в каталоге /var/lib/marzban, конвертирует инструкции INSERT INTO в REPLACE INTO для обеспечения совместимости с MySQL и сохраняет результат в файл /tmp/dump.sql.
Предоставление пути к дампу для MySQL:
Далее, перенесите созданный дамп в контейнер MySQL с помощью команды:
Переходите в каталог вашего проекта Marzban /opt/marzban и используйте docker compose cp для копирования файла дампа в контейнер mysql.
Перенос данных из SQLite в MySQL:
Перед выполнением переноса данных, убедитесь, что вы используете правильные учетные данные, заданные в шаге 2, при инициализации контейнера MySQL:
Переменная | Значение | Описание |
---|---|---|
MYSQL_USER | marzban | имя пользователя базы данных для Marzban |
MYSQL_PASSWORD | super-password | пароль для пользователя базы данных |
MYSQL_ROOT_HOST | 127.0.0.1 | адрес хоста |
MYSQL_DATABASE | marzban | имя базы данных для Marzban |
Теперь вы можете выполнить перенос данных, запустив следующую команду в контейнере MySQL:
После выполнения команды начнется процесс переноса данных.