В этой статье мы рассмотрим способ который покажет как запустить несколько экземпляров 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 –, не забудьте выйти по завершении.
![Следуйте инструкциям на экране и продолжайте](https://linuxwin.ru/wp-content/uploads/2022/08/sleduyte-instruktsiyam-na-ekrane-i-prodolzhayte.jpg)
Далее остановите на время службу mysql. Делается это командой systemctl stop mysql
Компиляция базы данных из исходного кода
Если вы попытаетесь установить mariadb с помощью apt-get, когда mysql уже установлен, как это сделал я. То система попытается удалить mysql, это на мой взгляд очень правильно и разумно.
![Несколько экземпляров MySQL на одном сервере Linux](https://linuxwin.ru/wp-content/uploads/2022/08/neskolko-ekzemplyarov-mysql-na-odnom-servere-linux.jpg)
Система попытается удалить предыдущую базу данных, потому что mariadb и mysql, предназначены для одной и той же задачи. Из-за этого они и конфликтуют. Вот поэтому нам требуется установить одну из баз данных из исходников.
Зависимости
Вы можете получить общие и подробные инструкции по сборке mariadb здесь и здесь. На моей ubuntu я сделал следующее:
Сначала включите исходные репозитории.
![Раскомментируйте строки deb-src](https://linuxwin.ru/wp-content/uploads/2022/08/raskommentiruyte-stroki-deb-src.jpg)
# nano /etc/apt/sources.list
# apt-get update
Далее установите ряд инструментов сборочных зависимостей, которые необходимы для компиляции MariaDB. Вы можете легко установить их с помощью следующей команды.
# apt build-dep mariadb-server
![Установка зависимых компонентов для сборки](https://linuxwin.ru/wp-content/uploads/2022/08/ustanovka-zavisimyh-komponentov-dlya-sborki.jpg)
Компиляция и установка
Зависимости установлены, теперь пришло время распаковать 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
![Компиляция и установка](https://linuxwin.ru/wp-content/uploads/2022/08/kompilyatsiya-i-ustanovka.jpg)
Теперь мы можем сделать сборку и установить ее.
# 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
![Создание системной базы данных](https://linuxwin.ru/wp-content/uploads/2022/08/sozdanie-sistemnoy-bazy-dannyh.jpg)
Теперь, когда база данных системы создана, мы можем запустить демон (службу) 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 запущена](https://linuxwin.ru/wp-content/uploads/2022/08/mariadb-zapuschena.jpg)
Внимание! убедитесь, что параметр командной строки –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 запущена и работает](https://linuxwin.ru/wp-content/uploads/2022/08/mariadb-zapuschena-i-rabotaet.jpg)
Далее я перейду на другую вкладку, чтобы протестировать mysql. Вначале я остановил mysql, поэтому мне нужно запустить службу перед попыткой подключения.
# systemctl start mysql
# mysql
![MySQL работает](https://linuxwin.ru/wp-content/uploads/2022/08/mysql-rabotaet.jpg)
Последняя проверка может заключается в том, что каждая база данных прослушивает свой соответствующий порт tcp.
# netstat -puta
![Прослушка портов базы данных](https://linuxwin.ru/wp-content/uploads/2022/08/proslushka-portov-bazy-dannyh.jpg)
Порт tcp 3306 известен для службы mysql или mariadb. Но сейчас порт 3307 прослушивает соединения mariadb.
Это подтверждает, что у нас есть несколько экземпляров mysql на одном сервере. А вернее один из этих экземпляров не является mysql это mariadb.