ファイルの変更履歴やカレンダー等、Nextcloudサーバのデータを丸ごと、他のNextcloudサーバに引越す手順を記録したいと思います。
引越し前サーバは、こちらの記事のRaspberry Piの専用OS、Nextcloudpiになります。
引越し先サーバは、こちらの記事のx86_64版Fedora 28、Snap版になります。
データベースはMariaDBまたはMySQLが対象となります。
目次
Nextcloudサーバのバックアップ・リストア手順
基本的にこちらの記事の手順に沿うかたちです。
- Backup — Nextcloud 13 Administration Manual 13 documentation
- Restoring backup — Nextcloud 13 Administration Manual 13 documentation
全体的な流れはこのようになります。
- 引越し前サーバでデータをバックアップ
- メンテナンスモードON
- dataフォルダ
- mysqlデータベース
- configフォルダ
- nextcloudフォルダ(テーマ、追加アプリケーション)
- 引越し先サーバへコピー
- 引越し先サーバでデータをリストア
- メンテナンスモードON
- dataフォルダ(必須)
- mysqlデータベース(必須)
- config.php(必要がある場合)
- nextcloudフォルダ(必要がある場合)
- メンテナンスモードOFF、動作確認
データのバックアップ Nextcloudpi
メンテナンスモードON
まずは、バックアップ中にデータが変わらないように、Nextcloudをメンテナンスモードに移行します。
NextcloudPiでメンテナンスモードをONにする場合、次のコマンドのようです。
sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --on
dataフォルダのバックアップ
バックアップの保存先は、外付けUSB HDDのマウントポイント、/media/myCloudDriveになります。
最初、tarで書庫化・bzip2で圧縮してみたのですが・・・お勧め致しません。
cd /media/myCloudDrive
sudo tar jcvf nc_data_`date +"%Y%m%d"`.tar.bz2 ncdata/
# 失敗する場合もありますので別の手段でコピー
圧縮に時間がかかること、リストア時にエラーが出たことから、この方法は使いませんでした。Raspberry Pi 2 + USB HDDの場合、1時間に4GB程度の処理速度のようです。110GBのデータの圧縮に27時間くらいかかりました。
一時ファイルは作成せずに、あとで引越し先サーバへ直接コピーしたいと思います。
mysqlデータベースのバックアップ
mysqldumpコマンドでnextcloudデータベースをバックアップします。
cd /media/myCloudDrive
sudo mysqldump --single-transaction -u root nextcloud |bzip2 | sudo tee nc_mysqldump_`date +"%Y%m%d"`.bak.bz2 1> /dev/null
nc_mysqldump_<日付>.bak.bz2ファイルができていると思います。
configフォルダのバックアップ
rsyncでコピー後、書庫化・圧縮してみました。
cd /media/myCloudDrive
sudo rsync -Aax /var/www/nextcloud/config .
sudo chmod 755 config config/config.php
sudo tar jcvf nc_config_`date +"%Y%m%d"`.tar.bz2 config/
nc_config_<日付>.tar.bz2ファイルができていると思います。
nextcloudフォルダのバックアップ
nextcloudフォルダをバックアップします。テーマ、追加アプリケーションのバックアップが目的です。
cd /var/www
sudo tar jcvf /media/myCloudDrive/nc_nextcloud_`date +"%Y%m%d"`.tar.bz2 nextcloud
以上でバックアップ完了です。
サーバを引き続き利用する場合、メンテナンスモードを解除します。
sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --off
引越し先サーバへデータをコピー
コピー方法は、SCP、SFTP、NFS等があります。
データフォルダは書庫化・圧縮していませんので、NFSで引越し前サーバのUSB HDDを、引越し後サーバにマウントしてコピーしようと思います。
NFSについての詳細はこちらの記事になります。
NFSサーバ設定 Raspbian
nfs-serverインストール後、/etc/exportsに設定を追加、nfsサービスを起動します。
外付けUSB HDDのマウントポイント/media/myCloudDriveを、192.168.○.○のネットワークに公開する設定になります。
192.168.○.0の部分は、公開するネットワークアドレスを入力します。
sudo apt install nfs-kernel-server
ehcho "/media/myCloudDrive 192.168.○.0/255.255.255.0(rw,sync,no_subtree_check,no_root_squash)" | sudo tee -a /etc/exports
systemctl start nfs-server
sudo exportfs -v
NFSマウント Fedora 28
引越し先サーバで、/media/myCloudDriveをマウントします。/mntにマウントしようと思います。
nfs-utilsをインストール、ファイアウォールの設定を変更、/etc/fstabに設定を追加する流れです。
dnf in nfs-utils
firewall-cmd --add-service=nfs --permanent
firewall-cmd --reload
echo "<NFSサーバのIPアドレス>:/media/myCloudDrive /mnt nfs defaults 0 0" | tee -a /etc/fstab
mount /mnt
うまくマウントされましたでしょうか?
バックアップデータのコピー
書庫化・圧縮済みのbz2ファイル(dataフォルダ、mysqlデータベース、configフォルダ、nextcloudフォルダ)をコピーしますが・・・・nfsでマウントしたため、bz2ファイル展開時に直接ファイルを指定しても良いかもしれません。
データのリストア snap版Nextcloud
引越し先のNextcloudサーバは、初期設定を行い、nextcloudデータベース、config.phpファイル、dataフォルダが作成済みの状態にしました。
メンテナンスモードON
snap版のNextcloudは、次のコマンドでメンテナンスモードを変更できるようです。
nextcloud.occ maintenance:mode --on
snap run nextcloud.occでも同様の動作のようです
dataフォルダのリストア・コピー
既定のdataディレクトリはdata.origにリネームしました。
cd /var/snap/nextcloud/common/nextcloud/
mv data data.orig
書庫化・圧縮した場合は、リストアします。
tar xvf /mnt/nc_data_*.tar.bz2
直接コピーする場合、アーカイブ属性やACL等も含めてrsyncでコピーします。
dnf in rsync
rsync -Aax /mnt/ncdata .
mv ncdata data
mysqlデータベースのリストア
念のため、既定のデータベースをダンプしてから。
nextcloud.mysql-client -e "show databases"
nextcloud.mysqldump |sudo tee nc_mysqldump_orig_`date +"%Y%m%d"`.bak 1> /dev/null
nextcloudデータベースを一度削除して、絵文字対応(utf8mb4)で作成してみました。
nextcloud.mysql-client -e "DROP DATABASE nextcloud"
nextcloud.mysql-client -e "CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci"
内容をリストアします。
cp /mnt/nc_mysqldump_*.bak.bz2 .
bunzip2 nc_mysqldump_*.bak.bz2
nextcloud.mysql-client -D nextcloud < nc_mysqldump_<リストア対象日付>.bak
テーブルが作成されているか確認してみました。
nextcloud.mysql-client -D nextcloud -e "show tables"
oc_storagesテーブルにdataディレクトリのパスが入っているようです。書き換える必要がありそうです。
nextcloud.mysql-client -D nextcloud -e "select * from oc_storages"
“/media/USBdrive/ncdata/”を”/var/snap/nextcloud/common/nextcloud/data/”に変更したいと思います。numeric_id=3が書換え対象行になります。
nextcloud.mysql-client -D nextcloud -e "update oc_storages set id='/var/snap/nextcloud/common/nextcloud/data/' where numeric_id=3"
データベースのリストアは以上で完了です。
config.php(必要がある場合)
バックアップ済みのconfig.php(/mnt/nc_config_*.tar.bz2)を、/var/snap/nextcloud/current/nextcloud/config/config.phpにコピー・・・はせずに、様子を見てみました。
nextcloudフォルダ(必要がある場合)
nextcloudフォルダも同様に、コピーせず様子を見てみました。
メンテナンスモードOFF、動作確認
引越し先サーバのメンテナンスモードを解除して、Webブラウザでアクセスしてみます。
nextcloud.occ maintenance:mode --on
引越し前のサーバで作成したユーザで、問題なくログインできました。
カレンダーやアドレス帳など、インストール済みのアプリケーションのアイコンが表示されませんでしたが。
アプリケーション→アプリバンドル→Calendar→1.6.1にアップデートをクリックすると、表示されるようになりました。引越し前サーバで作成したカレンダーデータも、ちゃんと引越し後サーバで表示されました。
以上でお引越しが完了しました。
お疲れ様でした。
次は、夜間の自動バックアップでデータの消失に備える設定を行ってみたいと思います。