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