# Instalação do Percona MySQL

O **Percona MySQL** é 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.

> **Pré-requisito:** Você deve estar logado como administrador (`sudo su`). Se ainda não fez isso, execute `sudo su` antes de continuar.

---

## 1. Abrindo o Terminal como Administrador

```bash
sudo su
```

---

## 2. Preparando o Sistema para a Instalação

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

### 2.1 – Instalar o utilitário `equivs`

O `equivs` é uma ferramenta que permite criar pacotes fictícios para resolver dependências.

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

### 2.2 – Criar o pacote fictício

O bloco abaixo cria um arquivo de configuração descrevendo o pacote fictício:

```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
```

> **Por que fazer isso?** 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.

---

## 3. Instalar o Percona MySQL e Configurar a Segurança

O comando abaixo faz tudo em sequência: constrói o pacote fictício, o instala, adiciona o repositório oficial do Percona, atualiza a lista de pacotes, instala o banco de dados e inicia o assistente de segurança.

> **Atenção:** Antes de exibir o assistente de segurança, o instalador mostrará uma tela pedindo uma senha padrão para o MySQL. Digite a senha desejada e confirme-a quando solicitado.

```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
```

> **O que esse bloco faz, passo a passo:**
> 
> 1. Monta e instala o pacote fictício criado anteriormente
> 2. Cria a pasta para guardar a chave de segurança do repositório Percona
> 3. Baixa e registra a chave oficial do Percona (garante que os pacotes são autênticos)
> 4. Adiciona o repositório oficial do Percona ao sistema
> 5. Atualiza a lista de pacotes disponíveis
> 6. Instala o Percona MySQL
> 7. Abre o assistente de segurança `mysql_secure_installation`

---

## 4. Respondendo ao Assistente de Segurança (`mysql_secure_installation`)

Após a instalação, o terminal exibirá uma série de perguntas para proteger o banco de dados. Siga as respostas indicadas abaixo:

- Enter password for user root: **digite a senha temporária gerada durante a instalação**
- Press y|Y for Yes, any other key for No: **Y**
- There are three levels of password validation policy: 0
- Change the password for root? (Press y|Y for Yes, any other key for No): **Y**
- New password: **digite a nova senha**
- Re-enter new password: **repita a nova senha**
- Do you wish to continue with the password provided? (Press y|Y for Yes, any other key for No): **Y**
- Remove anonymous users? (Press y|Y for Yes, any other key for No): **Y**
- Disallow root login remotely? (Press y|Y for Yes, any other key for No): **No**
- Remove test database and access to it? (Press y|Y for Yes, any other key for No): **Y**
- Reload privilege tables now? (Press y|Y for Yes, any other key for No): **Y**

> ⚠️ **Importante:** Escolha uma senha forte para o root e guarde-a em local seguro. Você precisará dela nas próximas etapas.

---

## 5. Instalar o `crudini` (se ainda não estiver instalado)

```bash
apt install crudini
```

> O `crudini` é uma ferramenta para editar arquivos de configuração de forma simples e segura, sem precisar abrir o arquivo manualmente.

---

## 6. Ajustar as Configurações do MySQL

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, quais endereços o banco aceita conexões e como os backups são feitos.

```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
```

**O que cada configuração faz:**

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

---

## 7. Corrigir Formatação das Configurações

Este comando garante que as configurações inseridas fiquem no formato correto dentro dos arquivos:

```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
```

---

## 8. Permitir Acesso Remoto ao Usuário Root

Por padrão, o usuário `root` do MySQL só pode se conectar localmente. Os passos abaixo alteram essa configuração para permitir conexões de qualquer lugar — necessário para que o Docker acesse o banco.

### 8.1 – Ativar o método de autenticação nativo

Abra o arquivo de configuração do MySQL:

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

Localize a seção `[mysqld]` e adicione a linha abaixo ao final dela:

```
mysql_native_password=ON
```

Salve o arquivo pressionando **Ctrl + O**, depois **Enter**, e saia com **Ctrl + X**.

> **Por que isso é necessário?** O Percona MySQL 8.4 usa por padrão um método de autenticação mais novo (`caching_sha2_password`) que pode ser incompatível com alguns clientes. Ativar o método nativo garante compatibilidade com o sistema.

### 8.2 – Liberar o acesso remoto do root via linha de comando

Execute o comando abaixo. Quando solicitado, **digite a senha do MySQL** (a senha nova que você definiu no passo 4):

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

### 8.3 – Atualizar o método de autenticação do root dentro do banco

Acesse o MySQL interativamente:

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

Quando solicitado, **digite a senha do MySQL** e execute os comandos abaixo, substituindo `SENHA` pela senha que você definiu para o banco:

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

> **O que esses comandos fazem:**
> 
> - `ALTER USER` — altera o usuário root para usar o método de autenticação nativo com a senha definida
> - `FLUSH PRIVILEGES` — aplica as alterações de permissão imediatamente, sem precisar reiniciar o serviço

Digite `exit` e pressione **Enter** para sair do MySQL.

---

## 9. Reiniciar o MySQL para Aplicar as Configurações

```bash
service mysql restart
```

> Após reiniciar, todas as configurações entram em vigor e o banco de dados estará pronto para uso.

---

## ✅ Instalação Concluída

O Percona MySQL está instalado, configurado e em execução.

---

## Próximo Passo

Continue para: **[Instalação do Docker](https://kb.illimitar.pro/books/instalacao-do-servidor-standalone-via-docker-linux-mint-221-xia-ubuntu-2404-lts-noble/page/instalacao-do-docker)**