MySQLPlesk卒業日記Linux管理をはじめて数年、これまでPleskにお任せして避けてきた自力サーバー管理をはじめることになった。自宅サーバーもやってみたいし。ないブログに表示されています。新しい記事を書く事で広告が消えます。以前使っていたサーバから新しいサーバへ引越する手順で結構めんどくさいのがMySQLのデータ引越。DNSも外にあるのでAレコードの変更だけで済むし、コンテンツファイルはまぁサイズが大きくてもtarしてftpで転送するだけなので大した時間はかからない。mysqlもmysqldumpでファイルを付くって、新しいサーバでコマンドラインから投入すれば数分で済むと思っていた。ところが、やってみるとこれが非常に時間がかかる。私のサイトのテーブルは20Mくらいのサイズしかないのだが、試しに移行してみると1時間かかっても終了しなかった。1テーブルだけ(1.4メガくらい)を移行テストしてみたところ、10分かかった。なんでこんなに時間がかかるんだ。ネットでいろいろ調べてみた方法を試してみた。つけると、インサートのたびにキー更新せず、insertが全部完了してからテーブルのインデックスを作るので早くなる。付加してmysqldumpを実行しているので、これはもともとそうなっていた。つけると1行で複数のinsert文を作るので早くなる。これも同様に私の環境では既にそうなっていた。つけるとまとめてコミットするので早くなる、とのことだったので試してみたが、結局前よりも遅くなった。・移行先のmysql設定を見直してみるnet_buffer_lengthのサイズを大きくしてみたが効果なし。key_buffer=256Mquery_cache_size=32Mこんな設定も試してみたが変化なし。myisam_max_sort_file_size=2Gtmpdir=/home/tmpこれも変化がなかった。variables;でエラーになってしまったのでやめた。最終的にはmysqlのデータファイルをまんまコピーするという荒技を試してみた。これを実行するとmysqlのデータがどこに格納されているかが分かる。そのディレクトリにあるDB名のディレクトリを丸ごと圧縮する。dbnameこんな感じで。-これで解凍・展開する。展開するとopt、frm、MYD、MYIなどの拡張子のファイルが沢山できるので、同じようにmysqlのデータ格納ディレクトリを調べて、db名のディレクトリに丸ごとコピーする。データが更新されていたらうまくいかないのでテーブルをロックする、などの注意書きもあったのだが、私の場合は特にそういうことをしなくてもうまくいった。DB更新が多いサイトを運営しているが、3回試して3回ともうまくいった。移行元と移行先でmysqlのバージョンが違っているにもかかわらず。単純にコピーしたいだけの引越ならこれが一番簡単ではないだろうか。いうかmysqlはそういうたぐいの方法を用意するべきじゃない?ちなみにデータベース名やデータベースユーザ名は移行元と先で統一して実験した。