Nextcloudサーバのデータを引越すには

ファイルの変更履歴やカレンダー等、Nextcloudサーバのデータを丸ごと、他のNextcloudサーバに引越す手順を記録したいと思います。

引越し前サーバは、こちらの記事のRaspberry Piの専用OS、Nextcloudpiになります。

引越し先サーバは、こちらの記事のx86_64版Fedora 28、Snap版になります。

データベースはMariaDBまたはMySQLが対象となります。


Nextcloudサーバのバックアップ・リストア手順

基本的にこちらの記事の手順に沿うかたちです。

全体的な流れはこのようになります。

  1. 引越し前サーバでデータをバックアップ
    1. メンテナンスモードON
    2. dataフォルダ
    3. mysqlデータベース
    4. configフォルダ
    5. nextcloudフォルダ(テーマ、追加アプリケーション)
  2. 引越し先サーバへコピー
  3. 引越し先サーバでデータをリストア
    1. メンテナンスモードON
    2. dataフォルダ(必須)
    3. mysqlデータベース(必須)
    4. config.php(必要がある場合)
    5. nextcloudフォルダ(必要がある場合)
  4. メンテナンスモード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にアップデートをクリックすると、表示されるようになりました。引越し前サーバで作成したカレンダーデータも、ちゃんと引越し後サーバで表示されました。


以上でお引越しが完了しました。

お疲れ様でした。

次は、夜間の自動バックアップでデータの消失に備える設定を行ってみたいと思います。

スポンサーリンク

フォローする

スポンサーリンク