Temos 7 servidores Linux (Redhat) e cada servidor linux tem um banco de dados Mysql com 1 banco de dados (PROD_1) nele. (Cada projeto tem seu próprio servidor)
Queremos migrá-los todos para um servidor de banco de dados (redhat/mariadb). O único problema é que todos os bancos de dados têm o mesmo nome (PROD_1). Existe alguma solução, exceto alterar o nome dos bancos de dados?
- innodb_file_per_table está ativo no novo mariadb
A resposta curta é: alterar os nomes dos esquemas é provavelmente a melhor solução.
Bancos de dados (ou esquemas como prefiro chamá-los, porque "banco de dados" tem vários significados dependendo do contexto) são basicamente um namespace para tabelas e outros identificadores SQL.
Assim como qualquer outro namespace, se você tiver duas entidades com o mesmo nome, elas não poderão compartilhar um esquema. Seus nomes entram em conflito se estiverem no mesmo esquema. Se eles têm nomes diferentes, eles não entram em conflito.
Portanto, se todas as tabelas de um esquema PROD_1 forem diferentes das tabelas de outro esquema PROD_1, você poderá mesclá-las. Mas não é provável que todas as tabelas sejam diferentes.
Você pode alterar os nomes das tabelas para que as tabelas de um projeto tenham
p1_
prefixos e as tabelas de outro projeto tenhamp2_
prefixos etc. Mas você teria que alterar todo o código de consulta em todos os seus aplicativos.Você pode executar mais de uma instância MySQL em seu único servidor. De certa forma, isso cria outro nível de namespace, porque os esquemas podem ter o mesmo nome se estiverem em instâncias MySQL diferentes.
No meu último trabalho, executamos instâncias do MySQL em contêineres do Docker com uma rede Docker para que cada pod do Docker tivesse seu próprio endereço IP, como um servidor virtual.
Como alternativa, você pode executar várias instâncias MySQL ou MariaDB no servidor sem o Docker, mas teria que alterar a porta, o soquete e o diretório de dados que cada um usa. Veja https://mariadb.com/kb/en/running-multiple-mariadb-server-processes/