# Instalação do MySQL

Execute as seguintes instruções disponível no bloco abaixo:

```bash
cd ~ && \
dnf module disable mysql -y && \
dnf install -y https://repo.percona.com/yum/percona-release-latest.noarch.rpm && \
percona-release setup ps-80 && \
dnf install -y percona-server-client
```

Continue com a execução:

```bash
dnf install -y percona-server-client percona-server-server percona-xtrabackup-80 qpress && \
systemctl start mysql.service
```

Será necessário capturar a senha gerada automaticamente na instalação do serviço de MySQL, através do seguinte comando:

```bash
cat /var/log/mysqld.log  | grep "temporary password is generated"
```

Com a senha temporária gerada que foi exibida pelo comando anterior, continue executando o seguinte comando abaixo:

```bash
/usr/bin/mysql_secure_installation
```

Responsa o seguinte questionário:

- Enter password for user root: **digitar a senha temporária informada**
- New password: **digite a nova senha**
- Re-enter new password: **repita a nova senha**
- Change the password for root? ((Press y|Y for Yes, any other key for No): **Y**
- New password: **digite a nova senha novamente**
- Re-enter new password: **repita a nova senha novamente**
- 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**

É necessário executar as seguintes instruções por determinação do **Percona** (será solicitado a senha do usuário **root** do **MySQL** nos três comandos):

```bash
mysql -u root -p -e "CREATE FUNCTION fnv1a_64 RETURNS INTEGER SONAME 'libfnv1a_udf.so'" && \
mysql -u root -p -e "CREATE FUNCTION fnv_64 RETURNS INTEGER SONAME 'libfnv_udf.so'" && \
mysql -u root -p -e "CREATE FUNCTION murmur_hash RETURNS INTEGER SONAME 'libmurmur_udf.so'"
```

Continue executando as seguintes instruções disponível no bloco abaixo:

```bash
crudini --set /etc/my.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/my.cnf mysqld max_allowed_packet 64M && \
crudini --set /etc/my.cnf mysqld bind-address 0.0.0.0 && \
crudini --set /etc/my.cnf mysqld binlog_expire_logs_seconds 21600 && \
crudini --set /etc/my.cnf mysqld max_binlog_size 500M && \
crudini --set /etc/my.cnf mysqld skip-external-locking 1 && \
crudini --set /etc/my.cnf mysqld skip-host-cache 1 && \
crudini --set /etc/my.cnf mysqld skip-name-resolve 1 && \
crudini --set /etc/my.cnf mysqld performance_schema 1 && \
crudini --set /etc/my.cnf xtrabackup open-files-limit 2000000 && \
crudini --set /etc/systemd/system/mysql.service Service LimitNOFILE 650000 && \
crudini --set /etc/my.cnf mysqldump max-allowed-packet 128M && \
crudini --set /etc/my.cnf mysqldump quick 1 && \
crudini --set /etc/my.cnf mysqldump quote-names 1 && \
sed -i -e "s/.*skip-external-locking.*/skip-external-locking/" /etc/my.cnf && \
sed -i -e "s/.*skip-host-cache.*/skip-host-cache/" /etc/my.cnf && \
sed -i -e "s/.*skip-name-resolve.*/skip-name-resolve/" /etc/my.cnf && \
sed -i -e "s/.*performance_schema.*/performance_schema/" /etc/my.cnf && \
sed -i -e "s/.*quick.*/quick/" /etc/my.cnf && \
sed -i -e "s/.*quote-names.*/quote-names/" /etc/my.cnf
echo "fs.file-max=5000000" >> /etc/sysctl.d/99-sysctl.conf && \
echo "fs.nr_open=2000000" >> /etc/sysctl.d/99-sysctl.conf && \
echo "mysql hard nofile 2000000" >> /etc/security/limits.conf && \
echo "mysql soft nofile 2000000" >> /etc/security/limits.conf && \
sysctl -w fs.file-max=5000000 && \
sysctl -w fs.nr_open=2000000 && \
systemctl daemon-reload
```

Precisamos corrigir o acesso do usuário root do MySQL, com as seguintes instruções (deve ser executada individualmente):

```bash
mysql -h localhost -u root -p mysql -e "SET GLOBAL validate_password.policy = 0;"
```

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

Continue executando o seguinte comando abaixo para definir a senha do **root** (a mesma definida no **MySQL Secure Installation**):

> Se houver uma exclamação ( **!senha** ), deverá colocar o contra barra antes ( **\\!senha** ).

```bash
mysql -h localhost -u root -p mysql -e "ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'SENHA';"
```

> Observe que este comando poderá retornar um erro, e você deverá executar novamente para confirmar a operação, aonde retornará mensagem de sucesso.

Finaliza a instalação do MySQL reiniciando o serviço:

```bash
systemctl stop mysql.service && \
systemctl start mysql.service
```