Habilite el modo binario mientras restaura una base de datos desde un volcado SQL

96

Soy extremadamente nuevo en MySQL y lo estoy ejecutando en Windows. Estoy tratando de restaurar una base de datos desde un archivo de volcado en MySQL, pero aparece el siguiente error:

$ >mysql -u root -p -h localhost -D database -o < dump.sql
ERROR: ASCII '\0' appeared in the statement, but this is not allowed unless option --binary-mode is enabled and mysql is run in non-interactive mode. Set --binary-mode to 1 if ASCII '\0' is expected. Query: 'SQLite format 3'.

Intenté poner --binary-modeel archivo ini pero todavía da el mismo error. ¿Qué tengo que hacer? Por favor ayuda.

ACTUALIZAR

Como sugirió Nick en su comentario, lo intenté $ > mysql -u root -p -h localhost -D database --binary-mode -o < dump.sqlpero me dio lo siguiente. ERROR at line 1: Unknown command '\☻'. Es un archivo de volcado de 500 Mb, y cuando veo su contenido usando gVIM, todo lo que puedo ver son expresiones y datos que no son comprensibles.

usuario1434997
fuente
mysql -u root -p -h localhost -D database --binary-mode -o <dump.sql
Nick
Eso da ERROR en la línea 1: comando desconocido '\ ☻'.
user1434997
Recibí este error, pero obtuve un nuevo volcado de MySQL e intenté volver a importar y funcionó bien. Nuestro volcado de MySQL viene en dos partes comprimidas que deben concatenarse y luego descomprimirse. Creo que la descompresión inicial se interrumpió, lo que resultó en un .sqlarchivo con codificaciones y caracteres extraños. El segundo intento funcionó bien.
Joshua Pinter

Respuestas:

217

Descomprima el archivo y luego vuelva a importar.

srinivas
fuente
12
genio. ¡Gracias!
klm123
2
¿Te refieres a comprimir y luego descomprimir?
J86
13
Así es como funcionó para mí, descomprima el archivo db.sql.gz, obtendrá db.sql, cámbiele el nombre nuevamente a db.sql.gz, no lo comprima, simplemente cámbiele el nombre, luego descomprímalo nuevamente a db.sql y ahora obtendrá el archivo correcto para importar.
MotsManish
@MotsManish ¿En serio? Pensé que esto era una broma. Lo intentaré y veré si funciona.
Joshua Pinter
3
cara palma 🤦‍♀️🤦‍♀️🤦‍♀️🤦‍♀️
Rambatino
53

Encuentro el mismo problema en Windows al restaurar un archivo de volcado. Mi archivo de volcado fue creado con Windows powershell y mysqldump como:

mysqldump db > dump.sql

El problema proviene de que la codificación predeterminada de powershell es UTF16. Para profundizar en esto, podemos usar la utilidad "archivo" de GNU, y existe una versión para Windows aquí .
La salida de mi archivo de volcado es:

Texto Unicode UTF-16 Little-endian, con líneas muy largas, con terminadores de línea CRLF.

Entonces se necesita una conversión del sistema de codificación, y hay varios software que pueden hacer esto. Por ejemplo en emacs,

M-x set-buffer-file-coding-system

luego ingrese el sistema de codificación requerido como utf-8.

Y en el futuro, para un mejor resultado de mysqldump, use:

mysqldump <dbname> -r <filename>

y luego la salida se maneja por mysqldumpsí misma pero no la redirección de powershell.

referencia: /dba/44721/error- while - restoring-a - database - from - an - sql - dump

cdarlint
fuente
mysqldump <dbname> -r <filename> cualquiera que use sistemas Windows o DOS, esta es la solución. La conversión de archivos UTF-8 es una distracción. Utilice la opción -r, que dirige la salida al nombre de archivo y maneja el salto de línea de retorno de carro CRLF (\ r \ n) que Windows coloca en los archivos, aquí es donde está el problema. ¡Gracias por la excelente solución!
Timothy LJ Stewart
4
En una nota práctica, solucioné esto después de crear el archivo en Powershell convirtiendo el archivo generado a UTF-8 usando Notepad ++.
Peter Majeed
Esta respuesta, si no hubiera profundizado, me habría ahorrado horas de buscar la respuesta correcta. Ojalá pudiera votar a favor más de una vez.
sam452
Hice lo mismo que @PeterMajeed. Una conversión rápida y guardar con NotePad ++ me permitió restaurar un archivo existente
Stephen R
18

