Executa múltiplas instâncias do MySQL em um único servidor Ubuntu

3

É possível instalar várias instâncias do MySQL Servers em um servidor Ubuntu, como eu posso fazer no Windows Server?

O objetivo é ter 10 instâncias do MySQL Server em um servidor Ubuntu instalado, cada servidor MySQL com seu próprio número de porta e endereço IP.

    
por Paulo do Portto 29.11.2017 / 15:50

2 respostas

2

Isso é definitivamente possível. O link é uma boa referência.

Alternativa # 1: Minha sugestão baseada na referência do MySQL é que você faça 10 cópias do seu my.cnf e adicione-as ao seu /etc/rc.local . Nesse caso, você deve preferencialmente usar uma ferramenta como monit para monitorar o status e o tempo de atividade das instâncias. A segunda alternativa é modificar o script de inicialização existente.

O script a seguir não foi testado, mas dá uma ideia do que precisa ser feito. Ele faz um loop em 10 servidores MySQL e copia uma configuração separada, cria um diretório separado de usuários e dados e incrementa o número da porta de 3306 a 3317. Certifique-se de passar pelo rc.local para alterar o endereço IP para os IPs desejados, antes de executar o rc.local ou reiniciar o servidor.

Além disso, certifique-se de definir configurações sãs em termos de utilização de desempenho para lidar com todos esses servidores de uma só vez. Pode haver conflitos com as ACLs, como o SELinux ou o AppArmor. Se você tiver problemas com essa solução e não conseguir descobrir, deixe um comentário.

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

Alternativa # 2: Use mysqld_multi conforme descrito no link .

Alternativa # 3: Uma solução muito fácil e limpa seria instalar o docker e executar 10 containers separados com o MySQL, com diferentes números de porta e ip. Você pode configurar essas substituições no seu Dockerfile .

Espero que isso ajude!

    
por 29.11.2017 / 16:59
1

Você pode usar o contêiner ou um hipervisor do tipo 2 para obter o que precisa (múltiplas instâncias do mysql no mesmo host). Gostaria de sugerir no seu caso usando o Docker para conteinerização.

Se você não estiver familiarizado com contêineres, pense neles como VMs leves, com o Hypervisor em vez do mecanismo de contêiner (docker).

Ao contrário das VMs, os contêineres não exigem um sistema operacional completo ou lib / bins necessários. O mesmo kernel Linux e bibliotecas podem ser compartilhados entre vários contêineres em execução no host, o que os torna mais eficientes e, em alguns casos, mais fáceis de gerenciar com a separação entre contêineres.

Veja a visão geral da arquitetura em comparação com os hipervisores:

    
por 29.11.2017 / 16:53