私は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ファイルに入れようとしましたが、それでも同じエラーが発生します。私は何をすべきか?助けてください。
UPDATE
Nickのコメントで示唆されたように、私は$ > mysql -u root -p -h localhost -D database --binary-mode -o < dump.sql
を試しましたが、次のERROR at line 1: Unknown command '\☻'.
を提供しました。これは500 MBのダンプファイルです。わかりにくいです。
ファイルを解凍し、再度インポートします。
ダンプファイルを復元するWindowsでも同じ問題が発生します。私のダンプファイルは、Windows PowerShellおよびmysqldumpで次のように作成されました。
mysqldump db > dump.sql
問題は、powershellのデフォルトのエンコーディングがUTF16であることに起因しています。これをさらに詳しく調べるには、GNUの「ファイル」ユーティリティを使用できます。Windowsバージョン here があります。
ダンプファイルの出力は次のとおりです。
CRLF行ターミネータを使用した、非常に長い行を持つリトルエンディアンUTF-16 Unicodeテキスト。
それからコーディングシステムの変換が必要であり、これを行うことができるさまざまなソフトウェアがあります。たとえば、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
Windowsマシンでは、上記の手順に従ってください。
次に、dbを入手します。
Notepad ++(または別のエディター)で開き、UTF-8に変換/保存してみましたか?
参照: notepad ++からansiエンコードファイルをutf-8に変換
別のオプションは、textwrangleを使用してファイルをUTF-8として開いて保存することです。 http://www.barebones.com/products/textwrangler/
Tarアーカイブツールでファイルを抽出します。次のように使用できます。
tar xf example.sql.gz
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
そして、問題はなくなりました!
Dump.sqlがファイルの先頭に文字化けしているか、先頭に空白行がある可能性があります。
Dump.sqlの問題を報告する必要があります。SequelProを使用して、ファイルのエンコードを確認します。dump.sqlに文字化けがあります。
私も同じ問題を抱えていましたが、ダンプファイルは実際にはMySQLではなくMSSQL Serverバックアップであることがわかりました。
レガシーのバックアップファイルが私たちをonすこともあります。ダンプファイルを確認してください。
ターミナルウィンドウで:
~$ cat mybackup.dmp
結果は次のとおりです。
TAPE??G?"5,^}???Microsoft SQL ServerSPAD^LSFMB8..... etc...
Catコマンドの処理を停止するには:
CTRL + C
十分なスペースがない場合や、解凍に時間を無駄にしたくない場合は、このコマンドを試してください。
gunzip < compressed-sqlfile.gz | mysql -u root -p
Compress-sqlfile.gzを圧縮ファイル名に置き換えることを忘れないでください。
.gz復元は、上記で提供したコマンドなしでは機能しません。
インポートしようとしているファイルはZipファイルです。ファイルを解凍し、インポートを再試行してください。
ファイルは.sql拡張子のみである必要があります(.Zip、.gz .rar)などはサポートされません。例:dump.sql