# Instalação do Percona MySQL

<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">O </span></span>**<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Percona MySQL</span></span>**<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;"> é um banco de dados — o programa responsável por armazenar e organizar todos os dados do sistema (cadastros, configurações, registros, etc.). É uma versão aprimorada do MySQL tradicional, com melhor desempenho e confiabilidade.</span></span>

> **<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Pré-requisito:</span></span>**<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;"> Você deve estar logado como administrador ( </span></span>`sudo su`<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">). Se ainda não fez isso, execute </span></span>`sudo su`<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">antes de continuar.</span></span>

---

## <span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">1. Abrindo o Terminal como Administrador</span></span>

```bash
sudo su
```

---

## <span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">2. Preparando o Sistema para a Instalação</span></span>

<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">O Percona MySQL exige uma dependência de chamada </span></span>`percona-telemetry-agent`<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">. Como ela não está disponível diretamente nos repositórios do Ubuntu/Linux Mint, vamos criar um "pacote fictício" para esse requisito sem instalar o agente de telemetria real.</span></span>

### <span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">2.1 – Instalar o utilitário</span></span>`equivs`

<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">O </span></span>`equivs`<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">é uma ferramenta que permite criar pacotes fictícios para resolver dependências.</span></span>

```bash
apt install -y equivs && \
equivs-control percona-telemetry-agent
```

### <span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">2.2 – Criar o pacote fictício</span></span>

<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">O bloco cria abaixo um arquivo de configuração que descreve o pacote fictício:</span></span>

```bash
cat << 'EOF' > percona-telemetry-agent
Section: misc
Priority: optional
Standards-Version: 3.9.2

Package: percona-telemetry-agent
Version: 1.0
Maintainer: local <root@localhost>
Description: Dummy package to satisfy Percona dependency
EOF
```

> **<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Por que fazer isso?</span></span>**<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;"> O instalador do Percona exige esse componente de telemetria, mas ele não é necessário para o funcionamento do banco de dados. Criando um pacote fictício, enganamos o instalador de forma segura e evitamos instalar software desnecessário.</span></span>

---

## <span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">3. Instale o Percona MySQL e configure a segurança</span></span>

<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">O comando abaixo faz tudo em sequência: construir o pacote fictício, o instalar, adicionar o repositório oficial do Percona, atualizar a lista de pacotes, instalar o banco de dados e iniciar o assistente de segurança.</span></span>

> **<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Atenção:</span></span>**<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;"> Antes de solicitar o assistente de segurança, o instalador mostrará uma tela solicitando uma senha padrão para o MySQL. Digite a senha desejada e confirme quando solicitada.</span></span>

```bash
equivs-build percona-telemetry-agent && \
dpkg -i percona-telemetry-agent_1.0_all.deb && \
mkdir -p /etc/apt/keyrings && \
curl -fsSL https://github.com/percona/percona-repositories/raw/main/deb/percona-keyring.gpg | gpg --dearmor -o /etc/apt/keyrings/percona.gpg && \
echo "deb [signed-by=/etc/apt/keyrings/percona.gpg] http://repo.percona.com/ps-84-lts/apt noble main" | tee /etc/apt/sources.list.d/percona-ps-84-lts.list && \
apt update && apt install -y percona-server-server && \
mysql_secure_installation
```

> **<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">O que esse bloco faz, passo a passo:</span></span>**
> 
> 1. <span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Monta e instala o pacote detalhado criado anteriormente</span></span>
> 2. <span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Crie uma pasta para salvar a chave de segurança do repositório Percona</span></span>
> 3. <span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Baixe e registre a chave oficial do Percona (garante que os pacotes são autênticos)</span></span>
> 4. <span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Adicionado o repositório oficial do Percona ao sistema</span></span>
> 5. <span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Atualizar a lista de pacotes disponíveis</span></span>
> 6. <span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Instale o Percona MySQL</span></span>
> 7. <span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Abra o assistente de segurança</span></span>`mysql_secure_installation`

---

## <span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">4. Respondendo ao Assistente de Segurança ( </span></span>`mysql_secure_installation`<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">)</span></span>

<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Após a instalação, o terminal exibirá uma série de perguntas para proteger o banco de dados. Siga as respostas indicadas abaixo:</span></span>

