DevOps

Instalação Manual do MySQL no Debian, Arch, Fedora e openSUSE Já leu

5 min de leitura

Instalação Manual do MySQL no Debian, Arch, Fedora e openSUSE

Este guia cobre a instalação do MySQL 9.7.0 puro (sem MariaDB, sem pacotes de distro) usando o tarball genérico oficial da Oracle, válido para Debian, Arch Linux, Fedora e openSUSE. O procedimento de instalação e o arquivo de serviço systemd são idênticos nas quatro distribuições — apenas as dependências variam.

Por que tarball genérico? Os pacotes de repositório das distros frequentemente instalam o MariaDB ou uma versão desatualizada do MySQL. O binário genérico da Oracle garante a versão exata que você escolheu, sem conflitos com o gerenciador de pacotes.


1. Download do Tarball Genérico

O arquivo é único para todas as distros — é um binário compilado contra glibc, independente de distribuição. Só muda se sua arquitetura for ARM (aarch64) em vez de x86_64.

O site da Oracle usa JavaScript e redirecionamentos com token temporário, portanto não é possível usar uma URL fixa diretamente. Siga os passos abaixo para obter a URL real:

  1. Acesse https://dev.mysql.com/downloads/mysql/
  2. Selecione: Innovation → 9.7.0 → Linux – Generic → x86_64
  3. Clique em Download e depois em "No thanks, just start my download"
  4. Copie o link real — terá o formato:
    https://cdn.mysql.com//Downloads/MySQL-9.7/mysql-9.7.0-linux-glibc2.28-x86_64.tar.xz

Com a URL em mãos, baixe com wget:

wget -c --show-progress \
  "https://cdn.mysql.com//Downloads/MySQL-9.7/mysql-9.7.0-linux-glibc2.28-x86_64.tar.xz" \
  -O /usr/local/src/mysql-9.7.0.tar.xz

Ou com curl:

curl -L --progress-bar \
  "https://cdn.mysql.com//Downloads/MySQL-9.7/mysql-9.7.0-linux-glibc2.28-x86_64.tar.xz" \
  -o /usr/local/src/mysql-9.7.0.tar.xz

Após o download, verifique a integridade (compare com o MD5/SHA256 exibido na página de download):

md5sum    /usr/local/src/mysql-9.7.0.tar.xz
sha256sum /usr/local/src/mysql-9.7.0.tar.xz

2. Dependências por Distribuição

Execute os comandos abaixo como root na sua distro antes de prosseguir.

Debian / Ubuntu

apt update
apt install -y libaio1t64 libncurses5 libssl3 libnuma1 xz-utils
# Em Debian mais antigo ou Ubuntu LTS sem libaio1t64:
apt install -y libaio1 || apt install -y libaio1t64

Arch Linux

pacman -Sy --noconfirm libaio ncurses openssl numactl xz

Fedora / RHEL / Rocky / AlmaLinux

dnf install -y libaio ncurses-libs openssl-libs numactl-libs xz
# Necessário no EL8 e EL9 para o cliente mysql funcionar:
dnf install -y ncurses-compat-libs

openSUSE Leap / Tumbleweed

zypper install -y libaio1 libncurses6 libopenssl3 libnuma1 xz

Nota openSUSE Leap antigo: substitua libncurses6 por libncurses5 se sua versão for anterior ao Leap 15.4.


3. Criar Usuário e Grupo mysql

Idêntico em todas as distros:

groupadd mysql
useradd -r -g mysql -s /bin/false -d /usr/local/mysql mysql

O flag -r cria uma conta de sistema (sem login interativo), e -s /bin/false impede qualquer acesso via shell.


4. Extrair e Posicionar os Binários

cd /usr/local

tar xJf /usr/local/src/mysql-9.7.0.tar.xz

# Cria o symlink canônico — facilita upgrades futuros
ln -s mysql-9.7.0-linux-glibc2.28-x86_64 mysql

cd mysql

# Diretório para importação/exportação segura (secure_file_priv)
mkdir mysql-files
chown mysql:mysql mysql-files
chmod 750 mysql-files

# Binários pertencem ao root; apenas os dados pertencem ao mysql
chown -R root .
chown -R mysql data

5. Arquivo de Configuração

Crie (ou edite) o arquivo /etc/my.cnf:

[mysqld]
basedir          = /usr/local/mysql
datadir          = /usr/local/mysql/data
socket           = /var/run/mysqld/mysqld.sock
pid-file         = /var/run/mysqld/mysqld.pid
log-error        = /var/log/mysql/error.log
secure-file-priv = /usr/local/mysql/mysql-files

