从SQL转储还原数据库时启用二进制模式

use*_*997 65 mysql database mysqldump database-restore

我是MySQL的新手,我在Windows上运行它.我试图从MySQL中的转储文件恢复数据库,但我收到以下错误:

$ >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'.
Run Code Online (Sandbox Code Playgroud)

我试过放入--binary-modeini文件,但它仍然给出了同样的错误.我该怎么办?请帮忙.

UPDATE

正如尼克在他的评论中所建议的那样,我试过$ > mysql -u root -p -h localhost -D database --binary-mode -o < dump.sql但它给了我以下ERROR at line 1: Unknown command '\?'. 它是一个500 Mb转储文件,当我使用gVIM查看其内容时,我所能看到的只是表达式和​​数据,这是不可理解的.

sri*_*vas 151

解压缩文件,然后再次导入.

  • 哈哈.哦,伙计,我现在觉得自己像个白痴:D谢谢! (13认同)
  • 这是我的工作方式,解压缩db.sql.gz,你会得到db.sql,再次将它重命名为db.sql.gz,不要压缩它,只需重命名,然后再解压缩到db.sql现在您将获得要导入的正确文件. (8认同)
  • 面掌‍♀️‍♀️‍♀️‍♀️ (7认同)
  • 天才.谢谢! (6认同)
  • 这是什么意思_Unzip file_?它已经解压缩了 (6认同)
  • 你的意思是先压缩再解压? (3认同)
  • 我用Tar再次解压缩它有效! (2认同)
  • 如何解压缩 db 文件? (2认同)

cda*_*int 45

我在Windows中恢复转储文件遇到同样的问题.我的转储文件是用windows powershell和mysqldump创建的,如:

mysqldump db > dump.sql

问题来自powershell的默认编码是UTF16.为了更深入了解这一点,我们可以使用GNU的"文件"实用工具,并且存在一个Windows版本在这里.
我的转储文件的输出是:

Little-endian UTF-16 Unicode文本,具有很长的行,带有CRLF行终止符.

然后需要转换编码系统,并且有各种软件可以做到这一点.例如在emacs中,

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

然后输入所需的编码系统,如utf-8.

并且在将来,为了获得更好的mysqldump结果,请使用:

mysqldump <dbname> -r <filename>

然后输出由mysqldump它自己处理,但不是powershell的重定向.

参考:https://dba.stackexchange.com/questions/44721/error-while-restoring-a-database-from-an-sql-dump

  • 实际上,我通过使用 Notepad++ 将生成的文件转换为 UTF-8 在 Powershell 中创建文件后解决了这个问题。 (4认同)

小智 10

在Windows机器中,请按照上述步骤操作.

  1. 在记事本中打开文件.
  2. 单击另存为
  3. 选择编码类型UTF-8.

现在来源你的数据库.


Ife*_*kwo 9

mysqldump在 Windows PowerShell 上运行后,我遇到过一次此错误,如下所示:

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
Run Code Online (Sandbox Code Playgroud)

我所做的是将其更改为此(管道而不是 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
Run Code Online (Sandbox Code Playgroud)

问题就解决了!


Men*_*los 7

您是否尝试在notepad ++(或其他编辑器)中打开并将我们转换/保存为UTF-8?

请参阅:notepad ++将ansi编码文件转换为utf-8

另一种选择可能是使用textwrangle打开并将文件保存为UTF-8:http://www.barebones.com/products/textwrangler/

  • 谢谢.这对我有用.在NotePad ++中打开文件.编码>转换为UTF 8. (3认同)

Gha*_*van 7

使用Tar存档工具提取文件.你可以这样使用它:

tar xf example.sql.gz
Run Code Online (Sandbox Code Playgroud)


Dew*_*nce 7

如果你没有足够的空间或者不想浪费时间解压,试试这个命令。

gunzip < compressed-sqlfile.gz | mysql -u root -p
Run Code Online (Sandbox Code Playgroud)

不要忘记用您的文件名替换compressed-sqlfile.gz。

如果没有我上面提供的命令,.gz restore 将无法工作。

  • 您应该在命令后添加“database_name”,以便将sql文件导入到该数据库,否则会导致错误。例如:`gunzip &lt;compressed-sqlfile.gz | mysql -u root -p 你的数据库名称` (2认同)

Sub*_*ive 5

可能是你的 dump.sql 在你的文件开头有垃圾字符或者开头有一个空行。