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

我对 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'.

我已经尝试将 --binary-mode放入 ini 文件中,但它仍然给出相同的错误。我该怎么办?请帮帮我。

更新

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

182313 次浏览

你有没有试过打开记事本 + + (或其他编辑器)和转换/保存我们到 UTF-8?

见: 记事本 + + 将 ansi 编码的文件转换为 utf-8

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

我在 Windows 还原转储文件时遇到了同样的问题。我的转储文件是用 Windows PowerShell 和 mysqldump 创建的,比如:

mysqldump db > dump.sql

问题来自于 powershell 的默认编码是 UTF16。为了更深入地了解这一点,我们可以使用 GNU 的“ file”实用程序,并且有一个 Windows 版本的 给你
我的转储文件的输出是: < br/>

Little-endian UTF-16 Unicode 文本,带有非常长的行,带有 CRLF 行终止符。

然后需要一个编码系统的转换,并且有各种各样的软件可以做到这一点,

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

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

将来,为了得到更好的 mysqldump 结果,请使用:

mysqldump <dbname> -r <filename> < br/>

然后输出由 mysqldump自己处理,而不是 Powershell 的重定向。

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

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

它必须文件 Dump.sql 问题。使用 Sequel Pro 检查您的文件编码。它应该是 Dump.sql 中的垃圾字符。

可能是 Dump.sql 在文件开头有垃圾字符,或者 开头有一行空白。

我也有同样的问题,但发现转储文件实际上是一个 MSSQLServer 备份,而不是 MySQL。

有时候遗留备份文件会欺骗我们。请检查您的转储文件。

在终端机窗口:

~$ cat mybackup.dmp

结果是:

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

停止处理 cat 命令:

CTRL + C

我曾经有过这样的错误,在像这样的 Windows PowerShell 上运行 mysqldump之后:

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

我所做的就是把它改为这样(管道改为 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

问题就解决了!

在 Windows 机器中,请按照前面的步骤操作。

  1. 在记事本中打开文件。
  2. 单击“另存为”
  3. 选择 Encoding type UTF-8。

现在找出你的数据库。

用焦油归档工具提取你的文件。你可以这样使用它:

tar xf example.sql.gz

您的文件应该只有. sql 扩展名,(. zip,. gz. rar)等不支持。 示例: dump. sql

如果您没有足够的空间或者不想浪费时间解压缩它,请尝试以下命令。

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

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

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

您试图导入的文件是一个 zip 文件。解压该文件,然后再次尝试导入。

您可以使用它来修复错误:

zcat {address_sql_database(.tar.gz)} | mysql -u root -p {database_name} --binary-mode

我知道最初的海报问题已经解决了,但我是通过谷歌来到这里的,各种各样的答案最终让我发现,我的 SQL 被转储为一个不同的默认字符集,而不是用来导入它的那个。我得到了与原始问题相同的错误,但是由于我们的转储被导入到另一个 MySQL 客户端,我们不能用另一个工具打开它并以不同的方式保存它。

对我们来说,解决方案是 --default-character-set=utf8mb4选项,既可用于 mysqldump的调用,也可用于通过 mysql导入 mysqldump的调用。当然,对于面临同样问题的其他人,参数的值可能会有所不同,保持相同就很重要了,因为服务器(或工具)的默认设置可能是任何字符集。

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

在 linux 下 使用 gunzip 解压缩文件 使用以下命令编辑解压缩 sql 文件

Vi unzipsqlfile.sql

用 esc dd 删除第一个二进制行 转到文件的底部与 esc 移位 g 用 dd 删除最后一个二进制行 保存文件: 然后使用以下命令重新导入 mysql:

Mysql-u username-p new _ database < unzipsqlfile.sql

我用一个20go sql 文件执行了这个操作,这个文件来自一个 jetbackecpanel mysql 备份。 耐心等待 vi 完成大文件的工作

古老而金黄!

在 MacOS (Catalina 10.15.7)上有点奇怪: 我必须将我的 dump.sql重命名为 dump.zip,之后,我必须使用 finder (!)来解压缩它。 在终端,unzip dump.ziptar xfz dump.sql[or .gz .tar ...]导致错误 msgs。

最后,finder 已经解压缩完全没问题,之后我可以导入文件没有问题。

我也遇到过类似的问题,我在 PowerShell 上用 mysqldump 导出了所有的数据库:

mysqldump -u root -p --all-databases

当我试图在 PowerShell 上导入它时:

mysql -u root -p < .\all-databases.sql

我得到了一个错误说的东西与 <被保留为未来的版本。

因此,我用 cmd尝试了上面的命令,得到了与 OP 相同的错误。

解决方案是使用 PowerShell 和以下命令:

Get-Content '.\all-databases.sql' | &mysql.exe -u user -p