Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What is going on with this article?
@REAS_7

phpMyAdminでエクスポートしておいたバックアップデータがインポートできない!?

インポートできない…

削除機能を改修している途中、誤ってデータベースのとあるテーブルのデータががっつり半分以上消えてしまったのでエクスポートしておいたテーブルのデータをインポートして元に戻そうとしました。



できない…
なぜだ…

sample.sql
1054: Unknown column 'カラム名' in 'field list'

とか

sample.sql
#1062 - Duplicate entry '1' for key 'PRIMARY'

とかエラーが出て、何をしてもどっちかのエラーが出て一向にインポートできる気がしない。

そもそもエクスポートの時点で必要な設定がされていないから!

はい。この問題が発覚してから調べて知りましたが、
エクスポートのオプションで
『DROP TABLE / VIEW / PROCEDURE / FUNCTION / EVENT コマンドを追加する』
にチェックを入れておかないとエラーが出る場合があるみたいですね。
しかもデフォルトではチェックが入っていないときた。
エラー出るならなんでデフォルトでチェック入れといてくれないんだ…なにか理由があるんだろうけど。
結構なサイトでエクスポートの方法見たときこんなこと書いてなかったから要注意ですね。
しかも今までこんな設定知らずにサーバの引越しなんかもしてたのにエラー出たことなかったから忘れそう…

エクスポート の手順

1.『エクスポート方法』で詳細を選択して、エクスポートするテーブルを選択

Macの人はcommandを押しながら複数選択できますよ。
私の場合は管理がややこしくなりそうだからテーブルごとにエクスポートしてます。

スクリーンショット 2020-06-03 11.43.42.png

2.『生成オプション』の『DROP TABLE / VIEW / PROCEDURE / FUNCTION / EVENT コマンドを追加する』にチェック

『フォーマット特有のオプション』は『構造とデータ』にチェックですね。
スクリーンショット 2020-06-03 11.49.19.png

※別のテーブルにインポートしようとしても、同名のテーブルにインポートされます。
 →テスト用に複製して名前を変えてそこにインポートしようとしたら複製元のテーブルにインポートされてあせった。(テスト用に作ってあった別のDBでやったから問題なかったけど)

SQLでインサート

しかし今回はバックアップとしてエクスポートしていたデータ。
当然元のデータはもうミスって消してしまった状態のものしかないのでエクスポートし直すなんてことができない。
なんとかこのバックアップデータをインポートする方法はないかと思ったが、結局ググってもわからなかったのでSQLでインサートすることにしました。

1.SQLの画面で『INSERT』をクリックしてINSERT文をセットする

スクリーンショット 2020-06-03 12.51.37.png

2.先ほど「VALUES」の後にある(…)に、エクスポートしていたデータをコピペして実行

エクスポートしたsqlのデータをテキストエディタで開くとサーバの情報だとかテーブルの構造だとかが入っているが、この部分より下からINSERT文が始まっている。
このINSERT文の「VALUES」以下の(…)をコピペして、1.の同じ箇所にコピペして実行すればOK!(1.で選択されている部分)

sample.sql
INSERT INTO `sample_table`(`id`, `name`, `color`, `illust`, `position`) VALUES (…)

/*1行分なら最後の「;」は不要っぽい*/

複数行インサートする場合は

sample.sql
INSERT INTO `sample_table`(`id`, `name`, `color`, `illust`, `position`) VALUES (…),(…),(…),(…),(…),(…),(…),(…);

/*複数行の場合は行ごとにカンマ「,」区切って、最後に「;」をつける*/

行数が多いとINSERT文が何回かに分けて書かれていると思うので、INSERT文の数だけ上記の手順を繰り返して入れるといいと思います。
INSERT INTOから全部コピペして入れたらいいじゃんと思うかもしれませんが、やってみたら最初のエラー1054が出てできませんでした…。

SQLもphpMyAdminもまだまだよくわかっていないので忘備録的な感じで書きましたが、もっとよく理解できるようになったらわかりやすい記事にしたいと思います。

0
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
REAS_7
とある企業に生息しているグラフィックデザイナー。 デザイナーで入社したくせに日頃から上長にデザインやだやだ言って困らせてます。 コーディングとかプログラミングとかは未経験でしたが、「デザインよりこれからはこっちの方が稼げるっしょ!なんかかっこいいし!」という不純な気持ちで数年前から勉強し始めました。 うん…こっちの方が楽しい…

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
0
Help us understand the problem. What is going on with this article?