
Рассмотрим способ который покажет как запустить несколько экземпляров 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
Система попытается удалить предыдущую базу данных, потому что mariadb и mysql, предназначены для одной и той же задачи. Из-за этого они и конфликтуют. Вот поэтому нам требуется установить одну из баз данных из исходников.
Зависимости
Вы можете получить общие и подробные инструкции по сборке mariadb здесь и здесь. На моей ubuntu я сделал следующее:
Сначала включите исходные репозитории.
Раскомментируйте строки 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 запущена
Внимание! убедитесь, что параметр командной строки –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 запущена и работает
Далее я перейду на другую вкладку, чтобы протестировать mysql. Вначале я остановил mysql, поэтому мне нужно запустить службу перед попыткой подключения.
# systemctl start mysql
# mysql
MySQL работает
Последняя проверка может заключается в том, что каждая база данных прослушивает свой соответствующий порт tcp.
# netstat -puta
Прослушка портов базы данных
Порт tcp 3306 известен для службы mysql или mariadb. Но сейчас порт 3307 прослушивает соединения mariadb.
Это подтверждает, что у нас есть несколько экземпляров mysql на одном сервере. А вернее один из этих экземпляров не является mysql это mariadb.