rsyncを使用する(WordPress移行時などに必要)

rsyncは、UNIXシステムにおいて、差分符号化を使ってデータ転送量を最小化し、遠隔地間のファイルやディレクトリの同期を行うアプリケーションソフトウェアである。同じPCならコピーなどでなんとかなるが、そうではないのでrsyncを使います。移行先のPCでコマンドを入力します。

特徴

・同期・増分・差分など、様々な方法でバックアップが出来る
・遠隔地バックアップが出来るのでリモート作業に向いている
・データ転送時にファイルを圧縮するので高速
・デーモンとして起動することでバックグラウンド動作が可能

下記のコマンドはリモートPCから受信しますが、送信もできる。

rsync -av ubuntu@10.0.0.4:/var/www /tmp

[root@instance-20220518-2006 tmp]# rsync -av ubuntu@10.0.0.4:/var/www /tmp
The authenticity of host '10.0.0.4 (10.0.0.4)’ can’t be established.
ECDSA key fingerprint is SHA256:okV6TespGViKlme5EioFCSZIzoDSHdaaT1KXDK3YF/M.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.0.0.4’ (ECDSA) to the list of known hosts.
ubuntu@10.0.0.4: Permission denied (publickey).
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
rsync error: unexplained error (code 255) at io.c(226) [Receiver=3.1.3]

オプション
-a → コピー元のディレクトリを再帰的にオーナー・グループ・パーミッション・タイムスタンプをそのままコピーします。オプション -rlptgoDと同じです。
-v → コピーしているファイル名やバイト数などの情報を表示します。

エラーが発生しました。
移行元で使用していた秘密鍵を使用しないと駄目らしい。TeraTermのSSH SCP機能を使用してキーを転送します。

その後、このキーを使用してファイル転送するコマンドを入力します。

rsync -e 'ssh -i /tmp/ssh-key-2020-12-08.key' -av ubuntu@10.0.0.4:/var/www /tmp

うまくファイルを持ってこれました。ただし一部のファイルを転送できないエラーが発生しました。

rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1663) [generator=3.1.3]

そこで、バックアップするファイルをディレクトリごと圧縮して1つのファイルにして転送しました。移行元で圧縮をしておきます。この問題はディレクトリとサブディレクトリのグループのビットを削除すると解決するらしいです。

tar -cvf bk.tar minokamo.tokyo

圧縮したファイルを移行先のPCで取り寄せます。

rsync -e 'ssh -i /tmp/ssh-key-2020-12-08.key' -av ubuntu@10.0.0.4:/var/www/bk.tar /tmp

もし、パーミッションのエラーがでたらキーに適切なものを付与しておきます。このエラーはrootでログインすると出ませんでした。

sudo chmod 600 ssh-key-2020-12-08.key

エラーの例

[opc@instance-20220518-2006 tmp]$ rsync -e 'ssh -i /tmp/ssh-key-2020-12-08.key’ -av ubuntu@10.0.0.4:/var/www/bk.tar /tmp
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
Permissions 0644 for '/tmp/ssh-key-2020-12-08.key’ are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key “/tmp/ssh-key-2020-12-08.key": bad permissions
ubuntu@10.0.0.4: Permission denied (publickey).
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
rsync error: unexplained error (code 255) at io.c(226) [Receiver=3.1.3]

WordPressではデータベースもバックアップしておく必要があります。リモートユーザーを設定していないので移行元のPCで作業します。バックアップするデータベースを確認します。

mysql -u root -p
show databases;
exit
mysqldump -u root my_db -p > /tmp/bk.sql

移行先のデータベースサーバーがあるPCでデータベースを持ってくるコマンドを入力します。

rsync -e 'ssh -i /tmp/ssh-key-2020-12-08.key' -av ubuntu@10.0.0.4:/tmp/bk.sql /tmp

持ってきたデータベースをインポートするために、空のデータベースを作成します。

mysql -u root -p
create database my_db;
exit

この空のデータベースに持ってきたデータベースをインポートします。

mysql -u root -p my_db < /tmp/bk.sql

あとは圧縮してあるファイルを展開して配置します。DockerやLAMP環境に配置すればPHPやWebサーバーの設定が済んでいるので比較的容易に移行が出来ると思います。

教育

Posted by admin