GNU/Linux >> Tutoriales Linux >  >> Ubuntu

Cómo reparar la base de datos MySQL

Introducción

MySQL ofrece varias formas diferentes de analizar y reparar bases de datos. Los errores y anomalías aparecen por numerosas razones, algunas de las cuales incluyen:

  • Una actualización o degradación de MySQL.
  • Cambios rápidos en índices o datos.
  • Inconsistencias en la tabla.

Al comprobar si hay datos dañados y reparar tablas, los pasos que se toman para corregir los errores dependen de cómo se conecte a la base de datos, el estado del servidor de la base de datos, el tipo de error y el motor de la base de datos utilizado.

Este artículo le muestra varias formas de solucionar problemas y reparar una base de datos MySQL.

Requisitos previos

  • Terminal o línea de comandos con privilegios de root.
  • MySQL versión 8.0 instalado y configurado.
  • Una base de datos corrupta o una tabla de base de datos.

Cómo comprobar si hay errores en la tabla MySQL

Ejecutar diagnósticos es el primer paso para solucionar problemas. Hay dos formas de comprobar si hay errores en una tabla MySQL:

  • A través de MySQL CHECK TABLE consulta.
  • Usando el programa de terminal mysqlcheck .

Comprobar una tabla con CHECK TABLE

La CHECK TABLE query funciona en MySQL mientras el servicio se está ejecutando. El uso general es:

CHECK TABLE <table name> [, table name, table name] [option] [option];

El uso más simple es una tabla sin ninguna opción:

CHECK TABLE <table name>;

La salida de CHECK TABLE consulta muestra una tabla informativa sobre los resultados de la comprobación:

Las opciones disponibles al consultar tablas son:

  • FOR UPGRADE - descubre inconsistencias de versión. Por ejemplo, MySQL 8.0 no admite años de dos dígitos, por lo que una tabla que contiene dichos valores se marca para actualización.
  • QUICK - no comprueba las filas en busca de enlaces incorrectos. Esto es útil para evitar tiempos de espera.
  • QUICK - realiza una comprobación de las mesas que no están cerradas correctamente.
  • CHANGED - solo comprueba las tablas con cambios desde la última comprobación o que no se hayan cerrado correctamente.
  • MEDIUM - comprueba las filas de la tabla para verificar la validez de los enlaces eliminados y realiza una suma de comprobación para las filas.
  • EXTENDED - hace una verificación de consistencia completa.

Sin ninguna opción, CHECK TABLE realiza un MEDIUM verifique las tablas y vistas de MyISAM. El FOR UPGRADE y QUICK realizar comprobaciones en las tablas y vistas del motor InnoDB mientras se ignoran otras opciones.

También puede combinar las opciones para una verificación más detallada. Por ejemplo, para hacer una verificación rápida para saber si una mesa cerró adecuadamente, ejecute:

CHECK TABLE <table name> FAST QUICK;

Las opciones que no se aplican a las tablas se ignoran.

Comprobar una tabla con mysqlcheck

El mysqlcheck comando es la versión de línea de comandos de CHECK TABLE . El programa se ejecuta en la terminal mientras el servicio MySQL está funcionando. Para realizar la comprobación:

1. Como usuario raíz, navegue hasta el directorio donde se almacenan las bases de datos:

sudo su
cd /var/lib/mysql

2. Consulta toda la base de datos con:

mysqlcheck <database name>

Alternativamente, verifique una tabla específica dentro de la base de datos proporcionando también el nombre de la tabla:

mysqlcheck <database name> <table name>

Cómo reparar una base de datos MySQL

Hay varios métodos para reparar una base de datos en MySQL. Sin embargo, tenga en cuenta que estos métodos no son una solución rápida y pueden provocar la pérdida de datos. Si las tablas de la base de datos se dañan con frecuencia, identifique el motivo de la ocurrencia.

Antes de realizar cambios e iniciar reparaciones, cree una copia del directorio:

cp -rfv /var/lib/mysql /var/lib/mysql_copy

Alternativamente, haga una copia de seguridad de la base de datos antes de probar cualquiera de las soluciones de reparación. Siga nuestra guía:Cómo hacer una copia de seguridad y restaurar una base de datos MySQL.

A continuación encontrará tres opciones para reparar una base de datos MySQL.

Reparación de la base de datos MySQL con REPAIR TABLE Query

Después de escanear y localizar la base de datos y las tablas con problemas, la forma más rápida de solucionar el problema es con REPAIR TABLE consulta:

Si el servidor se apaga durante la reparación, vuelva a ejecutar la REPAIR TABLE operación cuando el servidor se inicia de nuevo. Asegúrese de hacer esto antes de realizar cualquier otra operación en la misma tabla. En condiciones normales, una tabla MyISAM no provocará la pérdida de datos al utilizar este método.

Reparación de la base de datos MySQL con mysqlcheck

El mysqlcheck El comando es una alternativa a la reparación de tablas de base de datos en la terminal.

1. Primero, navegue a la carpeta de la base de datos MySQL como usuario raíz:

cd /var/lib/mysql

2. Agrega el -r opción a mysqlcheck comando para reparar la tabla de la base de datos:

mysqlcheck -r <database> <table name>

El mysqlcheck -r El comando es la versión de terminal de la REPAIR TABLE consulta.

Reparación de la base de datos MySQL con ALTER TABLE

Usa la ALTER TABLE consulta para reconstruir la tabla utilizando el mismo motor de almacenamiento. Por ejemplo, si tiene una tabla InnoDB, ejecute:

ALTER TABLE <table name> ENGINE = InnoDB;

Para reconstruir una tabla MyISAM, use:

ALTER TABLE <table name> ENGINE = MyISAM;

Si no está seguro de qué motor de almacenamiento usa la tabla, ejecute la siguiente consulta para averiguarlo:

SHOW CREATE TABLE <table name>;

Ejecución de diagnósticos y reparaciones específicos del motor en la base de datos MySQL

Según el motor de base de datos utilizado, MySQL proporciona enfoques específicos del motor para analizar y reparar una tabla de base de datos.

Las tablas MyISAM son propensas a la corrupción. Sin embargo, la mayoría de las veces los errores son fáciles de solucionar.

Cuando se trabaja con bases de datos InnoDB, aparecen corrupciones cuando los valores de la suma de comprobación no coinciden. Los errores suelen ocurrir debido a un corte de energía o algún otro problema de hardware.

Comprobación y reparación de tablas MyISAM con myisamchk

MySQL proporciona un comprobador específico para tablas MyISAM.

1. Apague el servidor MySQL. Abre la terminal y ejecuta:

systemctl mysql stop

2. Como usuario raíz, navegue hasta la ubicación de la base de datos:

cd /var/lib/mysql/<database name>

3. Para verificar una tabla específica, ejecute:

myisamchk <table name>

4. Repare una tabla ejecutando:

myisamchk --recover <table name>

5. Reinicie el servidor MySQL:

systemctl restart mysql

6. Por último, revisa la tabla en MySQL después de la recuperación:

sudo mysql -u <user> -p <password>
USE <database name>;
SELECT * FROM <table name> LIMIT 4;

Ejecución del proceso de recuperación de InnoDB

La documentación de MySQL sugiere ejecutar el proceso de recuperación de InnoDB para las bases de datos de InnoDB.

1. Localice y abra el archivo de configuración global con su editor de texto favorito. Para los sistemas Ubuntu y Debian, la ubicación es:

cd /etc/mysql/my.cnf

2. Agregue la siguiente opción a my.cnf archivo:

[mysqld]
innodb_force_recovery=4

De forma predeterminada, la opción de recuperación forzada está configurada en 0 (desactivada) y sube a 6. Cada nuevo nivel incluye las funciones de recuperación de los números inferiores.

3. Guarde y cierre el archivo.

4. Reinicie el servidor MySQL para asegurarse de que se aplica el nuevo archivo de configuración:

systemctl restart mysql

5. En la carpeta de inicio, exporte todas las bases de datos a un archivo de copia de seguridad con mysqldump comando:

sudo mysqldump --all-databases --add-drop-database --add-drop-table --routines > <file name>.sql

6. Inicie el cliente MySQL y elimine todas las tablas de la base de datos afectadas. Para eliminar una tabla de base de datos, intente:

DROP TABLE IF EXISTS <table name>;

Si la tabla no cae, intente eliminar la tabla de la base de datos manualmente. Inicie sesión como usuario raíz y navegue hasta el directorio donde se encuentran las bases de datos:

sudo su
cd /var/lib/mysql/<database name>

Eliminar la tabla de la base de datos:

rm -r <table name>

7. Detenga el servidor MySQL:

systemctl stop mysql

8. En mi.cnf archivo, comente el innodb_force_recovery opción agregada en el paso 2 para deshabilitar el modo de recuperación. Luego, guarde el archivo y cierre.

9. Vuelva a iniciar el servidor MySQL:

systemctl start mysql

10. Restaure la base de datos desde la copia de seguridad .sql archivo en el shell de MySQL. Inicie sesión en el cliente MySQL:

sudo mysql -u <username> -p <password>

11. Ejecute la siguiente consulta para importar las bases de datos:

USE <database name>;
# Turning off auto commit is optional and speeds things up for larger databases
SET autocommit=0; 
SOURCE <file name>.sql;

12. Por último, prueba la base de datos para confirmar que todo funciona correctamente. De lo contrario, restaure la base de datos desde la copia de seguridad y pruebe un método alternativo.


Ubuntu
  1. Cómo comprobar la versión de MySQL en Linux

  2. Cómo copiar tablas MySQL entre bases de datos

  3. Cómo reparar una tabla de base de datos Mysql dañada

  4. Cómo reparar bases de datos y tablas MySQL con phpMyAdmin

  5. Cómo copiar una tabla de una base de datos mysql a otra base de datos mysql

Cómo instalar MySQL Workbench en Ubuntu 20.04

Cómo verificar los privilegios de usuario de MySQL en Linux

¿Cómo reparar la base de datos MySQL en cPanel?

¿Cómo reparar una base de datos MySQL?

Cómo crear una base de datos en MySQL

Cómo reparar una base de datos