# Ajuste conforme sua RAM (regra geral: 50–70% da RAM disponível)
innodb_buffer_pool_size = 512M

[client]
socket = /var/run/mysqld/mysqld.sock

Crie os diretórios de runtime e log:

mkdir -p /var/run/mysqld /var/log/mysql
chown mysql:mysql /var/run/mysqld /var/log/mysql

6. Inicializar o Data Directory

/usr/local/mysql/bin/mysqld \
  --initialize \
  --user=mysql \
  --basedir=/usr/local/mysql \
  --datadir=/usr/local/mysql/data

O MySQL gera uma senha temporária de root durante a inicialização. Anote-a:

grep 'temporary password' /var/log/mysql/error.log

Importante: se você perder essa senha, precisará reinicializar o data directory com --initialize novamente, o que apaga todos os dados.


7. Criar o Serviço systemd

Crie o arquivo /etc/systemd/system/mysql.service com o conteúdo abaixo. Este unit é compatível com todas as quatro distribuições:

[Unit]
Description=MySQL 9.7.0 Database Server
Documentation=https://dev.mysql.com/doc/refman/9.7/en/
After=network.target
After=syslog.target

[Service]
Type=notify

# Usuário e grupo
User=mysql
Group=mysql

# Inicialização
ExecStart=/usr/local/mysql/bin/mysqld \
    --basedir=/usr/local/mysql \
    --datadir=/usr/local/mysql/data \
    --socket=/var/run/mysqld/mysqld.sock \
    --pid-file=/var/run/mysqld/mysqld.pid \
    --log-error=/var/log/mysql/error.log

ExecReload=/bin/kill -HUP $MAINPID

# Garante criação automática do diretório /var/run/mysqld com permissão correta
RuntimeDirectory=mysqld
RuntimeDirectoryMode=0755

# Reinicia automaticamente em caso de falha inesperada
Restart=on-failure
RestartSec=5s

# Limites de recursos
LimitNOFILE=65535
LimitNPROC=65535
LimitCORE=0

# Timeout generoso para bancos grandes
TimeoutStartSec=900

[Install]
WantedBy=multi-user.target

8. Ativar e Iniciar o Serviço

# Recarrega o systemd para reconhecer o novo unit
systemctl daemon-reload

# Habilita o MySQL para iniciar junto com o sistema
systemctl enable mysql

# Inicia o serviço agora
systemctl start mysql

# Verifica o status
systemctl status mysql

Para acompanhar os logs em tempo real:

journalctl -u mysql -f

9. Adicionar os Binários ao PATH (Opcional)

Para usar comandos como mysql, mysqldump e mysqlcheck diretamente no terminal, sem informar o caminho completo:

echo 'export PATH=/usr/local/mysql/bin:$PATH' >> /etc/profile.d/mysql.sh
source /etc/profile.d/mysql.sh

10. Pós-instalação — Trocar a Senha e Proteger o Servidor

Conecte usando a senha temporária obtida no passo 6:

/usr/local/mysql/bin/mysql -u root -p

Dentro do prompt do MySQL, troque a senha imediatamente:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'SuaSenhaForte!123';
FLUSH PRIVILEGES;

Alternativamente, use o assistente interativo que remove contas anônimas, desabilita acesso root remoto e remove o banco de teste:

/usr/local/mysql/bin/mysql_secure_installation

Resumo: Diferenças entre as Distribuições

Distribuição Detalhe específico
Debian 12+ / Ubuntu 24+ libaio1 foi renomeado para libaio1t64; verifique com apt search libaio
Arch Linux Pacotes com os nomes exatos: libaio, ncurses, numactl
Fedora / EL8 / EL9 Necessário instalar ncurses-compat-libs para o cliente mysql funcionar
openSUSE Tumbleweed usa libncurses6; Leap antigo usa libncurses5

O tarball, a estrutura de diretórios, o my.cnf e o unit systemd são idênticos nas quatro distribuições.


Referências

Comentários

Mais em DevOps

Git na Prática: Commits, Branches e Merges sem Medo
Git na Prática: Commits, Branches e Merges sem Medo

Antes do Git, equipes de desenvolvimento compartilhavam código por e-m...

Estudar e realmente Aprender DevOps & Cloud
Estudar e realmente Aprender DevOps & Cloud

Existe um momento na carreira de todo desenvolvedor em que o código fu...

Boas Práticas de Imagens: Leveza, Segurança e Camadas
Boas Práticas de Imagens: Leveza, Segurança e Camadas

Nos artigos anteriores foram construídas imagens funcionais. Uma image...