Cada versión de MySQL es probada en muchas plataformas antes de ser lanzada al público. Esto no significa que no haya ningún fallo en MySQL, pero si hay alguno, deberían ser muy pocos y difíciles de encontrar. Si tiene un problema, siempre ayuda si usted intenta encontrar qué es lo que hace fallar su sistema exactamente, porque tendrá una probabilidad mucho mayor de que su problema sea solucionado rápidamente.
Primero, debería intentar averiguar si el problema es que el servidor mysqld muere o el problema tiene que ver con su cliente. Puede comprobar cuando tiempo se ha estado ejecutando ininterrumpidamente su servidor ejecutando mysqladmin version. Sí mysqld ha caido y se ha reiniciado, podría encontrar la razón mirando en el registro de errores del servidor. Consulte Sección 5.10.1, “El registro de errroes (Error Log)”.
        En algunos sistemas, puede encontrar en volcado de pila en el
        registro de errores del momento en que el servidor
        mysqld murió, y que puede analizar con el
        programa resolve_stack_dump. Consulte
        Sección D.1.4, “Usar stack trace”. Nótese que los valores de
        las variables escritos en el registro de errores pueden no ser
        siempre correctos al 100%.
      
        Muchas caidas del servidor son causadas por archivos de datos o
        índices corruptos. MySQL actualiza los archivos en el disco con
        la llamada de sistema write() después de
        cada sentencia SQL y antes de que el cliente sea notificado del
        resultado. (Esto no es así si está ejecutando con
        --delay-key-write, en cuyo caso los archivos
        de datos son escritos pero no los de índices.) Esto significa
        que los contenidos de los archivos de datos están seguros
        aunque mysqld caiga, porque el sistema
        operativo se asegura de que los datos no volcados sean escritos
        al disco. Puede forzar a que MySQL escriba todo a disco tras
        cada sentencia SQL iniciando mysqld con la
        opción --flush.
      
Esto significa que normalmente usted no debería obtener tablas corruptas a menos que una de las siguientes cosas ocurra:
El servidor MySQL o la máquina han sido cerrados en medio de una actualización.
Usted ha encontrado un fallo en mysqld que ha causado que caiga en el medio de una actualización.
Algún programa externo está manipulando los archivos de datos o índices a la vez que mysqld sin bloquear la tabla apropiadamente.
            Está ejecutando varios servidores mysqld
            utilizando el mismo directorio de datos en un sistema que no
            soporta un buen mecanismo de bloqueo de sistema de archivos
            (normalmente gestionado por el gestor de bloqueos
            lockd), o está ejecutando múltiples
            servidores con la opción
            --skip-external-locking.
          
Usted tiene un archivo de datos o índices erróneo que contiene datos muy corruptos que han confundido a mysqld.
            Ha encontrado un fallo en el código de almacenaje de datos.
            Esto no es muy probable, pero es posible. En este caso,
            puede intentar cambiar el tipo de la tabla a otro motor de
            almacenamiento utilizando ALTER TABLE
            sobre una copia reparada de la tabla.
          