- <span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Digite a senha do usuário root: </span></span>**<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">digite a senha temporária gerada durante a instalação</span></span>**
- <span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Pressione Y para Sim, qualquer outra tecla para Não: </span></span>**<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Y</span></span>**
- <span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Existem três níveis de política de validação de senha: </span></span>**<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">0</span></span>**
- <span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Alterar a senha de root? (Pressione y|Y para Sim, qualquer outra tecla para Não): </span></span>**<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Y</span></span>**
- <span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Nova senha: </span></span>**<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">digite uma nova senha</span></span>**
- <span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Digite novamente a nova senha: </span></span>**<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">repita a nova senha</span></span>**
- <span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Deseja continuar com a senha fornecida? (Pressione y|Y para Sim, qualquer outra tecla para Não): </span></span>**<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Y</span></span>**
- <span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Remover usuários anônimos? (Pressione y|Y para Sim, qualquer outra tecla para Não): </span></span>**<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Y</span></span>**
- <span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Desativar login remoto do usuário root? (Pressione y|Y para Sim, qualquer outra tecla para Não): </span></span>**<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Não</span></span>**
- <span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Remover o banco de dados de teste e o acesso a ele? (Pressione y|Y para Sim, qualquer outra tecla para Não): </span></span>**<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Y</span></span>**
- <span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Recarregar as tabelas de privilégios agora? (Pressione y|Y para Sim, qualquer outra tecla para Não): </span></span>**<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Y</span></span>**

> <span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">⚠️ </span></span>**<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Importante:</span></span>**<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;"> Escolha uma senha forte para o root e guarde-a em local seguro. Você precisará dela nas próximas etapas.</span></span>

---

## <span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">5. Instalar o </span></span>`crudini`<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">(se ainda não estiver instalado)</span></span>

```bash
apt install crudini
```

> <span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">O </span></span>`crudini`<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">é uma ferramenta para editar arquivos de configuração de forma simples e segura, sem precisar abrir o arquivo manualmente.</span></span>

---

## <span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">6. Ajustar as configurações do MySQL</span></span>

<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Os comandos abaixo ajustam o comportamento do MySQL para funcionar corretamente com o sistema. Essas configurações controlam coisas como o tamanho máximo de dados que podem ser enviados de uma vez, cujos endereços o banco aceita conexões e como os backups são feitos.</span></span>

```bash
crudini --set /etc/mysql/mysql.conf.d/mysqld.cnf mysqld sql_mode STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION && \
crudini --set /etc/mysql/mysql.conf.d/mysqld.cnf mysqld max_allowed_packet 64M && \
crudini --set /etc/mysql/mysql.conf.d/mysqld.cnf mysqld bind-address 0.0.0.0 && \
crudini --set /etc/mysql/mysql.conf.d/mysqld.cnf mysqld skip-external-locking 1 && \
crudini --set /etc/mysql/mysql.conf.d/mysqld.cnf mysqld performance_schema 1 && \
crudini --set /etc/mysql/mysql.conf.d/mysqldump.cnf mysqldump quick 1 && \
crudini --set /etc/mysql/mysql.conf.d/mysqldump.cnf mysqldump quote-names 1 && \
crudini --set /etc/mysql/mysql.conf.d/mysqldump.cnf mysqldump max-allowed-packet 128M
```

**<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">O que cada configuração faz:</span></span>**

<table id="bkmrk-configura%C3%A7%C3%A3o-o-que-d"><thead><tr><th><span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Configuração</span></span></th><th><span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">O que define</span></span></th></tr></thead><tbody><tr><td>`sql_mode`</td><td><span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Regras de validação de dados — impede que dados inválidos (como dados zerados) sejam salvos</span></span></td></tr><tr><td>`max_allowed_packet 64M`</td><td><span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Tamanho de uma requisição máxima ao banco (64 MB)</span></span></td></tr><tr><td>`bind-address 0.0.0.0`</td><td><span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Permite conexões de qualquer endereço de rede (necessário para o Docker)</span></span></td></tr><tr><td>`skip-external-locking`</td><td><span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Desativa bloqueio externo de arquivos (melhor desempenho)</span></span></td></tr><tr><td>`performance_schema`</td><td><span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Ativa o monitoramento interno de desempenho do MySQL</span></span></td></tr><tr><td>`quick`<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">(jogar fora)</span></span></td><td><span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Exporta os dados linha a linha, economizando memória em backups</span></span></td></tr><tr><td>`quote-names`<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">(jogar fora)</span></span></td><td><span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Coloca aspas nos nomes de tabelas e colunas nos backups, evitando erros</span></span></td></tr><tr><td>`max-allowed-packet 128M`<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">(jogar fora)</span></span></td><td><span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Tamanho máximo de dados em backups (128 MB)</span></span></td></tr></tbody></table>

