English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Solución para que MySQL no pueda reiniciar el motor innodb

Introducción al problema

El ordenador se congeló durante el uso, después de reiniciar, descubrí que mysql no se inició con éxito. Al verificar el registro de errores, se descubrió que el problema estaba en innodb, lo que causó que mysql no se iniciara.

Registro de errores

$ mysql.server start
Iniciando MySQL
. ERROR! El servidor salió sin actualizar el archivo PID (/usr/local/var/mysql/fdipzonedeMacBook-Air.local.pid).
22:08:37 mysqld_safe Iniciando el demonio mysqld con bases de datos desde /usr/local/var/mysql
2016-04-23 22:08:38 0 [Advertencia] TIMESTAMP con valor predeterminado implícito está obsoleto. Por favor use --opción de servidor explicit_defaults_for_timestamp (ver la documentación para más detalles).
2016-04-23 22:08:38 0 [Nota] /usr/local/Cellar/mysql/5.6.24/bin/mysqld (mysqld 5.6.24) iniciando como proceso 3604 ...
2016-04-23 22:08:38 3604 [Advertencia] Estableciendo lower_case_table_names=2 debido al sistema de archivos para /usr/local/var/mysql/ no es sensible a mayúsculas y minúsculas
2016-04-23 22:08:38 3604 [Nota] El plugin 'FEDERATED' está desactivado.
2016-04-23 22:08:38 3604 [Nota] InnoDB: Usando atómicos para contar referencias de páginas del pool de búfer
2016-04-23 22:08:38 3604 [Nota] InnoDB: El montón de memoria de InnoDB está desactivado
2016-04-23 22:08:38 3604 [Nota] InnoDB: Mutexes y rw_locks usan builtins atómicos de GCC
2016-04-23 22:08:38 3604 [Nota] InnoDB: No se usa barrera de memoria
2016-04-23 22:08:38 3604 [Nota] InnoDB: Las tablas comprimidas usan zlib 1.2.3
2016-04-23 22:08:38 3604 [Nota] InnoDB: Usando CRC de CPU32 instrucciones
2016-04-23 22:08:38 3604 [Nota] InnoDB: Inicializando el pool de búfer, tamaño = 128.0M
2016-04-23 22:08:38 3604 [Nota] InnoDB: Finalizada la inicialización del pool de búfer
2016-04-23 22:08:38 3604 [Nota] InnoDB: El formato de archivo soportado más alto es Barracuda.
2016-04-23 22:08:38 3604 [Nota] InnoDB: El escaneo del registro avanzó más allá del lsn del punto de control]} 68929933440
2016-04-23 22:08:38 3604 [Nota] InnoDB: La base de datos no se cerró normalmente!
2016-04-23 22:08:38 3604 [Nota] InnoDB: Comenzando la recuperación de accidente.
2016-04-23 22:08:38 3604 [Nota] InnoDB: Leyendo información del espacio de tabla desde los archivos .ibd...
2016-04-23 22:08:38 3604 [ERROR] InnoDB: Desajuste de suma de verificación en el espacio de tabla ./test_user/user_recommend_code#P#pmax.ibd (tabla test_user/user_recommend_code#P#pmax)
2016-04-23 22:08:38 3604 [Nota] InnoDB: Tamaño de página:1024 Páginas para analizar:64
2016-04-23 22:08:38 3604 [Nota] InnoDB: Tamaño de página: 1024, Cantidad posible de space_id:0
2016-04-23 22:08:38 3604 [Nota] InnoDB: Tamaño de página:2048 Páginas para analizar:48
2016-04-23 22:08:38 3604 [Nota] InnoDB: Tamaño de página: 2048, Cantidad posible de space_id:0
2016-04-23 22:08:38 3604 [Nota] InnoDB: Tamaño de página:4096 Páginas para analizar:24
2016-04-23 22:08:38 3604 [Nota] InnoDB: Tamaño de página: 4096, Cantidad posible de space_id:0
2016-04-23 22:08:38 3604 [Nota] InnoDB: Tamaño de página:8192 Páginas para analizar:12
2016-04-23 22:08:38 3604 [Nota] InnoDB: Tamaño de página: 8192, Cantidad posible de space_id:0
2016-04-23 22:08:38 3604 [Nota] InnoDB: Tamaño de página:16384 Páginas para analizar:6
2016-04-23 22:08:38 3604 [Nota] InnoDB: VALID: espacio:2947354 page_no:3 page_size:16384
2016-04-23 22:08:38 3604 [Nota] InnoDB: Tamaño de página: 16384, Cantidad posible de space_id:1
2016-04-23 22:08:38 3604 [Nota] InnoDB: space_id:2947354, Número de páginas coincidentes: 1/1 (16384)
2016-04-23 22:08:38 3604 [Nota] InnoDB: Espacio elegido:2947354
2016-04-23 22:08:38 3604 [Nota] InnoDB: Restaurando página 0 del espacio de tabla 2947354
2016-04-23 22:08:38 3604 [Advertencia] InnoDB: No tiene page_no=0 del espacio: Doublewrite 2947354
2016-04-23 22:08:38 7fff79b9e300 InnoDB: Número de error del sistema operativo 2 en una operación de archivo.
InnoDB: El error significa que el sistema no puede encontrar la ruta especificada.
InnoDB: Si está instalando InnoDB, recuerde que debe crear
InnoDB: usted mismo crea los directorios, InnoDB no los crea.
InnoDB: Error: no se pudo abrir único-archivo de espacio de tabla ./test_user/user_recommend_code#P#pmax.ibd
InnoDB: No continuamos la recuperación de accidentes, porque la tabla puede volverse
InnoDB: corrupto si no podemos aplicar los registros de registro de InnoDB a él.
InnoDB: Para solucionar el problema y comenzar mysqld:
InnoDB: 1) Si hay un problema de permisos en el archivo y mysqld no puede
InnoDB: abra el archivo, debe modificar los permisos.
InnoDB: 2) Si la tabla no se necesita o se puede restaurar desde una copia de seguridad,
InnoDB: luego puede eliminar el archivo .ibd y InnoDB realizará una recuperación normal
InnoDB: recuperación de accidentes y ignorar esa tabla.
InnoDB: 3) Si el sistema de archivos o el disco está dañado y no puede eliminar
InnoDB: el archivo .ibd, puede establecer innodb_force_recovery > 0 en my.cnf
InnoDB: y obligue a InnoDB a continuar la recuperación de accidentes aquí.

Solución

1.Si los datos no son importantes o ya tienen una copia de seguridad, solo necesita restaurar el inicio de mysql

Ingrese al directorio mysql, generalmente: /usr/local/var/mysql/

Eliminar ib_logfile*

Eliminar ibdata*

Eliminar todos los directorios físicos de bases de datos (por ejemplo, si la base de datos es test_db, ejecutar rm -Prueba base de datos test_db)

Reinicie mysql

Reconstruir la base de datos o usar la copia de seguridad para sobrescribir

2. Si los datos son importantes y no hay copia de seguridad

Se puede usar el parámetro innodb_force_recovery para que mysqld salte los pasos de recuperación, inicie mysqld, exporte los datos y reconstruya la base de datos.

innodb_force_recovery se puede configurar como1-6, los números grandes incluyen el efecto de todos los números anteriores

     1, (SRV_FORCE_IGNORE_CORRUPT): Ignorar las páginas corruptas detectadas.

     2, (SRV_FORCE_NO_BACKGROUND): Bloquear la ejecución de la línea principal, como si la línea principal necesita ejecutar la operación full purge, causará un crash.

     3, (SRV_FORCE_NO_TRX_UNDO): No ejecutar la operación de rollback de transacción.

     4, (SRV_FORCE_NO_IBUF_MERGE): No ejecutar la operación de merge de buffer de inserción.

     5, (SRV_FORCE_NO_UNDO_LOG_SCAN): No ver el registro de redo, el motor de almacenamiento InnoDB considerará las transacciones no comprometidas como comprometidas.

     6, (SRV_FORCE_NO_LOG_REDO): No ejecutar la operación de rollforward.

Añadir a my.cnf (en windows es my.ini)

innodb_force_recovery = 6 
innodb_purge_thread = 0

Reinicie mysql

En este momento solo se pueden ejecutar operaciones de select, create, drop, pero no se pueden ejecutar operaciones de insert, update, delete

Ejecute la lógica de exportación, después de completar ajuste innodb_force_recovery=0, innodb_purge_threads=1luego reconstruir la base de datos, finalmente importar los datos exportados

Resumen

Esto es todo el contenido de este artículo, espero que pueda ayudar a todos a aprender o usar mysql. Si tienen alguna pregunta, pueden dejar un comentario para intercambiar. Gracias por el apoyo a la tutoría de gritos.

Te gustará