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'.
私は試した $ > mysql -u root -p -h localhost -D database --binary-mode -o < dump.sql
しかし、これは私に以下を与えましたERROR at line 1: Unknown command '\☻'.
これは500 Mbのダンプファイルであり、gVIMを使用してその内容を表示すると、わかりにくいのは式とデータだけです。また、ファイルからコンテンツをコピーしてここに投稿しようとすると、コピーできるのは:SQLite format 3
この種のことは奇妙に思えます。
--binary-mode
(MySQL 5.6.3で導入)への参照は、おそらく注意散漫になります。
Mysqldump出力ファイルを扱っているようには思えません。 file
ユーティリティを試してください。
Shell> file dumpfile.sql
dumpfile.sql: ASCII text
ASCII text
応答が得られない場合は、mysqldump
からのダンプファイルではないもの、または圧縮されたもの( gzipやbzip2など)、mysql
にパイプする前に解凍する必要があります。
SQLite 3.x database
が表示された場合は、間違いなく答えがあります。これは、MySQLダンプファイルではなく、生のSQLiteデータベースです。
実際、SQLiteデータベースの最初の数バイトは次のとおりです。
53 51 4C 69 74 65 20 66 SQLite f
6F 72 6D 61 74 20 33 00 ormat 3^@
ここでの16番目のオクテットは0x00であり、この場合のERROR: ASCII '\0' appeared in the statement...
メッセージを説明していることに注意してください。 --binary-mode
が適切であるという提案は、誤警報です。
Windowsユーザー: 'file'ユーティリティはUnixのツールですが、Windowsバージョンは here で見つかります。
このコマンドでダンプファイルを作成する
.\mysqldump [dbname] -r [filename.sql]
使用:
.\mysqldumb --help
-r、-result-file = name
Direct output to a given file. This option should be used
in systems (e.g., DOS, Windows) that use carriage-return
linefeed pairs (\r\n) to separate text lines. This option
ensures that only a single newline is used.
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
そして問題は消えました!
PowerShellの私も
PowerShellを使用して mysqldump および> を呼び出すときにこの問題が発生しました出力をファイルにパイプします。 PowerShellはファイルの作成時に誤ったエンコードを使用しており、 mysql .. <exported-file.sql を使用してファイルをインポートしようとすると、同じエラーが表示されました
PowerShellセッションでデフォルトのエンコーディングをUTF8に設定すると、この問題が解決することがわかりました。
私の解決策-テスト済みのPowerShell 5.1:
$PSDefaultParameterValues["Out-File:Encoding"] = "utf8";
例:エクスポートの作成方法(simplified):
$cmdExportDB = "mysqldump --Host $Host --databases $DbName -u $UID =p$PWD > $fileName";
Invoke-Expression "& $cmdExportDB";
注:これはPowerShell 4.0では機能しないことを発見しました
開発環境は5.1を実行していましたが、製品版は4.0であり、最初の修正は古いバージョンのPowerShellでは機能しません。
| Set-Content -Encoding UTF8 $fileName
を使用する必要があります
これはすでにイフェディによって提案されました
誰かが圧縮されたgtarを送ってくれました。 gtarにはあまり慣れていませんでしたが、これは別の圧縮形式です。
$ file core_production-1432173533.sql.gtar
core_production-1432173533.sql.gtar: gzip compressed data, from Unix, last modified: Wed May 20 21:59:31 2015
ただし、通常どおりに解凍することができました。
tar -zxvf core_production-1432173533.sql.gtar
$ file core_production-1432173533.sql
core_production-1432173533.sql: ASCII text, with very long lines
そして、私はインポートを行うことができました:
mysql -u root -p -h localhost core_production < core_production-1432173533.sql
私の場合、ファイルが壊れていました。データベースは拡張子.bz2
で圧縮されましたが、実際は.tar.bz2
でした。
bzip2 -dk
を使用した逆圧縮は、エラーを出力せず、ファイルを生成します。ファイルでコマンドfile
を使用するとbzip2 compressed data, block size = 900k
が出力されるため、使用するのが間違っているように見えません。
tar -xf myfile.bz2
を使用する必要がありました
解決策:バックアップファイルを抽出してから、この抽出されたSQLダンプを復元します。
例:
バックアップはdump.sql.gzファイルとして取得され、gunzip cmdを使用して次のように抽出します。
Shell> gunzip dump.sql.gz
そして、RESTOREによって抽出されたdump.sqlファイル。
参照:MySQLバイナリおよびインタラクティブモードについて。
http://dev.mysql.com/doc/refman/5.7/en/mysql-command-options.html#option_mysql_binary-mode
それは私とすべてのセットで機能します!!
Notepad ++(または別のエディター)で開いて、UTF-8に変換/保存してみましたか?
参照: https://stackoverflow.com/questions/7256049/notepad-converting-ansi-encoded-file-to-utf-8
別のオプションは、textwrangleを使用してファイルを開いてUTF-8として保存することです: http://www.barebones.com/products/textwrangler/