sql >> Base de Datos >  >> RDS >> Mysql

Cómo reparar bases de datos y tablas MySQL

Este artículo describe cómo reparar tablas y bases de datos MySQL. A medida que crecen las tablas de una base de datos, pueden ocurrir errores de vez en cuando. Cuando lo hacen, MySQL incluye varias herramientas que puede usar para verificar y reparar las tablas de la base de datos. Para hacer esto, siga los procedimientos a continuación en el orden en que aparecen.

Este artículo solo se aplica a los productos enumerados en los Detalles del artículo barra lateral Debe tener acceso raíz al servidor para seguir estos procedimientos.

Paso 1:Copia de seguridad de las bases de datos

Antes de intentar reparar cualquier base de datos, primero debe hacer una copia de seguridad. Para hacer una copia de seguridad de todos los archivos de todas sus bases de datos, siga estos pasos:

  1. Inicie sesión en su servidor usando SSH.
  2. Detenga el servidor MySQL usando el comando apropiado para su distribución de Linux:
    • Para CentOS y Fedora, escriba:
      service mysqld stop
    • Para Debian y Ubuntu, escriba:

      service mysql stop
  3. Escribe el siguiente comando:

    cp -rfv /var/lib/mysql /var/lib/mysql$(date +%s)
    Este comando copia todos los archivos de todas sus bases de datos a un nombre de directorio basado en la hora actual (más precisamente, la cantidad de segundos transcurridos desde el 1 de enero de 1970). Esto garantiza que cada copia de seguridad de la base de datos se almacene en un directorio que tenga un nombre exclusivo. Para mayor protección, puede (y debe) hacer una copia de seguridad de los archivos de la base de datos en una ubicación remota que no esté en el servidor.
  4. Reinicie el servidor MySQL usando el comando apropiado para su distribución de Linux:

    • Para CentOS y Fedora, escriba:
      service mysqld start
    • Para Debian y Ubuntu, escriba:

      service mysql start

Paso 2:Ejecutar mysqlcheck

Después de hacer una copia de seguridad de sus bases de datos, está listo para comenzar a solucionar problemas. El mysqlcheck El programa le permite verificar y reparar bases de datos mientras se ejecuta MySQL. Esta función es útil cuando desea trabajar en una base de datos sin detener todo el servicio MySQL.

Además, mysqlcheck funciona en tablas que utilizan los motores de base de datos MyISAM o InnoDB.

Para obtener información sobre cómo determinar qué motor de almacenamiento está utilizando una tabla de base de datos, consulte este artículo.

Para usar mysqlcheck , sigue estos pasos:

  1. Como usuario raíz, escriba el siguiente comando:
    cd /var/lib/mysql
  2. Escriba el siguiente comando, reemplazando la base de datos con el nombre de la base de datos que desea verificar:

    mysqlcheck database

    El comando anterior verifica todas las tablas en la base de datos especificada. Alternativamente, para verificar una tabla específica en una base de datos, escriba el siguiente comando. Reemplace base de datos con el nombre de la base de datos y reemplace tabla con el nombre de la tabla que desea verificar:

    mysqlcheck database table
  3. Mysqlcheck comprueba la base de datos y las tablas especificadas. Si una tabla pasa la verificación, mysqlcheck muestra OK para la mesa Sin embargo, si mysqlcheck informa un error para una tabla, escriba el siguiente comando para intentar repararlo. Reemplace la base de datos con el nombre de la base de datos y la tabla con el nombre de la tabla:

    mysqlcheck -r database table
  4. Si mysqlcheck no puede reparar con éxito la tabla o tablas, vaya al siguiente procedimiento.

Paso 3:Ejecución de diagnósticos específicos del motor

Si ejecuta mysqlcheck no soluciona el problema, el siguiente paso es ejecutar diagnósticos específicos para el motor utilizado por la tabla o tablas de la base de datos. Siga el procedimiento apropiado a continuación para el motor de almacenamiento de la base de datos de su tabla.

Para obtener información sobre cómo determinar qué motor de almacenamiento utilizan las tablas de su base de datos, consulte este artículo.
Reparación de tablas MyISAM con myisamchk

Si está utilizando el motor de almacenamiento MyISAM para una tabla, puede ejecutar myisamchk programa para repararlo. Para hacer esto, siga estos pasos:

El myisamchk El programa solo funciona para tablas que usan el motor de almacenamiento MyISAM. No funciona para el motor InnoDB.
  1. Detenga el servidor MySQL usando el comando apropiado para su distribución de Linux:
    • Para CentOS y Fedora, escriba:
      service mysqld stop
    • Para Debian y Ubuntu, escriba:

      service mysql stop
  2. Escribe el siguiente comando:

    cd /var/lib/mysql
  3. Cambie al directorio donde se encuentra la base de datos. Por ejemplo, si la base de datos se llama clientes , escriba cd clientes.
  4. Escriba el siguiente comando, reemplazando tabla con el nombre de la tabla que desea verificar:

    myisamchk table

    Para verificar todas las tablas en una base de datos, escriba el siguiente comando:

    myisamchk *.MYI

    Si el comando anterior no funciona, puede intentar eliminar los archivos temporales que pueden estar impidiendo myisamchk de funcionar correctamente. Para hacer esto, vuelva a cambiar a /var/lib/mysql directorio y luego escriba el siguiente comando:

    ls */*.TMD
    

    Si hay algún archivo .TMD en la lista, escriba el siguiente comando para eliminarlo:

    rm */*.TMD

    Luego intente ejecutar myisamchk de nuevo.

  5. Para intentar reparar una tabla, escriba el siguiente comando, reemplazando table con el nombre de la tabla que desea reparar:

    myisamchk --recover table
  6. Reinicie el servidor MySQL usando el comando apropiado para su distribución de Linux:

    • Para CentOS y Fedora, escriba:
      service mysqld start
    • Para Debian y Ubuntu, escriba:

      service mysql start
  7. Pruebe la mesa o mesas reparadas.
Ejecutando el proceso de recuperación de InnoDB

Si está utilizando el motor de almacenamiento InnoDB para una tabla de base de datos, puede ejecutar el proceso de recuperación de InnoDB. Para hacer esto, siga estos pasos:

  1. Use su editor de texto preferido para abrir my.cnf archivo en su servidor. La ubicación de my.cnf archivo depende de su distribución de Linux:
    • En CentOS y Fedora, my.cnf El archivo se encuentra en /etc directorio.
    • En Debian y Ubuntu, my.cnf El archivo se encuentra en /etc/mysql directorio.
  2. En my.cnf archivo, busque el [mysqld] sección.
  3. Agregue la siguiente línea a [mysqld] sección:

    innodb_force_recovery=4
  4. Guarde los cambios en my.cnf y luego reinicie el servidor MySQL usando el comando apropiado para su distribución de Linux:

    • Para CentOS y Fedora, escriba:
      service mysqld restart
    • Para Debian y Ubuntu, escriba:

      service mysql restart
  5. Escriba el siguiente comando para exportar todas las bases de datos a databases.sql expediente:

    mysqldump --all-databases --add-drop-database --add-drop-table --routines > databases.sql
  6. Inicie mysql y luego intente eliminar la base de datos o las bases de datos afectadas usando el DROP DATABASE dominio.

    Si MySQL no puede eliminar una base de datos, puede eliminarla manualmente en el paso 8 a continuación después de detener el servidor MySQL.
  7. Detenga el servidor MySQL usando el comando apropiado para su distribución de Linux:

    • Para CentOS y Fedora, escriba:
      service mysqld stop
    • Para Debian y Ubuntu, escriba:

      service mysql stop
  8. Si no pudo eliminar una base de datos en el paso 6, escriba los siguientes comandos para eliminarla manualmente. Reemplace la base de datos con el nombre de la base de datos que desea eliminar:

    cd /var/lib/mysql
    rm -rf database
    Asegúrese de no eliminar el mysql o esquema_de_rendimiento directorios!
  9. Use su editor de texto preferido para abrir my.cnf en su servidor y luego comente la siguiente línea en el [mysqld] sección como se muestra:

    #innodb_force_recovery=4
    Esto deshabilita el modo de recuperación de InnoDB.
  10. Guarde los cambios en my.cnf y luego inicie el servidor MySQL usando el comando apropiado para su distribución de Linux:

    • Para CentOS y Fedora, escriba:
      service mysqld start
    • Para Debian y Ubuntu, escriba:

      service mysql start
  11. Escriba el siguiente comando para restaurar las bases de datos desde el archivo de copia de seguridad que creó en el paso 5:

    mysql < databases.sql
  12. Pruebe la base de datos restaurada.

Más Información

  • Para obtener más información sobre mysqlcheck , visite https://dev.mysql.com/doc/refman/5.5/en/mysqlcheck.html.
  • Para obtener más información sobre myisamchk , visite https://dev.mysql.com/doc/refman/5.5/en/myisamchk.html.