MySQL、リストア時の問題


○概要
MySQLのデータベースのバックアップ、リストアにはMySQL AdministratorというGUIのツールを使ってる。それ以外の選択肢としては以下のようなものがあるけど、Windowsアプリなので簡単にインストールので。
・phpMyAdmin
・mysqldumpコマンド
MySQL Administratorを使ってデータベースをバックアップしてリストアしたり、別のマシンのMySQLにデータを移行したりってのは良くあると思うけど、結構ちょくちょく問題が発生する。
MySQL AdministratorでダンプするとCREATE DATABAS, CREATE TABLE, INSERT文などが含まれたSQL文が作成されるけど、ダンプしたデータからリストアが出来ない事がよくある。
○いままであった問題点
・外部キーがあるテーブルのリストア時
テーブルAがテーブルBを参照しているとする。ダンプするとA→Bという順でCREATE TABLE文が作成されるけど、Aを作成する時点ではBが存在していないのでエラーになる。(errno 150 と表示される)
これを防ぐには一時的に以下のようにしておけばいい。

FOREIGN_KEY_CHECKS=0

マニュアルの該当ページ
MySQL Administratorでの出力の先頭に以下のような行がある。

/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;

と言う事で、通常は自動的にやってくれそうな感じだけど、リストア先のデータベース・リストア時のMySQL Administratorのバージョンとかの違いの為か上手くいかない場合があった。その時は以下のようにしたら上手くいった。(コメント行を外した)

SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0

・データに ‘ があると…
INSERT文でVALUEに ‘ (シングルクォート)が含まれている時、そのINSERT文が失敗する(時がある?)。
こんな感じのヤツ↓(このSQLがエラーになるかどうかは試してないけど)

INSERT INTO tbl (name, value) VALUES ( 'foo', 'foo's value');

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です