mysqldumpのコメント

投稿日:

先般建造したCentOS 6.2上ではmysql 5.1.52が走っているので、まずこの上にデータを移行しようと思うのに…なんだか上手くいきません。

旧サーバでmysqldumpを走らせて作ったsqlを

# mysql -uroot -p database < a.sql

みたく読ませようとしても

CREATE TABLE sessi' at line 1
ERROR 1064 (42000) at line 4: 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 '-------------------------------------------------------

とエラーに。

・・・・・・へ? 4行め(at line 4)??(^^;;

ちなみにsqlの中身は

-- MySQL dump 8.23
--
-- Host: localhost Database: database
---------------------------------------------------------
-- Server version 3.23.58-log

--
-- Table structure for table `sessions`
--

DROP TABLE IF EXISTS `sessions`;
CREATE TABLE `sessions` (
`sesskey` varchar(32) NOT NULL default '',
`expiry` int(11) unsigned NOT NULL default '0',
`value` text NOT NULL,
PRIMARY KEY (`sesskey`)
) TYPE=MyISAM;

↑こんな感じ。4行めは赤い行。

「・・・・コメントがエラー・・・???」

ということで、試しにコメント行(行頭が「--」)を除く

DROP TABLE IF EXISTS `sessions`;
CREATE TABLE `sessions` (
`sesskey` varchar(32) NOT NULL default '',
`expiry` int(11) unsigned NOT NULL default '0',
`value` text NOT NULL,
PRIMARY KEY (`sesskey`)
) TYPE=MyISAM;

だけを喰わせてみたら…あっさり通りました。

もしかして、MySQLの新旧バージョンでコメントの書き方が違ったりするんだろか…??

またデータ中に\nとか含んでるとsql処理中に

「\nって書いてあるココが行末」

と誤認してエラーが出ちゃったので、旧サーバ上でmysqldumpを--tabオプションで起動してテーブル毎にデータバックアップを作り直し。

# mysqldump -uroot -p database --default-character-set=ujis --tab=./sql_backup

作成されたsqlはコメント(「--」で始まる行)を大量に含んでるので、正規表現で一括削除。

^--(.*)\n

をヌルに置換しておけば、*.sqlに書かれたテーブル作成のsqlは通ります。

# mysql -uroot -p database < sessions.sql

こうして元と同様のテーブルを作成した後、sessions.txtを新サーバ上で

# mysqlimport -uroot -p database --default-character-set=ujis --delete --lines-terminated-by="\n" --local sessions.txt

としてやることで、無事旧サーバのDBの中身を移行することができました(^_^)

さて、次はperlやphpのバージョン違いが吸収出来るかどうかの検証だ。