Como reparar bases de datos y tablas MySQL

Si estás utilizando MySQL como tipo de tabla por defecto de MyISAM (el motor de almacenamiento predeterminado), acá te brindamos algunas opciones para realizar reparaciones:

  • La utilidad myisamchk puede ejecutarse desde la línea de comandos para verificar, reparar y optimizar tablas. Normalmente lo hace mientras la base de datos no se está ejecutando. A continuación, tendrás más información acerca de myisamchk

Antes de intentar reparar cualquier base de datos, deberás efectuar un backup:

a) Ingresá a SSH con los datos de acceso a tu VPS.

b) Detené el servidor MySQL usando el comando apropiado para tu distribución Linux.

Para CentOS y Fedora: service mysqld stop

Para Debian y Ubuntu: service mysql stop

c) Tipeá el código cp -rfv /var/lib/mysql /var/lib/mysql$(date +%s)  Este comando copia todos los archivos de las bases de datos hacia un directorio cuyo nombre está basado en la hora actual. Con esto nos aseguramos que el backup de la base de datos está almacenado en un directorio con un nombre único. Para añadir protección adicional, podés realizar el backup de tus archivos en una localización remota, fuera del servidor.

d) Reiniciá el servidor MySQL utilizando el comando apropiado para tu distribución Linux.

Para CentOS y Fedora: service mysqld start

Para Debian y Ubuntu: service mysql start

  • Mysqlcheck es similar a myisamchk en cuanto a funciones, pero este puede ejecutarse mientras se procesa la base de datos. A continuación encontrarás más información acerca de mysqlcheck

¿Cómo reparar tablas MyISAM con mysqlcheck? Después de realizar una copia de seguridad de tus bases de datos, estará listo para resolver problemas. El programa mysqlcheck te permitirá verificar y reparar las bases de datos mientras se ejecuta el servicio de MySQL. Esta característica es útil cuando necesitás trabajar en una base sin detener todo el MySQL. Además, mysqlcheck funciona en tablas que usan los motores de base de datos MyISAM o InnoDB. Para usar mysqlcheck, seguí estos pasos:

a) Como usuario root, escribí el comando: cd /var/lib/mysql

b) Escribí el comando, reemplazando DATABASE con el nombre de la base de datos que querés verificar: mysqlcheck DATABASE

El comando anterior verifica todas las tablas en la base de datos especificada. Como alternativa, para verificar una tabla específica de una base de datos, escribí el siguiente comando. Reemplazá DATABASE con el nombre de la base de datos y reemplazá TABLE con el nombre de la tabla que querés verificar: mysqlcheck DATABASE TABLE

c) Mysqlcheck comprueba la base de datos y las tablas especificadas. Si una tabla aprueba la verificación, mysqlcheck muestra OK. Sin embargo, si mysqlcheck informa un error, tenés que escribir el siguiente comando para intentar repararlo. Reemplazá DATABASE con el nombre de la base de datos, y TABLE con el nombre de la tabla: mysqlcheck -r DATABASE TABLE.

  • Reparar tablas y base de datos utilizando el motor InnoDB.

a) Si iniciás sesión en la base de datos, también podés ejecutar comandos SQL que podrían solucionar el problema. Ejemplos:
mysql> optimize table your-tablename;
mysql> analyze table your-tablename;
mysql> repair table your-tablename;

b) Si aparecen números de error de MySQL y no estás seguro de cuáles son, podes usar la utilidad perror para buscarlos. Ejemplos:
shell> perror 13 64
Error code 13: Permission denied
Error code 64: Machine is not on the network

Ejecutando el proceso de recuperación del motor InnoDB:

Si estás utilizando el motor de almacenamiento InnoDB para una tabla de base de datos, podrás ejecutar su proceso de recuperación del siguiente modo:

a) Utilizá tu editor de texto preferido para abrir el archivo my.cnf en el servidor. La ubicación del archivo my.cnf depende de su distribución en Linux:

En CentOS y Fedora, el archivo my.cnf se encuentra en el directorio /etc.
En Debian y Ubuntu, el archivo my.cnf se encuentra en el directorio /etc/mysql

b) En el archivo my.cnf, buscá la sección [mysqld].

c) Agregá la siguiente línea a la sección [mysqld]: innodb_force_recovery = 4

d) Guardá los cambios en el archivo my.cnf y luego reiniciá el servidor MySQL usando el comando apropiado para su distribución en Linux:

Para CentOS y Fedora, escribí: service mysqld restart

Para Debian y Ubuntu, escribí: service mysql restart

e) Escribí el siguiente comando para exportar todas las bases de datos hacia el archivo “databases.sql”: mysqldump –all-databases –add-drop-database –add-drop-table > databases.sql

f) Iniciá el servicio mysql y luego eliminá las bases de datos afectadas, utilizando el comando DROP DATABASE. Si MySQL no te permite eliminar una base de datos, podrás eliminarla manualmente en el paso h), luego de detener el servicio MySQL.

g) Detené el servicio MySQL usando el comando apropiado para su distribución en Linux:

Para CentOS y Fedora, escribí: service mysqld stop

Para Debian y Ubuntu, escribí: service mysql stop

h) Si no pudiste eliminar la base de datos en el paso f), escribí los siguientes comandos para eliminarla manualmente. Reemplazá DBNAME con el nombre de la base de datos que querés eliminar:

cd /var/lib/mysql

rm -rf DBNAME

¡Cuidado con eliminar los directorios mysql o performance_schema!

i) Utilizá tu editor de texto preferido para abrir el archivo my.cnf en el servidor. Luego colocá la siguiente línea en la sección [mysqld] :

#innodb_force_recovery=4
Esto desactivará el modo de recuperación InnoDB.

j) Guardá los cambios en el archivo my.cnf y luego iniciá el servidor MySQL utilizando el comando apropiado para su distribución en Linux:

Para CentOS y Fedora, escribí: service mysqld start

Para Debian y Ubuntu, escribí: service mysql start

k) Escribí el siguiente comando para restaurar las bases de datos desde la copia de seguridad que generaste en el paso 5: mysql < databases.sql

l) Probá la base de datos restaurada.

¡Listo! Esperamos que sea de utilidad. Cualquier duda o consulta, podés contactarte con nuestros técnicos mediante mail a soporte@baehost.com

 

 

 

 

 

 

 

Deja una respuesta