9.データベースのバックアップをしてリストアする(MariaDB)ワードプレスの移行に必要

ワードプレスを別のサーバーに移行します。
移行元はCentOS7で移行先がubuntu20.04です。やり方は複数あります。記事をプラグインを利用して移行するなどありますがパーマリンクが変更になってしまい、検索サイトでリンクエラーが発生します。リダイレクトの方法も今回はやりません。
データベースそのものをバックアップしてリストアする方法を試みます。
SSH接続ができないときはphpMyAdminでも可能と思います。
それではデータベースをバックアップします。mariadbでデータベースを確認しておきます。

mysql -u root -p
show databases;

バックアップするデータベース名の確認をしたら、mysqldumpを使用してバックアップします。拡張子は.sqlとなり、特にバックアップ先を指定しない限り、このコマンドを実行した時のディレクトリにファイルは作成されます。

cd /var/www
mysqldump -u root -p mamushidb > bk.sql

次は画像ファイルなどを含むwordpress配下のすべてのファイル、ディレクトリを圧縮して、1つのファイルにします。下の例はwordpressの中に、これとは関係のないディレクトリが存在するので、それらを除外する方法で圧縮します。

cd /var/www/wordpress
zip bk.zip -r * -x nextcloud* phpMyAdmin* 

データベースと圧縮した2つのファイルをFTPソフトを使用してダウンロードします。

ダウンロードしたファイルは移行先のサーバーにアップロードします。


アップロード先はワードプレスのルートとして設定してあるディレクトリで、この中には何もない状態です。
移行先でもSSH接続をして作業をします。
アップロードしたファイルがあるディレクトリに移動して展開(解凍)します。展開が終わったら圧縮ファイルは削除します。この例では、ブラウザでこのディレクトリにアクセスができるため、削除しました。

cd /var/www/minokamo.tokyo
sudo unzip bk.zip
sudo rm bk.zip

展開されたディレクトリやファイルの所有権をwww-dataに変更します。

sudo chown -R www-data:www-data /var/www/minokamo.tokyo

これで画像データやテーマなどのデータの移行は終わりました。次はパスワードやワードプレスの構成など重要な項目があるデータベースの作業をします。
まずは何もはいっていないデータベースを作成し、ユーザーに権限とパスワードを設定します。
ユーザーとパスワードを移行元と同じにすればwp-config.phpを変更しなくて済みます。

sudo  mariadb
create database wpblog;
grant all on wpblog.* to 'wpuser'@'localhost' identified by 'wppass';
exit

この空のデータベースに移行元のデータベースをインポートします。確認後、バックアップファイルは削除します。

sudo mysql -u root -p wpblog < bk.sql 
sudo mysql -u root -e "show databases"
sudo rm bk.sql

wp-config.phpは必要に応じて書き換えます。
そしてDNSの設定をおこないます。移行先のIPアドレスにドメインを割り当てます。移行元のIPアドレスとドメインの紐づけは解除します。
コマンドプロンプトで次のコマンドを入力して確認をします。

1分くらいで反映されました。

nslookup
server 8.8.8.8
minokamo.tokyo

ドメインとIPアドレスの紐づけができたら、速やかに移行先でSSLの設定をします。

sudo certbot --nginx -d minokamo.tokyo

移行先でワードプレスにログインできるか確認します。ログインするユーザーとパスワードの情報はデータベースの中にあります。よって移行元のユーザー名とパスワードを使用します。うまくログインすることができ、サーバーを停止することなく移行ができたわけです。しかし、トップページは表示されるが記事が表示されないという問題が発生しました。
ブラウザにはNGINXのエラー内容が表示されました。
解決した方法はドメイン移行元のNGINXの設定ファイルの内容において、移行先のものに無い記述があったので付け足しました。

try_files $uri $uri/ /index.php?$args;

さらにphp.iniで次の記述をしました。1を0にすればよいと公式ページにありました。

cgi.fix_pathinfo=0

これをおこなったことで記事も見れるようになりました。しかし、なにか動作が重いのでOPcacheの設定をおこないました。php.iniでこれに関する記述がコメント扱いになっていたので、それを解除しました。インストールしたはずはないのですがphp8のバージョンを確認すると表示されました。

PHP 8.0.0 (cli) (built: Nov 27 2020 12:26:22) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.0-dev, Copyright (c) Zend Technologies
with Zend OPcache v8.0.0, Copyright (c), by Zend Technologies

php -v

drupalのインストールの時はこれがないと次に進むことができないことを思い出した次第です。またAPCuをインストールしました。

sudo apt install php8.0-apcu

APCuの記述はphp.iniにないので自分で追記します。

[apcu]
apc.enabled=1
apc.shm_size=64M
apc.ttl=3600
apc.gc_ttl=3600

最後にPHPとnginxを再起動します。

教育

Posted by admin