# πŸ› οΈ GUIDA RAPIDA - PULIZIA IP DATABASE (VERSIONE CORRETTA) ## βœ… PROBLEMA RISOLTO **Errore precedente**: `Illegal mix of collations for operation 'concat'` **Soluzione**: Conversione esplicita di INT in stringhe con `CAST(valore AS CHAR)` --- ## πŸš€ INSTALLAZIONE PROCEDURE CORRETTE ### 1. Esegui il file SQL corretto: ```bash mysql -h SERVER_IP -u USERNAME -p DATABASE_NAME < cleanup_ddos_ips_hours_fixed.sql ``` ### 2. Verifica installazione: ```sql SHOW PROCEDURE STATUS WHERE Db = 'LOG_MIKROTIK' AND Name LIKE 'cleanup%fixed'; ``` --- ## πŸ§ͺ TEST PROCEDURE CORRETTE ### 1. Test DRY RUN (simulazione): ```sql -- Simulazione pulizia 1 ora CALL cleanup_ddos_ips_hours_fixed(1, 'ddos_detect_v03', TRUE); -- Simulazione pulizia 12 ore CALL cleanup_ddos_ips_hours_fixed(12, 'ddos_detect_v03', TRUE); -- Simulazione pulizia 24 ore CALL cleanup_ddos_ips_hours_fixed(24, 'ddos_detect_v03', TRUE); ``` ### 2. Test PULIZIA REALE: ```sql -- Pulizia effettiva 1 ora CALL cleanup_ddos_ips_hours_fixed(1, 'ddos_detect_v03', FALSE); -- Pulizia effettiva 12 ore CALL cleanup_ddos_ips_hours_fixed(12, 'ddos_detect_v03', FALSE); ``` ### 3. Test Procedure Wrapper: ```sql -- Dry run con valori default (24h) CALL cleanup_ddos_ips_hours_dry_default_fixed(); -- Pulizia con valori default (24h) CALL cleanup_ddos_ips_hours_default_fixed(); ``` --- ## πŸ“Š VERIFICA RISULTATI ### 1. Controlla log operazioni: ```sql SELECT * FROM ip_cleanup_log WHERE operation_time >= DATE_SUB(NOW(), INTERVAL 1 HOUR) ORDER BY operation_time DESC LIMIT 10; ``` ### 2. Verifica IP rimossi: ```sql -- Conta IP per lista SELECT list_name, COUNT(*) as total_ips FROM ip_list GROUP BY list_name; -- IP piΓΉ vecchi di 1 ora SELECT COUNT(*) as old_ips_1h FROM ip_list WHERE list_name = 'ddos_detect_v03' AND retrieved_at < DATE_SUB(NOW(), INTERVAL 1 HOUR); ``` ### 3. Statistiche dettagliate: ```sql SELECT get_ip_stats('ddos_detect_v03') as stats; ``` --- ## πŸ”§ DIFFERENZE VERSIONE CORRETTA ### ❌ PRIMA (con errore): ```sql CONCAT('Ritenzione: ', retention_hours, ' ore') -- ERRORE: mescola INT con stringa ``` ### βœ… DOPO (corretta): ```sql CONCAT('Ritenzione: ', CAST(retention_hours AS CHAR), ' ore') -- OK: converte INT in stringa esplicitamente ``` --- ## 🎯 COMANDI RAPIDI ### Pulizie Immediate: ```sql CALL cleanup_ddos_ips_hours_fixed(1, 'ddos_detect_v03', FALSE); -- 1h CALL cleanup_ddos_ips_hours_fixed(12, 'ddos_detect_v03', FALSE); -- 12h CALL cleanup_ddos_ips_hours_fixed(24, 'ddos_detect_v03', FALSE); -- 24h ``` ### Simulazioni: ```sql CALL cleanup_ddos_ips_hours_fixed(1, 'ddos_detect_v03', TRUE); -- 1h-dry CALL cleanup_ddos_ips_hours_fixed(12, 'ddos_detect_v03', TRUE); -- 12h-dry CALL cleanup_ddos_ips_hours_fixed(24, 'ddos_detect_v03', TRUE); -- 24h-dry ``` --- ## πŸ“ˆ OUTPUT ATTESO ### Simulazione Successo: ``` πŸ” DRY RUN ORARIO: Verrebbero rimossi 150 IP dalla lista ddos_detect_v03 (>12h) ``` ### Pulizia Successo: ``` βœ… PULIZIA ORARIA COMPLETATA: Rimossi 150 IP dalla lista ddos_detect_v03 (>12h) ``` ### Nessuna Pulizia Necessaria: ``` ℹ️ NESSUNA PULIZIA ORARIA NECESSARIA: Tutti gli IP in ddos_detect_v03 sono piΓΉ recenti di 1 ore ``` --- ## πŸ›‘οΈ SICUREZZA - **Transazioni**: Tutte le operazioni sono in transazione con ROLLBACK automatico su errore - **Logging**: Ogni operazione registrata in `ip_cleanup_log` - **Dry Run**: Sempre testare prima con `dry_run = TRUE` - **Backup**: Fare backup database prima di pulizie massive --- πŸ’‘ **NOTA**: Ora le procedure dovrebbero funzionare correttamente senza errori di collation!