En una máquina con Windows, siga los pasos anteriores.

  1. Abrir archivo en el bloc de notas.
  2. Haga clic en Guardar como
  3. Seleccione el tipo de codificación UTF-8.

Ahora obtenga su db.

Amit Kumar Rai
fuente
Esto funcionó para mí para un archivo de respaldo SQL que había sido creado ejecutando mysqldump a través de Powershell. La salida de Poweshell fue UTF-16. Cambiar a UTF-8 resolvió el problema y me permitió restaurar mi detabase desde el archivo de respaldo.
Harry Mantheakis
9

Extraiga su archivo con la herramienta de archivo Tar. puedes usarlo de esta manera:

tar xf example.sql.gz
Ghasem Pahlavan
fuente
1
Esta fue la respuesta para mí. Al principio, comprimí el archivo .sql.gz que resultó en el error "binario" al importar. Resultó que el archivo estaba comprimido en tar / gzip, así que primero tuve que tar xvf el archivo y luego me dejó importarlo.
seanbreeden
8

¿Ha intentado abrir en notepad ++ (u otro editor) y convertirnos / guardarnos a UTF-8?

Ver: notepad ++ conversión de archivo codificado ansi a utf-8

Otra opción puede ser usar textwrangle para abrir y guardar el archivo como UTF-8: http://www.barebones.com/products/textwrangler/

Prime óptimo
fuente
3
Gracias. Esto funcionó para mí. Abra el archivo en NotePad ++. Codificación> Convertir a UTF 8.
Abhijeet Nagre
¡También tenga en cuenta el cambio significativo en el tamaño del archivo después de 'guardar como' el archivo .sql existente con codificación utf-8! Casi la mitad del tamaño en comparación con el archivo dado. En mi caso, mysqldump se tomó usando un Windows Power Shell, ese programa estropeó la codificación.
tusar
6

Tuve este error una vez, después de ejecutar mysqldumpWindows PowerShell así:

mysqldump -u root p my_db --no-data --no-create-db --no-create-info --routines --triggers --skip-opt --set-gtid-purged=OFF > db_objects.sql

Lo que hice fue cambiarlo a esto (tubería en lugar de Set-Content):

mysqldump -u root p my_db --no-data --no-create-db --no-create-info --routines --triggers --skip-opt --set-gtid-purged=OFF | Set-Content db_objects.sql

¡Y el problema se fue!

Ifedi Okonkwo
fuente
Recibo mysqldump: tengo errno 32 en
Radu
Vea si este hilo podría ayudarlo: stackoverflow.com/questions/22288271/…
Ifedi Okonkwo
Gracias. El problema fue que exporté la base de datos con una versión antigua de phpmyadmin en un servidor mysql antiguo. No estoy seguro de por qué, pero la mitad de la base de datos se exportó en texto sin cifrar y la otra mitad en formato gzip.
Radu
5

Puede ser que su dump.sql tenga un carácter basura al principio de su archivo o que haya una línea en blanco al principio.

Subodh Ranadive
fuente
5

Si no tienes suficiente espacio o no quieres perder tiempo descomprimiéndolo, prueba este comando.

gunzip < compressed-sqlfile.gz | mysql -u root -p

No olvide reemplazar compressed-sqlfile.gz con su nombre de archivo comprimido.

La restauración de .gz no funcionará sin el comando que proporcioné anteriormente.

Dewlance
fuente
3

Debe archivar el problema dump.sql. Utilice Sequel Pro para comprobar su archivo ecoding. Debe haber caracteres basura en su dump.sql.

Datty Wang
fuente
3

