SQLダンプからデータベースを復元するときにバイナリモードを有効にする


96

私は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-modeiniファイルを入れてみましたが、それでも同じエラーが発生します。私は何をすべきか?助けてください。

更新

Nickがコメントで示唆し$ > mysql -u root -p -h localhost -D database --binary-mode -o < dump.sqlたようERROR at line 1: Unknown command '\☻'. に、試してみましたが、次のようになりました。500Mbのダンプファイルで、gVIMを使用してその内容を表示すると、理解できない式とデータしか表示されません。


mysql -u root -p -h localhost -D database --binary-mode -o <dump.sql
Nick

1行目でエラーが発生します:不明なコマンド '\☻'。
user1434997 2013年

このエラーが発生していましたが、新しいMySQLダンプを取得して再インポートを試みたところ、正常に機能しました。MySQLダンプは、連結してから解凍する必要がある2つのzip部分で提供されます。最初の解凍が中断され、.sql奇妙な文字とエンコーディングのファイルが作成されたと思います。2回目の試みはうまくいきました。
Joshua Pinter 2018

回答:


217

ファイルを解凍してから、再度インポートしてください。


12
天才。ありがとうございました!
klm123 2015年

2
zipしてから解凍するという意味ですか?
J86 2017年

13
これが私にとっての仕組みです。db.sql.gzを解凍すると、db.sqlが取得され、名前をdb.sql.gzに変更します。圧縮せずに、名前を変更してから、db.sqlに再度解凍します。これで、インポートする適切なファイルを取得できます。
MotsManish 2017年

@MotsManish真剣に?これは冗談だと思いました。試してみて、それが機能するかどうかを確認します。
Joshua Pinter 2018

3
顔のヤシ🤦♀️🤦♀️🤦♀️🤦♀️
Rambatino

53

ダンプファイルを復元するWindowsでも同じ問題が発生します。私のダンプファイルは、次のようなWindowsPowerShellとmysqldumpで作成されました。

mysqldump db > dump.sql

問題は、PowerShellのデフォルトのエンコーディングがUTF16であることに起因します。これをさらに詳しく調べるために、GNUの「ファイル」ユーティリティを使用できますここにWindowsバージョンがあります
ダンプファイルの出力は次のとおりです。

非常に長い行とCRLF行末記号を含むリトルエンディアンUTF-16Unicodeテキスト。

次に、コーディングシステムの変換が必要であり、これを実行できるさまざまなソフトウェアがあります。たとえば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


mysqldump <dbname> -r <filename> WindowsまたはDOSシステムを使用している人なら誰でもこれが解決策です。UTF-8ファイル変換は気を散らすものです。-rオプションを使用すると、出力がファイル名に送られ、Windowsがファイルに挿入するCRLFキャリッジリターン改行(\ r \ n)が処理されます。これが問題の原因です。優れたソリューションをありがとう!
ティモシーLJスチュワート

4
実用的なメモとして、Powershellでファイルを作成した後、Notepad ++を使用して生成されたファイルをUTF-8に変換することで、これを回避しました。
Peter Majeed 2017年

この答えを掘り下げていなかったら、正しい答えを探す時間を節約できたでしょう。何度も賛成できたらいいのにと思います。
sam452 2018

@PeterMajeedと同じことをしました。NotePad ++ですばやく変換して保存することで、既存のファイルを復元できました
Stephen R

18

Windowsマシンでは、上記の手順に従ってください。

  1. メモ帳でファイルを開きます。
  2. [名前を付けて保存]をクリックします
  3. エンコーディングタイプUTF-8を選択します。

次に、データベースを調達します。


これは、Powershellを介してmysqldumpを実行することによって作成されたSQLバックアップファイルに対しては機能しました。Poweshellの出力はUTF-16でした。UTF-8に変更すると問題が解決し、バックアップファイルからデータベースを復元できるようになりました。
ハリーマンテアキス

9

Tarアーカイブツールを使用してファイルを抽出します。次のように使用できます。

tar xf example.sql.gz

1
これが私にとっての答えでした。最初に、.sql.gzファイルをgunzipで圧縮しましたが、インポート時に「バイナリ」エラーが発生しました。ファイルがtar / gzipで圧縮されていることが判明したため、最初にファイルをtar xvfしてから、インポートさせました。
seanbreeden

8

notepad ++(または別のエディター)で開いて、UTF-8に変換/保存してみましたか?

参照:notepad ++ ansiエンコードファイルをutf-8に変換

別のオプションとして、textwrangleを使用してファイルをUTF-8として開いて保存することもできます:http://www.barebones.com/products/textwrangler/


3
ありがとう。これは私にとってトリックでした。NotePad ++でファイルを開きます。エンコーディング> UTF 8に変換
Abhijeet Nagre 2017

