Несколько экземпляров MySQL на одном сервере Linux

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

Установка нескольких экземпляров MySQL на одном сервере Linux

Я установил сначала mysql, а затем mariadb, не обязательно устанавливать в таком порядке как я. Вы можете сделать это в другом порядке (сначала maria, а затем mysql) или даже разные версии одной и той же базы данных. Да да да, так тоже можно.

Что нам нужно сделать, так это установить одину базу из пакетов с помощью apt-get, а другую скомпилировать из исходного кода. Позже вы увидите, почему именно так. Если вы выберете другой порядок или скомпилируете обе базы из исходного кода, тогда вам следует ознакомиться с официальной документацией.

Бинарные пакеты

Я работаю с Ubuntu 20.10 и собираюсь установить MySQL и MariaDB. Первый шаг очень прост, выполните следующие команды для установки mysql из пакетов, доступных в репозитории.

# sudo -i

# apt-get install mysql-server

Команда sudo -i эквивалентна команде su —, не забудьте выйти по завершении.

Следуйте инструкциям на экране и продолжайте
Следуйте инструкциям на экране и продолжайте

Далее остановите на время службу mysql. Делается это командой systemctl stop mysql

Компиляция базы данных из исходного кода

Если вы попытаетесь установить mariadb с помощью apt-get, когда mysql уже установлен, как это сделал я. То система попытается удалить mysql, это на мой взгляд очень правильно и разумно.

Несколько экземпляров MySQL на одном сервере Linux
Несколько экземпляров MySQL на одном сервере Linux

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

Зависимости

Вы можете получить общие и подробные инструкции по сборке mariadb здесь и здесь. На моей ubuntu я сделал следующее:

Сначала включите исходные репозитории.

Раскомментируйте строки deb-src
Раскомментируйте строки deb-src

# nano /etc/apt/sources.list

# apt-get update

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

# apt build-dep mariadb-server

Установка зависимых компонентов для сборки
Установка зависимых компонентов для сборки

Компиляция и установка

Зависимости установлены, теперь пришло время распаковать tarball.

# tar zxvf mariadb-10.6.5.tar.gz

# cd mariadb-10.6.5

Далее собираем с помощью cmake. В первом cmake я устанавливаю некоторые пути, чтобы убедиться, что все идет в /usr/local/mariadb, чтобы не конфликтовать с MySQL.

# cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr/local/mariadb -DGRN_DEFAULT_DOCUMENT_ROOT:PATH=/usr/local/mariadb/share/groonga/html/admin -DGRN_LOG_PATH:FILEPATH=/usr/local/mariadb/var/log/groonga/groonga.log -DMYSQL_DATADIR:PATH=/usr/local/mariadb/data

Компиляция и установка
Компиляция и установка

Теперь мы можем сделать сборку и установить ее.

# cmake --build .

# cmake --install .

Создайте базу данных mysql и запустите службу

Сначала нам нужно создать минимальный конфигурационный файл со следующим содержимым:

# nano /usr/local/mariadb/etc/my.cnf
[mysqld]
user = mysql
pid-file = /usr/local/mariadb/var/run/mysqld/mysqld.pid
socket = /usr/local/mariadb/var/run/mysqld/mysqld.sock
port = 3307
datadir = /usr/local/mariadb/data
bind-address = 127.0.0.1

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

# cd /usr/local/mariadb

# ./scripts/mysql_install_db --defaults-file=/usr/local/mariadb/etc/my.cnf --user=mysql

Создание системной базы данных
Создание системной базы данных

Теперь, когда база данных системы создана, мы можем запустить демон (службу) mariadb. Делается это следующей командой.

# ./bin/mysqld_safe --defaults-file='https://1118798822.rsc.cdn77.org/usr/local/mariadb/etc/my.cnf' --datadir='/usr/local/mariadb/data' --user=mysql

MariaDB запущена
MariaDB запущена

Внимание! убедитесь, что параметр командной строки —defaults-file является первым! Иначе демон mariadb будет использовать /etc/mysql/my.cnf из mysql. Я потратил два дня, пытаясь понять, что происходит.

Тестирование работы нескольких экземпляров MySQL на одном сервере Linux

Сначала я попытаюсь подключиться к MariaDB, так как я использую нестандартный порт tcp и другой сокет, мне нужно сообщить об этом клиенту mysql.

# mysql -S /usr/local/mariadb/var/run/mysqld/mysqld.sock -P3307

MariaDB запущена и работает
MariaDB запущена и работает

Далее я перейду на другую вкладку, чтобы протестировать mysql. Вначале я остановил mysql, поэтому мне нужно запустить службу перед попыткой подключения.

# systemctl start mysql

# mysql

MySQL работает
MySQL работает

Последняя проверка может заключается в том, что каждая база данных прослушивает свой соответствующий порт tcp.

# netstat -puta

Прослушка портов базы данных
Прослушка портов базы данных

Порт tcp 3306 известен для службы mysql или mariadb. Но сейчас порт 3307 прослушивает соединения mariadb.

Это подтверждает, что у нас есть несколько экземпляров mysql на одном сервере. А вернее один из этих экземпляров не является mysql это mariadb.

 

Nazario

Я — Nazario, создатель и автор сайта linuxwin.ru, специализируюсь на информационных технологиях с акцентом на системное администрирование Linux и Windows, веб-разработку и настройку различных систем.

Linux и Windows
Выскажите своё мнение или присоединяйтесь к обсуждению:

Отправляя комментарий, вы даете согласие на обработку ваших данных в соответствии с политикой конфиденциальности и даёте согласие на их использование.