Tuve el mismo problema, pero descubrí que el archivo de volcado era en realidad una copia de seguridad del servidor MSSQL, no MySQL.

A veces, los archivos de respaldo heredados nos juegan una mala pasada. Verifique su archivo de volcado.

En la ventana de la terminal:

~$ cat mybackup.dmp 

El resultado fue:

TAPE??G?"5,^}???Microsoft SQL ServerSPAD^LSFMB8..... etc...

Para dejar de procesar el comando cat:

CTRL + C
Hugo Miura
fuente
2

zcat /path/to/file.sql.gz | mysql -u 'root' -p your_database

Nguyễn Anh Tuấn
fuente
1

El archivo que está intentando importar es un archivo zip. Descomprima el archivo y luego intente importarlo nuevamente.

Javaid Mir
fuente
1

En Linux Descomprima su archivo usando gunzip Edite su archivo SQL descomprimido usando

vi unzipsqlfile.sql

Elimine la primera línea binaria con esc dd vaya al final del archivo con esc shift g elimine la última línea binaria con dd guarde el archivo esc x: Luego vuelva a importar a mysql con:

mysql -u nombre de usuario -p new_database <unzipsqlfile.sql

Lo realicé con un archivo sql 20go de una copia de seguridad jetbackup cpanel mysql. Tenga paciencia para esperar que vi haga el trabajo para archivos grandes

Patrice G
fuente
0

Su archivo debe tener solo la extensión .sql, (.zip, .gz .rar), etc.no admitirá. ejemplo: dump.sql

Ibrahim Akbar
fuente
0

Puede usar esto para corregir el error:

zcat {address_sql_database(.tar.gz)} | mysql -u root -p {database_name} --binary-mode
Ali
fuente
2
¿Por qué? Explique cómo responde a la pregunta.
Yunnosch
0

Sé que la pregunta sobre los carteles originales se resolvió, pero vine aquí a través de Google, y las diversas respuestas finalmente me llevaron a descubrir que mi SQL se descargó con un juego de caracteres predeterminado diferente al que se usó para importarlo. Recibí el mismo error que en la pregunta original, pero como nuestro volcado se canalizó a otro cliente MySQL, no pudimos seguir la ruta de abrirlo con otra herramienta y guardarlo de manera diferente.

Para nosotros, la solución resultó ser la --default-character-set=utf8mb4opción, para ser utilizada tanto en la llamada de mysqldumpcomo en la llamada para importarla vía mysql. Por supuesto, el valor del parámetro puede diferir para otros que enfrentan el mismo problema, solo es importante mantenerlo igual, ya que la configuración predeterminada de los servidores (o las herramientas) puede ser cualquier juego de caracteres.

Esfuerzo de torsión
fuente
¿Te importaría compartir toda la cadena que escribiste? Ya que estoy pasando por la misma situación que tú. Aunque todavía no estoy seguro de por qué no funciona para mí. está en el mismo servidor, tratando de hacer una puesta en escena de un sitio web y mysqldump -uUSER -p user_db | gzip > user_db_$(date +"%Y%m%d_%H%M").sql.gzluego tratando de importarlo usandogunzip -c user_db_datetime.sql.gz | mysql -uUSER -p user_db
Romeo Patrick
Nuestra cadena no le sería útil, ya que es una gran colección de varias configuraciones personalizadas. De la forma en que describe su situación, mi respuesta no se aplicaría: mi problema surgió porque la computadora / conexión de descarga tenía una configuración diferente a la de restauración, por lo que necesitábamos especificar el juego de caracteres predeterminado para forzarlos a ser idénticos.
Torque
0

¡Viejo pero dorado!

En MacOS (Catalina 10.15.7) fue un poco extraño: tuve que cambiar el nombre de mi dump.sqlen dump.zipy después de eso, tuve que usar el buscador (!) Para descomprimirlo. en terminal, unzip dump.zipodertar xfz dump.sql[or .gz .tar ...] conduce a mensajes de error.

Finalmente, Finder lo ha descomprimido totalmente bien, después de eso pude importar el archivo sin problemas.

Naderio
fuente