lunes, 8 de mayo de 2017

Error MySql .net C# no puede cargar rutinas

Descripcion del problema: 
-> mysql no muestra rutinas
-> database - Table './mysql/proc' is marked as crashed and should be repaired
-> Procedure or function cannot be found in database

Si miramos bien mediante la consulta: select * from INFORMATION_SCHEMA.ROUTINES; veremos que no todas las rutinas son listadas.

Tambien si estamos en workbench y le damos informacion a la base de datos del problema (schema inspector), vamos a la pestaña de stored procedures, veremos "nada" o menos de lo que deberíamos, es decir, faltan rutinas.

Si estás aquí seguro ya actualizaste todo a la ultima versión, bien por ti y te diste vida creando otras bases de datos de prueba, respaldando/restaurando, creando rutinas de prueba, etc, nada funciona, en fin...

Por allí leí que si pones el nombre de la base de datos en minúsculas, etc, realmente no lo probé, porque ese no era mi caso, lo menciono por no dejar.

El problema real

Se daño la tabla mysql.proc, científicamente: esta piche. (es_VE)

Mi solución:

C:\Program Files\MySQL\MySQL Server 5.6\bin>mysqlcheck --auto-repair=true --host=localhost -u USUARIO -p CALVE --all-databases=true

Mientras se ejecuta el comando veremos algo como esto:

mysql.proc
warning  : Table is marked as crashed
warning  : XX clients are using or haven't closed the table properly
error    : Wrong bytesec: 0-0-0 at linkstart: 602544
error    : Corrupt


Al final saldrá algo como esto:

Repairing tables
mysql.proc
info     : Wrong bytesec:   0-  0-  0 at 602544; Skipped
warning  : Number of rows changed from 190 to 188
status   : OK


Por último: Hay otras maneras de reparar el problema, pero eso depende de la versión de MySql

Saludos. espero te sea utill este pequeño aporte.