MySQL、リストア時の問題

| コメント(0) | トラックバック(0)

○概要
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');

トラックバック(0)

トラックバックURL: http://www.kazu.tv/blog-mgr/mt-tb.cgi/602

コメントする

このブログの作者

名前:kazu
仕事:IT関係の何でも屋
メール:kazu 後幕 kazu どと tv
詳しくはこの辺

このブログ記事について

このページは、kazuが2006年8月12日 05:42に書いたブログ記事です。

ひとつ前のブログ記事は「iframeのonload」です。

次のブログ記事は「JavaScriptでクラス」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