Назад | Перейти на главную страницу

Запуск нескольких экземпляров MySQL на одном сервере Ubuntu

Можно ли установить несколько экземпляров серверов MySQL на сервере Ubuntu, как я могу это сделать на сервере Windows?

Цель состоит в том, чтобы установить 10 экземпляров MySQL Server на одном сервере Ubuntu, каждый сервер MySQL со своим собственным номером порта и IP-адресом.

Это определенно возможно. https://dev.mysql.com/doc/refman/5.7/en/multiple-unix-servers.html хорошая ссылка.

Альтернатива №1: Мое предложение, основанное на ссылке на MySQL, состоит в том, чтобы вы сделали 10 копий своего my.cnf и добавили их в свой /etc/rc.local. В этом случае желательно использовать такой инструмент, как monit, для наблюдения за состоянием и временем безотказной работы экземпляров. Вторая альтернатива - изменить существующий сценарий запуска.

Следующий сценарий не тестировался, но дает вам представление о том, что необходимо сделать. Он перебирает 10 серверов MySQL и копирует отдельную конфигурацию, создает отдельный каталог пользователя и данных и увеличивает номер порта с 3306 до 3317. Обязательно перейдите по rc.local, чтобы изменить IP-адрес на желаемые IP-адреса, перед запуском rc.local или перезапуском сервера.

Также не забудьте настроить разумные параметры с точки зрения использования производительности для одновременной обработки всех этих серверов. Могут быть конфликты с ACL, такими как SELinux или AppArmor. Если у вас возникнут проблемы с этим решением и вы не можете их понять, оставьте комментарий.

mv /etc/rc.local /etc/rc.local.bak
printf '%s\n' '#!/bin/bash' > /etc/rc.local
chmod 0755 /etc/rc.local
cd /etc/mysql
port=3306
for i in {1..10}
do
   cp my.cnf my-${port}.cnf
   sed -i 's/socket.*/socket\=\/var\/run\/mysqld\/mysqld-${port}.sock/' my-${port}.cnf
   echo "mysqld_safe --defaults-file=/usr/local/mysql/my-${port}.cnf --bind-address=127.0.0.${i} --port=$port --datadir=/var/lib/mysql-${port} " >> /etc/rc.local
   useradd -d /nonexistent -s /bin/false -c "MySQL server listening on ${port}"
   mkdir -m 0700 /var/lib/mysql-${port}
   mysql_install_db --user=mysql --basedir=/var/lib/mysql-${port} --datadir=/var/lib/mysql-${port}/data
   port=$(expr $port + 1)
done
echo 'exit 0' >> /etc/rc.local
mv my.cnf my.cnf.bak
update-rc.d -f mysql remove

Альтернатива №2: Используйте mysqld_multi, как описано на https://dev.mysql.com/doc/refman/5.7/en/mysqld-multi.html.

Альтернатива № 3: Очень простым и чистым решением было бы установить докер и запустить 10 отдельных контейнеров с MySQL с разными номерами портов и IP. Вы можете настроить эти переопределения в своем Dockerfile.

Надеюсь, это поможет!

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

Если вы не знакомы с контейнерами, считайте их легковесными виртуальными машинами с гипервизором, а не механизмом контейнера (докером).

Однако, в отличие от виртуальных машин, контейнеры не требуют полноценной ОС или требуемых библиотек / бинов. Одно и то же ядро ​​и библиотеки Linux могут совместно использоваться несколькими контейнерами, работающими на хосте, что делает их более эффективными и в некоторых случаях проще в управлении благодаря разделению между контейнерами.

Вот обзор архитектуры по сравнению с гипервизорами: