update - mysql exists vs in
MySQL> Tabla no existe. Pero lo hace(o deberÃa) (30)
- deja de mysqld
- carpeta de copia de seguridad de mysql:
cp -a /var/lib/mysql /var/lib/mysql-backup
- Copie la carpeta de la base de datos de la máquina antigua a
/var/lib/mysql
- sobrescribir ib * (ib_logfile *, ibdata) de la base de datos antigua
- iniciar mysqld
- volcar dabase
-
mysqldump >dbase.mysql
- detener el servicio mysql
- eliminar
/var/lib/mysql
- renombrar
/var/lib/mysql-backup
a/var/lib/mysql
- iniciar mysqld
- crear la base de datos
-
mysqldump < dbase.mysql
Cambié el datadir de una instalación de MySQL y siguiendo algunos pasos funcionó bien. Cada base que tenía se movió correctamente, pero una.
Puedo conectarme y UTILIZAR la base de datos, incluso SHOW TABLES me devuelve todas las tablas correctamente y los archivos de cada tabla existen en el directorio de datos mysql. Pero cuando intento SELECCIONAR algo allí, dice que la tabla no existe. ¡Pero la tabla existe, incluso se muestra en la declaración MOSTRAR TABLAS!
Mi conjetura es que SHOW TABLES enumera la existencia de los archivos de alguna manera que los archivos están dañados o algo así, pero no lo comprueba. Así que puedo enumerarlos pero no acceder a ellos.
Pero eso es solo una conjetura, nunca he visto esto antes. No se puede reiniciar la base de datos ahora para probar, todas las demás aplicaciones que la usan se están ejecutando bien.
¿Alguien sabe qué es?
Ejemplo:
mysql> SHOW TABLES;
+-----------------------+
| Tables_in_database |
+-----------------------+
| TABLE_ONE |
| TABLE_TWO |
| TABLE_THREE |
+-----------------------+
mysql> SELECT * FROM TABLE_ONE;
ERROR 1146 (42S02): Table ''database.TABLE_ONE'' doesn''t exist
Hacer mysqldump a la base de datos:
mysqldump -u user -ppass dbname > D:/Back-ups/dbname.sql
Restaurar la base de datos
mysql -u user -ppass dbname < D:/Back-ups/dbname.sql
Ahora todas las tablas en la base de datos fueron restauradas completamente. Tratar..
SELECT * FROM dbname.tablename;
Acabo de pasar tres días en esta pesadilla. Idealmente, debería tener una copia de seguridad que pueda restaurar, luego simplemente deje caer la tabla dañada. Este tipo de errores pueden hacer que su ibdata1 crezca enormemente (más de 100 GB en tamaño para tablas modestas)
Si no tiene una copia de seguridad reciente, por ejemplo, si confió en mySqlDump, es probable que sus copias de seguridad se hayan roto en algún momento en el pasado. Deberá exportar las bases de datos, lo que, por supuesto, no puede hacer, ya que obtendrá errores de bloqueo al ejecutar mySqlDump.
Entonces, como solución alternativa, vaya a /var/log/mysql/database_name/
y elimine el table_name. *
Entonces inmediatamente trata de volcar la mesa; Hacer esto debería funcionar ahora. Ahora restaure la base de datos a una nueva base de datos y reconstruya las tablas que faltan. A continuación, volcar la base de datos rota.
En nuestro caso, también mysql has gone away
mensajes de mysql has gone away
que se habían mysql has gone away
a intervalos aleatorios en todas las bases de datos; Una vez que se eliminó la base de datos dañada, todo volvió a la normalidad.
Copie solo el archivo ibdata1
de su antiguo directorio de datos. No copie los archivos ib_logfile1
o ib_logfile0
. Eso hará que MySQL no se inicie más.
Después de tener que volver a instalar MySQL tuve este mismo problema, parece que durante la instalación, algunos archivos de configuración que almacenan datos sobre los archivos de registro de InnoDB, estos archivos ib_logfile * (¿son archivos de registro, verdad?), Se sobrescriben. Para resolver este problema, acabo de eliminar los archivos ib_logfile *.
El mismo problema exacto después de la importación de copia de seguridad de TimeMachine. Mi solución fue detener el servidor MySQL y corregir los permisos de lectura y escritura en los archivos ib *.
En mi caso fue el parámetro SQLCA.DBParm
.
solía
SQLCA.DBParm = "Databse = "sle_database.text""
pero debe ser
SQLCA.DBParm = "Database=''" +sle_database.text+ "''"
Explicacion
Vas a combinar tres cuerdas:
1. Database='' - "Database=''"
2. (name of the database) - +sle_database.text+
3. '' - "''" (means " '' " without space)
No uses espacios en las marcas de cuatricromía. Gracias a mi colega Jan.
En mi caso, cuando estaba importando el archivo sql exportado, recibía un error, ya que la tabla no existe para la consulta de creación de tabla.
Me di cuenta de que había un guión bajo en el nombre de mi base de datos y mysql estaba poniendo un carácter de escape justo antes de eso.
Así que eliminé el guión bajo en el nombre de la base de datos, todo funcionó.
Espero que ayude a alguien más también.
En mi caso, había definido un disparador en la tabla y luego estaba tratando de insertar la fila en la tabla. Parece que, de alguna manera, el disparador fue erróneo, y por lo tanto, la inserción estaba dando error, la tabla no existe.
Es posible que tengas un carácter oculto en el nombre de tu tabla. Los que no aparecen cuando haces un show de tablas. ¿Puedes hacer un "MOSTRAR CREAR TABLA TABLE_ONE" y completar la pestaña "TABLE_ONE" y ver si coloca algún carácter oculto? Además, has intentado dejar caer y rehacer las mesas. Solo para asegurarse de que no haya ningún problema con los privilegios y que no haya caracteres ocultos.
Este error también puede ocurrir al configurar lower_case_table_names
en 1
, y luego tratar de acceder a las tablas que se crearon con el valor predeterminado para esa variable. En ese caso, puede revertirlo al valor anterior y podrá leer la tabla.
Instalé MariaDB en la nueva computadora, detuve el servicio Mysql, cambié el nombre de la carpeta de datos a los datos. Resolví mi problema copiando solo Mysql / data / table_folders e ibdata1 de la Carpeta de datos HD MySql bloqueada a la nueva carpeta de datos MySQL instalada.
Me salté ib_logfile0 y ib_logfile1 (de lo contrario, el servidor no inició el servicio)
Se inició el servicio mysql.
Entonces el servidor se está ejecutando.
Intente ejecutar la consulta SQL para descartar el espacio de tablas antes de copiar el archivo idb:
ALTER TABLE mydatabase.mytable DISCARD TABLESPACE;
Copiar el archivo idb
ALTER TABLE mydatabase.mytable IMPORT TABLESPACE;
Reiniciar MySql
Lo que funcionó para mí fue simplemente dejar caer la mesa, aunque no existiera. Luego volví a crear la tabla y la volví a rellenar desde un volcado de SQL realizado anteriormente.
Debe haber alguna metabase de nombres de tablas, y lo más probable es que todavía existiera hasta que la eliminé.
No sé la razón, pero en mi caso resolví simplemente deshabilitando y habilitando la verificación de claves externas
SET FOREIGN_KEY_CHECKS=0;
SET FOREIGN_KEY_CHECKS=1;
Ok, esto va a sonar bastante absurdo, pero hazme el humor.
Para mí, el problema se resolvió cuando cambié mi declaración a esto:
SELECT * FROM `table`
Hice dos cambios
1.) Hizo el nombre de la tabla en minúsculas - ¡Lo sé!
2.) Usó el símbolo de cita específico = ` : Es la tecla que está sobre tu TAB
La solución suena absurda, pero funcionó y es sábado por la noche y he estado trabajando desde las 9 am, así que lo tomaré :)
Buena suerte.
Otra respuesta que creo que vale la pena mencionar aquí (porque vine aquí con el mismo problema y resultó ser la respuesta para mí):
Verifique que el nombre de la tabla en su consulta esté escrito exactamente igual que en la base de datos.
Es algo obvio, algo nuevo, pero cosas como "usuario" vs "usuarios" pueden hacer tropezar a la gente y pensé que sería una respuesta útil tener en la lista aquí. :)
Para mí, en Mac OS (Instalación de MySQL DMG), un simple reinicio del servidor MySQL solucionó el problema. Supongo que la hibernación lo causó.
Parece que el problema tiene que ver (al menos en el mío y algunos otros) con archivos de registro innodb no válidos (¿corruptos?). En general, simplemente necesitan ser recreados.
Aquí hay soluciones, la mayoría de las cuales requieren un reinicio de mysql.
- Vuelva a crear sus archivos de registro ( Eliminar y reiniciar mysql )
- Cambia el tamaño de tus archivos de registro (MySql 5.6+ regenerará el archivo por ti)
- Si está realizando algún tipo de migración de datos, asegúrese de haber migrado correctamente el archivo correcto y de haberle otorgado los permisos que otros ya han indicado.
- Verifique los permisos de sus datos y archivos de registro, de que mysql es propietario de ambos
- Si todo lo demás falla, es probable que tenga que volver a crear la base de datos
Por favor, ejecute la consulta:
SELECT
i.TABLE_NAME AS table_name,
LENGTH(i.TABLE_NAME) AS table_name_length,
IF(i.TABLE_NAME RLIKE ''^[A-Za-z0-9_]+$'',''YES'',''NO'') AS table_name_is_ascii
FROM
information_schema.`TABLES` i
WHERE
i.TABLE_SCHEMA = ''database''
Desafortunadamente, MySQL permite que se utilicen caracteres Unicode y no imprimibles en el nombre de la tabla. Si creó sus tablas copiando el código de creación de algún documento / sitio web, existe la posibilidad de que tenga espacio de ancho cero en alguna parte.
Por si a alguien le sigue importando:
Tuve el mismo problema después de copiar un directorio de base de datos directamente usando el comando
cp -r /path/to/my/database /var/lib/mysql/new_database
Si haces esto con una base de datos que usa tablas InnoDB
, obtendrás este error loco de "tabla no existe" mencionado anteriormente.
El problema es que necesita los archivos ib*
en la raíz de la datadir MySQL (por ejemplo, ibdata1
, ib_logfile0
y ib_logfile1
).
Cuando copié los que funcionó para mí.
Se cruzó el mismo problema hoy. Este es un problema de mysql "Identifier Case Sensitivity".
Por favor, compruebe el archivo de datos correspondiente. Es muy probable que el nombre del archivo esté en minúsculas en el sistema de archivos, pero el nombre de la tabla que se muestra en el comando "mostrar tablas" está en mayúsculas. Si la variable del sistema " lower_case_table_names
" es 0, la consulta devolverá "la tabla no existe" porque las comparaciones de nombres distinguen entre mayúsculas y minúsculas cuando " lower_case_table_names
" es 0.
Si hay un punto en el nombre de la tabla, fallará para SELECT * FROM poorly_named.table;
Utilice backticks para obtener la tabla SELECT * FROM `poorly_named.table`;
Tenía un problema similar con una mesa fantasma. Afortunadamente tuvo un volcado de SQL desde antes de la falla.
En mi caso, tuve que:
- Detener mySQL
- Mueva los archivos ib * de
/var/mysql
a una copia de seguridad - Eliminar
/var/mysql/{dbname}
- Reiniciar mySQL
- Recrear la base de datos vacía
- Restaurar archivo de volcado
NOTA: Requiere archivo de volcado.
Tengo este problema cuando el caso para el nombre de la tabla que estoy usando está desactivado. Así que la tabla se llama ''db'' pero usé ''DB'' en la declaración de selección. Asegúrese de que el caso es el mismo.
Tuve el mismo problema y busqué por 2-3 días, pero la solución para mí fue realmente estúpida.
Reinicie el mysql
$ sudo service mysql restart
Ahora las mesas se vuelven accesibles.
Tuve el mismo problema, pero no fue debido a un personaje oculto o "mesa de schroedinger". El problema (exactamente como se indicó anteriormente) apareció después de un proceso de restauración. Estoy usando la versión 1.2.16 del administrador de MySQL. Cuando se debe llevar a cabo una restauración, debe haber desactivado ORIGINAL
en el esquema de destino y seleccionar el nombre de su base de datos en el cuadro desplegable. Después de eso el problema fue solucionado. Al menos esa fue la razón en mi base de datos.
Tuve este problema después de actualizar WAMP pero no tener una copia de seguridad de la base de datos.
Esto funcionó para mí:
Detener el nuevo WAMP
Copie los directorios de la base de datos que necesita y el archivo ibdata1 de la instalación anterior de WAMP
Eliminar
ib_logfile0
yib_logfile1
Iniciar WAMP
Ahora debería poder hacer copias de seguridad de sus bases de datos. Sin embargo, después de que el servidor se reinicie de nuevo, seguirá teniendo problemas. Así que ahora reinstala WAMP e importa tus bases de datos.
Vaya a: xampp/mysql/data/dbname
dentro de dbname tiene tablename.frm y tablename.ibd.
elimínelo y reinicie mysql e intente de nuevo.
Aquí hay otro escenario (actualización de la versión) :
Reinstalé mi sistema operativo (Mac OS El Captain) e instalé una nueva versión de mysql (utilizando homebrew). La versión instalada (5.7) resultó ser más nueva que la anterior. Luego copié las tablas, incluidos los archivos ib *, y reinicié el servidor. Pude ver las tablas en el banco de trabajo mysql pero cuando intenté seleccionar algo, obtuve "La tabla no existe".
Solución:
- detenga el servidor mysql, por ejemplo,
mysql.server stop
obrew services stop mysql
- inicie el servidor usando
mysqld_safe --user=mysql --datadir=/usr/local/var/mysql/
(cambie la ruta según sea necesario) - ejecute
mysql_upgrade -u root -p password
(en otra ventana de terminal) - apague el servidor en ejecución
mysqladmin -u root -p password shutdown
- reinicie el servidor en modo normal
mysql.server start
obrew services start mysql
Los documentos relevantes están here .