設定メモ(zairyoを仮想から物理環境へ移動)

28 3月

このサーバーを virtualbox の仮想から物理環境へ移行しました。ubuntuは再インストールしました。仮想のハードディスクを実際のハードディスクに変換するような特別なテクニックは使っていません(可能でしょうか?)。wordpress をどのように移すかが問題でした。幾つかの wordpress は,所有者が自分ではないためログインできません。それゆえ wordpress のデータ移管用のプラグイン等は使えません。IPアドレスはそのまま変更なしです。

先に,新しいコンピューターに ubuntu 16 をインストールしておきます。加えて PHP や MySQL,apache をインストールします。この他 wordpress で必要となる幾つかのPHP用のモジュールもインストールします。

まず www フォルダーのデータの移動を試みます。意外に大きくて(12GB程度)外に書き出すのが大変でした。 VirtualBox のホストとの共有フォルダーに書き出してみると,すべてのファイルの所有者が root になってしまいます。削除などの操作ができないわけではないのが不思議ですが,所有者は root です。所有者が変わると後でやっかいなので他の方法を考えました。

最初にサイズを調べました。フォルダー毎の内訳を調べます。下記のコマンドで現在位置のディレクトリー内部を調べます。

du -h --max-depth 1

wordpress と関連のないフォルダー(kondolabとwordpress_extra)が非常に大きかったので、別に切り出してコピーしました。これらのフォルダーは後で一括して所有者を自分に変更すれば良いので所有者が変更されても問題なし。これで残りが 3GB 程度となって,それらのファイルは所有権等を保ったままコピーしたいので tar を使用して圧縮ファイルを作成しました。自分は friend というユーザーとします。

sudo tar -cvf /home/friend/wwwdata.tar ./www

圧縮した tar ファイルをホストとの共有フォルダーにコピーします。tar ファイルの所有者は変更されますが,中身のファイルの所有者は変更されません。後はホストで共有ホルダーにあるファイルを USB メモリーに書き出して,新しいコンピュータの www フォルダーにコピーします。tar ファイルを解凍し,必要なくなった tarファイルは削除します。

sudo tar -xvf wwwdata.tar
sudo rm ./wwwdata.tar

sudo で実行することで所有権の変更を防いでいるつもりです。別扱いだったファイル(kondolabとwordpress_extra)もコピーします。

これで,WEB のドキュメントは所有権を含めて再現されました。後はデーターベースを再現すれば良いのではないかと考えました。

MySQL のバックアップを下記のコマンドで実行しましたが,不具合が発生。

mysqldump --max_allowed_packet=1G -u root -p -x --all-databases > localhost.sql

上記のデータを新しいコンピューターの MySQL で読み込もうとすると key が重複している云々というエラーが生じました。

原因はつかめなかったのですが,それではと,古い方のサーバーを起動して phpmyadmin にログインし,すべてのデータをエキスポートしました。これを新しいコンピューターの phpmyadmin で利用します。

これには幾らか前準備が必要で,ひとつはアップロードファイルのサイズの上限の拡張です。下記の設定ファイルをエディターに読み込んで書き換えます(参考サイト)。

sudo gedit /etc/php/7.0/apache2/php.ini

もう一つは処理時間の延長です。読み込むデータのサイズは 36MB 程度だったのですが,デフォルトの 5 分では処理が終了しませんでした。同じサイトですが参考サイトに延長のやり方が書いてあります。準備が完了したら,phpmyadmin で読み込みます。

これでデーターベースを復元できたと思って,IPアドレスを本番のものに変更し,WEB サーバーにアクセスすると wordpress が動きません。データベースとの接続が云々というメッセージが返ってくる。phpmyadmin で見てみると,データベースのうち mysql の user テーブルの情報が足りないようです。その部分を元のデータベースから書き出して,新しいデータベースに書き加えて再現してみましたが,まだ動かず。そこで wordpress でデータベースとの接続に利用するユーザーを一旦削除してまた作りなおしたら、動きだしました。データーベースのデータ移行に問題があったと想像します。すべてのデータが上書きされるわけではないかもしれない。root ユーザーの情報を上書きするとは考えにくいし,他のユーザーの情報も同じかも知れません。データーベースの完全な復元が可能ならば,上記のようなトラブルは生じないかもしれないと思います。

後は,phpmyadmin へのアクセス制限を付けました。/etc/phpmyadmin/apache.confを修正します。

<Directory /usr/share/phpmyadmin>
省略
Order Deny,Allow
Deny from All
allow from .oita-u.ac.jp
省略
</Directory>

他に wordpress のログインへのアクセス制限をつけました。/etc/apache2/sites-enabled/000-default.conf を修正します。

<Directory /var/www/html/>
		Options FollowSymLinks MultiViews
		AllowOverride All
		Order allow,deny
		allow from all
		Deny from 99.192.223.130
		Deny from 92.222.3.67
		Deny from 109.228.22.171
		Deny from 188.143.232
		Deny from 126.94.21.224
		Deny from 36.251.128.97
		Deny from 62.212.132.84
		Deny from 133.37.89.5
		Deny from 133.37.89.9
	</Directory>


    <Files ~ "wp-login.php*$">
		Order deny,allow
		deny from all
		allow from xxx.xxx.xxx.xxx (適当なIPを指定する)
	</Files>

バックアップを取って終了です。結局,wordpress のインストールはやっていません。web の内容を所有権等を変更しないように移動させて,データーベースを復元しただけです。