また、utf-8エンコーディングで既存の.sqlファイルを「名前を付けて保存」した後のファイルサイズの大幅な変更にも注意してください。指定されたファイルと比較して、サイズのほぼ半分。私の場合、mysqldumpはWindows Power Shellを使用して取得されたため、そのプログラムはエンコーディングを台無しにしました。
tusar 2018年

6

次のmysqldumpようにWindowsPowerShellで実行した後、このエラーが発生しました。

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

そして問題はなくなりました!


mysqldumpを取得しています:errno 32をオンにしました
Radu 2017年

このスレッドがあなたを助けることができるかもしれないかどうか見てください:stackoverflow.com/questions/22288271/…–
Ifedi Okonkwo 2017

ありがとうございました。問題は、古いmysqlサーバーに古いバージョンのphpmyadminを使用してデータベースをエクスポートしたことでした。理由はわかりませんが、データベースの半分はクリアテキストでエクスポートされ、残りの半分はgzipで圧縮されています。
ラドゥ2017年

5

dump.sqlのファイルの先頭にガベージ文字が含まれているか、先頭に空白行がある可能性があります。


5

十分なスペースがない場合、または解凍に時間を無駄にしたくない場合は、このコマンドを試してください。

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

compressed-sqlfile.gzを圧縮ファイル名に置き換えることを忘れないでください。

.gz restoreは、上記で提供したコマンドがないと機能しません。


3

dump.sqlの問題をファイルする必要があります。SequelProを使用してファイルのエンコーディングを確認してください。dump.sqlのゴミ文字である必要があります。


3

同じ問題が発生しましたが、ダンプファイルは実際にはMySQLではなくMSSQLServerのバックアップであることがわかりました。

時々、レガシーバックアップファイルは私たちに悪戯をします。ダンプファイルを確認してください。

ターミナルウィンドウ:

~$ cat mybackup.dmp 

結果は次のとおりです。

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

catコマンドの処理を停止するには:

CTRL + C


1

インポートしようとしているファイルはzipファイルです。ファイルを解凍してから、インポートを再試行してください。


1

Linuxではgunzipを使用してファイルを解凍します。を使用して解凍SQLファイルを編集します。

vi unzipsqlfile.sql

escddで最初のバイナリ行を削除しますescshiftでファイルの最後に移動しますgddで最後のバイナリ行を削除しますファイルを保存しますescx:次に:でmysqlに再インポートします

mysql -u username -p new_database <unzipsqlfile.sql

jetbackup cpanelmysqlバックアップからの20gosqlファイルを使用してこれを実行しました。大きなファイルの仕事をするviを待つのを我慢してください



0

これを使用してエラーを修正できます。

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

2
どうして?それがどのように質問に答えるか説明してください。
Yunnosch

0

元のポスターの質問が解決されたことは知っていますが、Google経由でここに来たところ、さまざまな回答から、SQLがインポートに使用されたものとは異なるデフォルトの文字セットでダンプされていることがわかりました。元の質問と同じエラーが発生しましたが、ダンプが別のMySQLクライアントにパイプされたため、別のツールで開いて別の方法で保存する方法をとることができませんでした。

私たちにとって、ソリューションは--default-character-set=utf8mb4オプションであることが判明し、の呼び出しと、mysqldumpを介してインポートする呼び出しの両方で使用されますmysql。もちろん、同じ問題に直面している他の人とはパラメーターの値が異なる場合があります。サーバー(またはツール)のデフォルト設定は任意の文字セットである可能性があるため、パラメーターを同じに保つことが重要です。


書いた文字列全体を共有していただけませんか。私はあなたと同じ状況にあるので。なぜそれがうまくいかないのかはまだわかりません。それは同じサーバー上にあり、Webサイトのステージングを作成し、mysqldump -uUSER -p user_db | gzip > user_db_$(date +"%Y%m%d_%H%M").sql.gzそれを使用してインポートしようとしていますgunzip -c user_db_datetime.sql.gz | mysql -uUSER -p user_db
Romeo Patrick

私たちの文字列は、さまざまなカスタム設定の膨大なコレクションであるため、役に立ちません。あなたの状況を説明する方法では、私の答えは当てはまりません。私の問題は、ダンプするコンピューター/接続が復元するものとは異なるセットアップであるために発生したため、それらを強制的に同一にするためにデフォルトの文字セットを指定する必要がありました。
トルク

0

古いが金!

MacOS(Catalina 10.15.7)では、少し奇妙でした。名前をに変更dump.sqldump.zip、その後、finder(!)を使用して解凍する必要がありました。ターミナルでは、unzip dump.zipオーダーtar xfz dump.sql[or .gz .tar ...]はエラーメッセージにつながります。

最後に、ファインダーはそれを完全に正常に解凍しました。その後、問題なくファイルをインポートできました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.