PR

[MySQL] 大容量データベースの移動(1)

cPanel の一部や、さくらインターネットなどの場合、phpMySQL に同期やSynchronize という項目があって、データベースを同期させることができる。これを上手く使えば、複数サーバーでの展開もできるのかもしれない。(coreserver は無いらしい)

いま2つのケースがあって

  1. 移転元、移転先いずれも 海外サーバー&cPanel だけれど、ソース側が上手く動作していない
  2. 移転元がcoreserver で移転先がさくらインターネットだけれど、受け入れ側はシンクロOKでもソース側がシンクロNG

という泥沼で、どうにもならない。

スポンサードリンク

更に追い打ちをかけるのが、この記事で述べる内容になるが、

「phpMySQL では受け入れられない大きさ」

なのだ。この観点から見ると上記サーバーは次の制限がある

  1. 50MB
  2. 16MB

php.ini などの設定で変更できるのかもしれないが、およそ許可されない大きさのデータベースだ(後述)。

何を移動するのか

という観点で上記サーバーに当てはめるてみると

  1. シングルサイト WordPress 、マルチサイトWordPress 、 Gallery
  2. WordPress

このうち、1のWordPress はphpMyAdmin でデータベースを、FTP でデータを移動した。(サーバーによってはWordPressのインポート処理に任せることもできる)

というわけで、あとはデータベースを移動したらDNS を書き換える程度なのだが、今回はデータベースが大きくて移動できない。

データベースの大きさ

  1. 550MB
  2. 170MB

1のテーブルを調べるとキャッシュらしいものがほとんどを占めている。ならばシステム側からキャッシュを破棄してやれば良さそうなのだが、システム側も上手く動いていない。これは何となく乗っている廉価な海外サーバーが何かしらやらかしたようにも思うのだが・・。

2は単純にデータが多い。

いずれも見ての通り最適化したくらいでは容量が減る状態ではない。

ならばSSH しかあるまい

こうなってくると、ならばSSH でダンプを取り、FTP で転送し、コマンドラインから流しこむほかない。(ちなみにソース側はSSH 接続ができないタイプだ!何かしらダンプなりが取れるシステムが用意されていると信じたい)

MySQL コマンド

SSH 接続後に、どのようなコマンドを送れば良いのか。参考文献に記載されていたコマンドを見てみる。

バックアップ(>)

基本形

# mysqldump -u {USER} -p {DATABASE} > dumpfile.sql

圧縮(gzip)

# mysqldump –opt -u{USER} -p{PASSWORD} –all-database | gzip > mysql.dmp.gz

※MySQL5 系はopt を明示しなくて良いらしいが、4系は明示する必要があるらしい

データベースの指定

すべて(-A オプション)

# mysqldump -A -u {USER} -p {PASSWORD}> dumpfile.sql

特定のデータベース

# mysqldump -u {USER} -p{PASSWORD} {DATABASE} > mydatabase_dump.sql

リストア(<)

基本形

# mysql -u {USER} -p {PASSWORD} < dumpfile.sql

さくらインターネットなどlocalhost でない場合

mysql -h mysql***.sakura.ne.jp -u {USER} -p {PASSWORD} < data.sql

データベースを指定

# mysql -u {USER} -p{PASSWORD} {DATABASE} < mydatabase_dump.sql

$ mysql  –user={USER} –password={PASSWORD} {DATABASE} < BACKUP.mysql

→ それではいよいよ次回実践してみる

参考文献

コメント