Como tienes el parámetro ese de file per table prendido, [EN TEORÍA](https://dev.mysql.com/doc/refman/5.7/en/optimize-table.html) correr el OPTIMIZE crea un archivo y pasa los datos, creando uno con el tamaño necesario para alojar los datos que existen. Pasa que ese amigo necesitaría el espacio suficiente para crear el nuevo archivo y luego borrar el existente.
Si eso no libera espacio, toca el dump / drop / delete files / import que describió Trauma. Y eso que mysql es amable con eso de archivo por tabla; otros motores tienen datafiles que se usan indistintamente o usando round-robin, por…