Saltar al contenido

Cómo corregir tablas corruptas en MySQL

marzo 4, 2020

 

Esta guía está pensada para servir como un recurso de solución de problemas y punto de partida como a diagnosticar la configuración de MySQL. Vamos a repasar algunos de los problemas que muchos usuarios encuentran MySQL y proporcionan una guía para solucionar problemas específicos. También incluiremos enlaces a tutoriales digitalocean y la documentación oficial de MySQL, que puede ser útil en ciertos casos.

De vez en cuando, las tablas de MySQL se pueden dañar, lo que significa que se ha producido un error y los datos contenidos en su interior no se puede leer. Los intentos de leer desde una tabla dañada por lo general llevar al estrellarse servidor.

Algunas de las causas comunes de tablas corruptas son: servidor

  • El MySQL se detiene en medio de una escritura.
  • un programa externo modifica una tabla que al mismo tiempo que está siendo modificado por el servidor.
  • La máquina se apaga de forma inesperada.
  • El hardware falla.
  • Hay un error de software en algún lugar en el código de MySQL.

Si sospecha que uno de sus mesas se ha dañado, debe hacer una copia de seguridad de su directorio de datos antes de solucionar o tratar de arreglar la mesa. Esto ayudará a minimizar el riesgo de pérdida de datos.

En primer lugar, se detiene el servicio MySQL:

sudo systemctl stop mysql

  • sudo parada systemctl MySQL

luego copiar todos sus datos en un nuevo directorio de copia de seguridad. En los sistemas de Ubuntu, el directorio de datos predeterminado es / var / lib / mysql /:

cp -r /var/lib/mysql /var/lib/mysql_bkp

  • cp -r / var / lib / mysql / var / lib / mysql_bkp

Después de hacer la copia de seguridad, ya está listo para comenzar whther investigar la mesa es, de hecho dañado. Si la tabla utiliza el motor de almacenamiento MyISAM, puede revisar si está dañado mediante la ejecución de un comando CHECK TABLE desde el indicador de MySQL:

CHECK TABLE table_name;

  • CHECK TABLE nombre_tabla;

Un mensaje aparecerá en la salida de esta declaración que le permite saber si está o no está dañado. Si la tabla MyISAM es, en efecto dañado, por lo general puede ser reparado mediante la emisión de una declaración REPARACIÓN TABLA:

REPAIR TABLE table_name;

  • nombre_tabla REPAIR TABLE;

Suponiendo que la reparación se ha realizado correctamente, aparecerá un mensaje como el siguiente en su salida:

Output+--------------------------+--------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+--------------------------+--------+----------+----------+
| database_name.table_name | repair | status | OK |
+--------------------------+--------+----------+----------+

Si la mesa todavía está dañado, sin embargo, la documentación de MySQL sugiere unos métodos alternativos para la reparación de tablas corruptas.

Por otro lado, si la tabla dañada utiliza el motor de almacenamiento InnoDB, entonces el proceso para la reparación será diferente. InnoDB es el motor de almacenamiento por defecto en MySQL desde la versión 5.5, y cuenta con la comprobación de la corrupción y automatizado las operaciones de reparación. cheques InnoDB para las páginas dañados mediante la realización de sumas de comprobación en cada página se lee, y si encuentra una discrepancia suma de comprobación se detendrá automáticamente el servidor MySQL.

Pocas veces existe una necesidad de reparación de tablas InnoDB, como InnoDB cuenta con un mecanismo de recuperación de bloqueo que puede resolver la mayoría de problemas cuando se reinicia el servidor. Sin embargo, si encuentra una situación en la que necesita para reconstruir una tabla InnoDB corruptos, la documentación de MySQL recomienda utilizar el método de “Actualizar y volcado”. Esto implica recuperar el acceso a la tabla dañada, mediante la utilidad mysqldump para crear una copia de seguridad lógica de la mesa, que conservará la estructura de la tabla y los datos dentro de ella, y luego volver a cargar la espalda tabla en la base de datos.

Con esto en mente, intente reiniciar el servicio MySQL para ver si al hacerlo se le permitirá el acceso al servidor:

sudo systemctl restart mysql

  • sudo systemctl reiniciar MySQL

Si los restos servidor caído o de otro modo inaccesibles, entonces puede ser útil activar la opción de force_recovery de InnoDB. Usted puede hacer esto mediante la edición del archivo mysqld.cnf:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

  • sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

En la sección [mysqld], agregue la línea siguiente:

. . .
[mysqld]
. . .
innodb_force_recovery=1

Guardar y cerrar el archivo y, a continuación, intenta reiniciar el servicio MySQL de nuevo. Si se puede acceder con éxito a la tabla dañada, utilice la herramienta mysqldump para volcar sus datos de la tabla en un archivo nuevo. Se puede nombrar a este archivo lo que quiera, pero aquí vamos a nombrarlo out.sql:

mysqldump database_name table_name > out.sql

  • mysqldump nombre_basedatos nombre_tabla > out.sql

A continuación, eliminar la tabla de la base de datos. Para evitar tener que volver a abrir la línea de MySQL, puede utilizar la siguiente sintaxis:

mysql -u user -p --execute="DROP TABLE database_name.table_name"

  • mysql -u usuario -p –execute = “DROP TABLE database_name.table_name”

Después de esto, restaurar la tabla con el archivo de volcado que acaba de crear:

mysql -u user -p < out.sql

  • mysql -u usuario -p

Tenga en cuenta que el motor de almacenamiento InnoDB es generalmente más tolerante a fallos que el motor MyISAM mayores. Utilizando tablas InnoDB pueden estar dañados todavía, pero debido a su auto-recuperación incluye el riesgo de corrupción de tabla y los accidentes es menor decididamente.