0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-06-03

インポートできない…

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



できない…
なぜだ…

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
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?