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:
- Acesse https://dev.mysql.com/downloads/mysql/
- Selecione: Innovation → 9.7.0 → Linux – Generic → x86_64
- Clique em Download e depois em "No thanks, just start my download"
- 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
libncurses6porlibncurses5se 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
--initializenovamente, 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.