---

## <span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">7. Corrigir Formatação das Configurações</span></span>

<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Este comando garante que as configurações inseridas fiquem no formato correto dentro dos arquivos:</span></span>

```bash
sed -i -e "s/.*skip-external-locking.*/skip-external-locking/" /etc/mysql/mysql.conf.d/mysqld.cnf && \
sed -i -e "s/.*performance_schema.*/performance_schema/" /etc/mysql/mysql.conf.d/mysqld.cnf && \
sed -i -e "s/.*quick.*/quick/" /etc/mysql/mysql.conf.d/mysqldump.cnf && \
sed -i -e "s/.*quote-names.*/quote-names/" /etc/mysql/mysql.conf.d/mysqldump.cnf
```

---

## <span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">8. Permitir Acesso Remoto ao Usuário Root</span></span>

<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Por padrão, o usuário </span></span>`root`<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">do MySQL só pode se conectar localmente. Os passos abaixo alteraram essa configuração para permitir conexões de qualquer lugar — necessário para que o Docker acesse o banco.</span></span>

### <span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">8.1 – Ativar o método de autenticação nativa</span></span>

<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Abra o arquivo de configuração do MySQL:</span></span>

```bash
nano /etc/mysql/mysql.conf.d/mysqld.cnf
```

<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Localize a seção </span></span>`[mysqld]`<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">e adicione a linha abaixo ao final dela:</span></span>

```
mysql_native_password=ON
```

<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Salve o arquivo pressionado </span></span>**<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Ctrl + O</span></span>**<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;"> , depois </span></span>**<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Enter</span></span>**<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;"> , e saia com </span></span>**<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Ctrl + X</span></span>**<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;"> .</span></span>

> **<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Por que isso é necessário?</span></span>**<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;"> O Percona MySQL 8.4 usa por padrão um método de autenticação mais novo ( </span></span>`caching_sha2_password`<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">) que pode ser incompatível com alguns clientes. Ativar o método nativo garante compatibilidade com o sistema.</span></span>

<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Reinicie o serviço para aplicar as alterações abaixo:</span></span>

```bash
service mysql restart
```

### <span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">8.2 – Liberar o acesso remoto do root via linha de comando</span></span>

<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Execute o comando abaixo. Quando solicitado, </span></span>**<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">digite a senha do MySQL</span></span>**<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;"> (a senha nova que você definiu no passo 4):</span></span>

```bash
mysql -h localhost -u root -p mysql -e "UPDATE user SET Host = '%' WHERE user.Host = 'localhost' AND user.User = 'root' LIMIT 1;"
```

### <span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">8.3 – Atualizar o método de autenticação do root dentro do banco</span></span>

<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Acesse o MySQL interativamente:</span></span>

```bash
mysql -u root -p
```

<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Quando solicitado, </span></span>**<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">digite a senha do MySQL</span></span>**<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;"> e execute os comandos abaixo, alterando </span></span>`SENHA`<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">a senha que você definiu para o banco:</span></span>

```sql
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'SENHA';
FLUSH PRIVILEGES;
```

> **<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">O que esses comandos:</span></span>**
> 
> - `ALTER USER`<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">— altera o usuário root para usar o método de autenticação nativo com a senha definida</span></span>
> - `FLUSH PRIVILEGES`<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">— aplique alterações de permissão imediatamente, sem precisar reiniciar o serviço</span></span>

<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Digite </span></span>`exit`<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">e pressione </span></span>**<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Enter</span></span>**<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;"> para sair do MySQL.</span></span>

---

## <span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">9. Reinicie o MySQL para aplicar as configurações</span></span>

```bash
service mysql restart
```

> <span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Após a reinicialização, todas as configurações entram em vigor e o banco de dados estará pronto para uso.</span></span>

---

## <span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">✅ Instalação Concluída</span></span>

<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">O Percona MySQL está instalado, configurado e em execução.</span></span>

---

## <span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Próximo Passo</span></span>

<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Continue para: </span></span>**[<span dir="auto" style="vertical-align: inherit;"><span dir="auto" style="vertical-align: inherit;">Instalação do Docker</span></span>](https://kb.illimitar.pro/books/instalacao-do-servidor-standalone-via-docker-linux-mint-221-xia-ubuntu-2404-lts-noble/page/instalacao-do-docker)**