# 🔧 Correção: Erro de Autenticação MySQL - Access denied for user 'root'@'localhost'

## ❌ Problema

O erro `Access denied for user 'root'@'localhost'` com código `1698` indica que o MySQL/MariaDB está usando **autenticação via socket** para o usuário root, não autenticação por senha.

## ✅ Solução

### Opção 1: Criar Usuário Dedicado para a Aplicação (Recomendado)

```bash
# 1. Conectar ao MySQL como root (via socket)
sudo mysql -u root

# 2. No MySQL, execute:
CREATE USER IF NOT EXISTS 'gestorstream'@'localhost' IDENTIFIED BY 'senha_segura_aqui';
GRANT ALL PRIVILEGES ON gs_DerenBox.* TO 'gestorstream'@'localhost';
FLUSH PRIVILEGES;
EXIT;

# 3. Atualizar .env
cd /var/www/gestorstream/backend
sed -i 's/DB_USERNAME=.*/DB_USERNAME=gestorstream/' .env
sed -i 's/DB_PASSWORD=.*/DB_PASSWORD=senha_segura_aqui/' .env

# 4. Limpar cache e testar
php artisan config:clear
php artisan migrate --force
```

### Opção 2: Alterar Autenticação do Root (Menos Seguro)

```bash
# 1. Conectar ao MySQL como root (via socket)
sudo mysql -u root

# 2. No MySQL, execute:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'nova_senha_aqui';
FLUSH PRIVILEGES;
EXIT;

# 3. Atualizar .env
cd /var/www/gestorstream/backend
sed -i 's/DB_PASSWORD=.*/DB_PASSWORD=nova_senha_aqui/' .env

# 4. Limpar cache e testar
php artisan config:clear
php artisan migrate --force
```

### Opção 3: Usar Autenticação via Socket no Laravel (Avançado)

Se quiser manter o root sem senha, você pode configurar o Laravel para usar socket Unix:

```bash
# 1. Verificar caminho do socket
sudo mysql -u root -e "SHOW VARIABLES LIKE 'socket';"

# 2. Atualizar .env
cd /var/www/gestorstream/backend
# Adicionar ao .env:
# DB_SOCKET=/var/run/mysqld/mysqld.sock
# (ou o caminho que apareceu no passo 1)

# 3. Limpar cache
php artisan config:clear
php artisan migrate --force
```

## 🎯 Solução Rápida (Recomendada)

Execute este script:

```bash
# Criar script
cat > /tmp/fix-mysql-auth.sh << 'EOF'
#!/bin/bash
echo "🔧 Corrigindo autenticação MySQL..."

# Gerar senha aleatória
DB_PASS=$(openssl rand -base64 12 | tr -d "=+/" | cut -c1-12)

echo "Criando usuário 'gestorstream' com senha: $DB_PASS"
echo ""

# Criar usuário no MySQL
sudo mysql -u root << SQL
CREATE USER IF NOT EXISTS 'gestorstream'@'localhost' IDENTIFIED BY '$DB_PASS';
GRANT ALL PRIVILEGES ON gs_DerenBox.* TO 'gestorstream'@'localhost';
FLUSH PRIVILEGES;
SQL

# Atualizar .env
cd /var/www/gestorstream/backend
sed -i "s/DB_USERNAME=.*/DB_USERNAME=gestorstream/" .env
sed -i "s/DB_PASSWORD=.*/DB_PASSWORD=$DB_PASS/" .env

echo "✅ Usuário criado e .env atualizado"
echo ""
echo "📝 Credenciais salvas em: /var/www/gestorstream/backend/.env"
echo "   DB_USERNAME=gestorstream"
echo "   DB_PASSWORD=$DB_PASS"
echo ""

# Limpar cache
php artisan config:clear

# Testar conexão
echo "🧪 Testando conexão..."
php artisan migrate --force

if [ $? -eq 0 ]; then
    echo "✅ Conexão OK! Migrações executadas com sucesso."
else
    echo "❌ Ainda há problemas. Verifique os logs acima."
fi
EOF

chmod +x /tmp/fix-mysql-auth.sh
sudo /tmp/fix-mysql-auth.sh
```

## 🔍 Verificar Configuração Atual

```bash
# Ver como o root está configurado
sudo mysql -u root -e "SELECT user, host, plugin FROM mysql.user WHERE user='root';"

# Ver usuários existentes
sudo mysql -u root -e "SELECT user, host FROM mysql.user;"
```

## 📝 Atualizar Script de Instalação

O script `install-production.sh` precisa ser atualizado para criar um usuário dedicado automaticamente. Por enquanto, use a solução acima.