Debido a que es muy difícil saber por qué algo está fallando, primero intente comprobar las cosas que funcionan frente a las que fallan en su caso. Por favor, intente las siguientes comprobaciones:
            Pare el servidor mysqld con
            mysqladmin shutdown, ejecute
            myisamchk --silent --force */*.MYI desde
            el directorio de datos para comprobar todas las tablas
            MyISAM, y reinicie
            mysqld. Esto le hará estar seguro de que
            está ejecutando el servidor desde un estado inicial limpio.
            Consulte Capítulo 5, Administración de bases de datos.
          
            Inicie mysqld con la opción
            --log e intente determinar a través de
            la información escrita en el registro si hay alguna
            consulta particular que mate al servidor. Sobre el 95% de
            todos los fallos son relacionados con una consulta en
            particular. Normalmente, esta es una de las últimas
            consultas en el archivo de registro antes de que el servidor
            se reinicie. Consulte Sección 5.10.2, “El registro general de consultas”. Si usted
            puede matar repetidamente MySQL con una consulta
            específica, aún cuando ha comprobado todas las tablas
            antes de ejecutarla, entonces ha sido capaz de localizar el
            fallo, y debería enviar un informe de fallos. Consulte
            Sección 1.6.1.3, “Cómo informar de bugs y problemas”.
          
Intente hacer un juego de pruebas que podamos utilizar para repetir el problema. Consulte Sección D.1.6, “Crear un caso de prueba tras haber encontrado una tabla corrupta”.
            Intente ejecutar las pruebas en el direcotrio
            mysql-test y los bancos de pruebas
            MySQL. Consulte Sección 27.1.2, “El paquete de pruebas MySQL Test”. Estos
            deberían comprobar bastante bien MySQL. También puede
            añadir código a los bancos de pruebas que simulen su
            aplicación. Los bancos de pruebas pueden ser localizados en
            el directorio sql-bench en una
            distribución de código fuente, o, en una distribución
            binaria, en el directorio sql-bench
            bajo su directorio de instalación de MySQL.
          
            Intente el script fork_big.pl. (Está
            ubicado en el directorio tests de una
            distribución de código fuente.)
          
            Si usted configura MySQL para depuración, es mucho más
            fácil recoger información sbore los posibles errores
            cuando algo va mal. Configurar MySQL para depuración causa
            que un gestor de memoria seguro se incluya para encontrar
            algunos errores. También produce muchas más salidas
            informativas sobre lo que está pasando. Reconfigure MySQL
            con la opción --with-debug o
            --with-debug=full para ejecutar después
            configure y seguidamente recompilar.
            Consulte Sección D.1, “Depurar un servidor MySQL”.
          
Asegúrese de que usted ha aplicado los últimos parches para su sistema operativo.
            Utilice la opción
            --skip-external-locking para
            mysqld. En algunos sitemas, el gestor de
            bloqueos lockd no funciona
            apropiadamente; la opción
            --skip-external-locking le dice a
            mysqld que no utilice bloqueos externos.
            (Esto significa que no puede ejecutar dos servidores
            mysqld en el mismo directorio de datos, y
            que debe ser muy cuidadoso cuando utilice
            myisamchk). Aún así, puede ser muy
            instructivo intentar la opción como prueba.)
          
¿Ha intentado el comando mysqladmin -u root processlist cuando mysqld parece estar ejecutándose pero no responde? A veces mysqld no está comatoso, aunque usted pueda pensar lo contrario. El problema puede ser que todas las conexiones estén en uso, o que haya algún problema de bloqueo interno. mysqladmin -u root processlist es normalmente capaz de hacer una conexión aún en esots casos, y puede proveerle de información útil sobre el número actual de conexiones y su estado.
Ejecute del comando mysqladmin -i 5 status o mysqladmin -i 5 -r status en una ventana separada para producir estadísticas mientras ejecuta sus otras consultas.
Intente lo siguiente:
Inicie mysqld desde gdb (u otro depurador). Consulte Sección D.1.3, “Depurar mysqld con gdb”.
Ejecute sus scripts de comprobación.
Imprima el trazado y las variables locales en los tres niveles más bajos. En gdb, puede hacer esto con los siuguientes comandos cuando mysqld ha caido dentro de gdb:
backtrace info local up info local up info local
                Con gdb, usted puede también
                examinar que hilos de ejecución existen con
                info threads y cambiar a un hilo
                específico con thread #, donde
                # es el ID del hilo.
              
Trate de simular su aplicación con un script Perl para forzar a que MySQL falle o se comporte indebidamente.
Envíe un informe de fallos normal. Consulte Sección 1.6.1.3, “Cómo informar de bugs y problemas”. Sea aún más detallado de lo normal. Debido a que MySQL funciona para mucha gente, podría ser que los fallos fueran resultado de algo que exista tan sólo en su máquina (por ejemplo, un error relacionado con sus librerías de sistema particulares).
            Si usted tiene un problema con tablas que contengan filas de
            longitud dinámica y está utilizando únicamente columnas
            VARCHAR (no columnas
            BLOB ni TEXT), puede
            intentar cambiar todas las columnas
            VARCHAR a CHAR con
            ALTER TABLE. Esto fuerza a MySQL a
            utilizar filas de tamaño fijo. Las filas de tamaño fijo
            ocupan un poco más de espacio, pero son mucho más
            tolerantes a la corrupción.
          
El código de filas dinámicas actual ha sido utilizado en MySQL AB durante muchos años con muy pocos problemas, pero las filas de longitud dinámica son, por naturaleza, más propensas a errores, así que podría ser una buena idea intentar esta estrategia y ver si ayuda.
No deje fuera el hardware de su servidor cuando esté diagnosticando problemas. El hardware defectuoso puede ser causa de corrupción de datos. Debe poner especial atención en la RAM y los discos duros cuando esté buscando problemas de hardware.
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.

