質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

mysqli

MySQLiはPHP5より導入されているデータベース用のドライバです。MySQL 4.1.3以降の新しい機能の利点をまとめています。

Q&A

解決済

1回答

1617閲覧

MySQLでdumpファイルをリストアしようとしたら、暗号化文字列のせいでSQLSyntaxエラーが起きる

jakelizzI

総合スコア29

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

mysqli

MySQLiはPHP5より導入されているデータベース用のドライバです。MySQL 4.1.3以降の新しい機能の利点をまとめています。

0グッド

0クリップ

投稿2018/02/23 02:54

編集2018/02/23 07:10

質問

初歩的な質問なのですが、MySQL内のデータで暗号化したいカラムがあり、aes_encryptを用いて暗号化した状態でinsertしています。

その状態でmysqldumpを行うと、暗号化された文字列がそのまま出力されてしまい、mysql < dumpfile.sqlでリストアしようとしても失敗してしまいます。

暗号化したカラムが存在しているDBのバックアップ、リストアはどのように対応したらよいのでしょうか?

ご教授いただけると幸いです。

環境

MySQL: 5.5.29
OS: Amazon Linux

エラー内容

ご指摘があったので、エラー文言について修正させていただきます。

ERROR 1064 (42000) at line 3023: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''' at line 1

対象の文はInsert文です。暗号化されたカラムの文字列があり、文字化けを起こしています。
おそらく、その中にシングルクオテーションやダブルくおテーションなどが出てきてしまっていることが原因かと思われます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

unz.hori

2018/02/23 06:40

失敗してしまいます。ではなくどのように失敗するのか具体的に記述してください。またエラーが出力されたのならそのエラーもご提示ください
jakelizzI

2018/02/23 06:57

失礼いたしました。追記いたします。
unz.hori

2018/02/23 07:04

3203行目のSQLはINSERT文ですか?
jakelizzI

2018/02/23 07:07

insert文です。また、暗号化されたカラムの文字列があり、文字化けを起こしています。おそらく、その中にシングルクオテーションやダブルくおテーションなどが出てきてしまっていることが原因かと思われます。説明不足で申し訳ありません。
unz.hori

2018/02/23 07:08

うーんと文字化けはOSのlangとDBのlangが違うからでは?
jakelizzI

2018/02/23 07:11

aes_encryptされていても、langがあっていれば文字化けは起きないのでしょうか?
unz.hori

2018/02/23 07:15

んー。暗号化方式によりますが通常は可視文字列に変換されると思うんですが...
unz.hori

2018/02/23 07:24

そのカラムの属性は何ですか?
jakelizzI

2018/02/23 07:30

blob型でした。MySQLに詳しくなくて....申し訳ありません。
jakelizzI

2018/02/23 07:55

リストアできました!!そんなオプションがあったとは、知りませんでした。大変ためになりました!
unz.hori

2018/02/23 07:55

解決して良かったです。解決したのであれば、ご自分で回答を書いて解決済みにしてください。
jakelizzI

2018/02/23 07:57

承知いたしました。ありがとうございました。
guest

回答1

0

自己解決

「質問への追記・修正の依頼」内にて、unz.horiさんからの助言で解決できました。

原因

  • 暗号化された対象のカラムのTypeがblob型だったため、バイナリをエスケープできていなかった。

解決方法

  • mysqldumpを行う際のオプションに--hex-blobを指定して、HEX形式で出力すればリストできる状態のDUMPが出力された。

謝辞

unz.hori さん。助かりました。ありがとうございました!

投稿2018/02/23 08:01

jakelizzI

総合スコア29

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問