Rodando versões legadas do MySQL no cPanel: do erro de pacote ao MySQL governor e Docker
Voltar para blog

Rodando versões legadas do MySQL no cPanel: do erro de pacote ao MySQL governor e Docker

26/09/2026 · 3 min · Banco de Dados

Quem administra servidores com cPanel/WHM no dia a dia já se deparou com este pedido: o servidor roda MariaDB moderno para todos os clientes, mas uma aplicação antiga precisa obrigatoriamente do MySQL 5.6 para funcionar sem quebrar consultas legadas.

A primeira dúvida que surge é: dá para ter múltiplos motores de banco de dados rodando nativamente no cPanel ao mesmo tempo?

A resposta curta é não de forma nativa e simultânea pelo painel. No entanto, existem caminhos técnicos para solucionar o cenário sem colocar a estabilidade do servidor em risco.

Abaixo, compartilho o diagnóstico do erro de instalação de pacotes, as limitações da arquitetura do cPanel e as duas formas reais de implementar o MySQL legado.


1. A arquitetura do cPanel e a limitação de banco único#

O cPanel foi desenhado para gerenciar uma única instância ativa de servidor SQL (MariaDB ou MySQL). Os scripts de manutenção e monitoramento do painel (como /scripts/restartsrv_mysql e as rotinas noturnas do upcp) monitoram exclusivamente o socket padrão (/var/lib/mysql/mysql.sock) escutando na porta 3306.

Tentar forçar a instalação de binários do MySQL por cima do MariaDB via gerenciador de pacotes do sistema (yum/dnf) gera conflitos de dependências e quebra a automação do cPanel na primeira atualização automática.


2. A tentativa com MySQL governor e o erro no terminal#

Ao avaliar a instalação do MySQL Governor (utilitário conhecido por gerenciar versões de banco de dados em ambientes cPanel), executei o comando no terminal:

yum install governor-mysql

A saída retornou um erro direto:

Last metadata expiration check: 0:04:41 ago on Fri 27 Mar 2026 11:53:29 AM -03.
No match for argument: governor-mysql
Error: Unable to find a match: governor-mysql

Por que esse erro acontece?#

  1. Exclusividade do Sistema Operacional: O MySQL Governor pertence aos repositórios do CloudLinux OS. Se o servidor estiver rodando AlmaLinux, Rocky Linux ou CentOS padrão sem a licença e a conversão ativa do CloudLinux, o gerenciador de pacotes não encontrará o utilitário.
  2. Nomenclatura do Pacote: Em instalações CloudLinux, o pacote oficial responde pelo nome cl-mysql-governor.

3. As duas soluções práticas#

Opção A: Padronizar o Servidor no MySQL 5.6 com CloudLinux#

Se a máquina roda CloudLinux com licença ativa, o MySQL Governor é o método homologado para alterar a versão do banco mantendo o cPanel integrado.

Importante: O Governor altera a versão do banco para o servidor inteiro. Ele não roda MariaDB 10.x para um site e MySQL 5.6 para outro simultaneamente no mesmo serviço nativo.
Passo a passo:#
  1. Instalar o pacote do Governor:
yum install cl-mysql-governor
  1. Definir o target para o MySQL 5.6:
/usr/share/lve/setup/cl-mysql-utils.py --set-version=mysql56
  1. Executar a conversão do serviço:
/usr/share/lve/setup/cl-mysql-utils.py --install
Cuidados obrigatórios:#

Opção b: isolamento por aplicação via Docker (abordagem híbrida)#

Se o objetivo é manter o MariaDB moderno intacto na porta 3306 para todos os clientes e entregar o MySQL 5.6 exclusivamente para a aplicação legada, a solução mais limpa e segura é usar um contêiner Docker.

1. Subir a instância do MySQL 5.6 na porta alternativa 3307:#
docker run --name mysql56-legado \
  -e MYSQL_ROOT_PASSWORD=sua_senha_segura_aqui \
  -p 3307:3306 \
  -v /var/lib/docker-mysql56:/var/lib/mysql \
  -d mysql:5.6
2. Configurar a aplicação para conectar via TCP/IP:#

No código PHP da aplicação legada (config.php ou conexão PDO), force a conexão via rede informando 127.0.0.1 e a porta 3307, evitando o socket padrão:

<?php
$host = '127.0.0.1'; // IP forca conexao TCP em vez do socket local
$port = '3307';
$db   = 'banco_legado';
$user = 'usuario_legado';
$pass = 'senha_segura';
$charset = 'utf8mb4';

$dsn = "mysql:host=$host;port=$port;dbname=$db;charset=$charset";
$options = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES   => false,
];

try {
    $pdo = new PDO($dsn, $user, $pass, $options);
} catch (\PDOException $e) {
    throw new \PDOException($e->getMessage(), (int)$e->getCode());
}

Qual abordagem escolher no dia a dia?#

Este artigo foi útil?

Deixe uma reação rápida para apoiar o conteúdo:

CC BY-NC

Este post está licenciado sob CC BY-NC.

Comentários

Participe da discussão abaixo.

0 comentários