owncloud 7を8にアップデートしようとしたところ、DBのマイグレーションでコケてしまいました。
そこで、新環境にowncloud 8を新規に構築し、旧環境のユーザアカウントだけでも移行できないかと試してみました。
なお、以下は旧環境・新環境ともにMySQLの場合です。
まずowncloudのアカウント情報が格納されてるテーブルの構造を見てみます。以下はDB名がowncloud、接頭辞がoc_の場合です。
mysql> describe owncloud.oc_users; +-------------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------------+--------------+------+-----+---------+-------+ | uid | varchar(64) | NO | PRI | | | | displayname | varchar(64) | YES | | NULL | | | password | varchar(255) | NO | | | | +-------------+--------------+------+-----+---------+-------+
7系でも8系でもこのテーブルの構造は同じでした。
かなりシンプルなのでほとんどのバージョンで同じなのではないでしょうか。
そのままデータを移してしまえば移行できそうです。
旧環境でoc_usersテーブルのみdumpを取ります。
mysqldump -u [ユーザ名] -p -t owncloud oc_users > /tmp/users.dump
scp等で新環境にdumpファイルを転送し、新環境のDBに流し込みます。
mysql -u [ユーザ名] -p owncloud < /tmp/users.dump
新環境構築時に作った管理者ユーザで新環境にログインします。
ユーザ管理画面の一覧に旧環境のユーザが追加されているはずです。
ただし、このままではパスワードハッシュのソルトが異なっているので移行したユーザでログインすることはできません。
そこで旧環境からソルトをコピーするのですが、そうすると新環境の管理者ユーザでログインできなくなってしまうので、その前に旧環境のユーザに管理者権限を与えておきましょう。
旧環境のconfig.phpのpasswordsaltの値を新環境のpasswordsaltにコピペします。
vim /var/www/html/owncloud/config/config.php -------------------------------------------------------------------- ...(中略)... 'passwordsalt' => '************************', #旧環境の値を転記する ...(中略)... --------------------------------------------------------------------
これで移行したユーザでログインできるようになっているはずです。
逆に新環境で新たに作成したユーザはログインできなくなってしまっているので、削除してしまいましょう。
この方法ではユーザのグループ情報・管理者権限などは移行できないので注意してください。
ただ、データベースの構造を見る限りoc_group_admin、oc_group_user、oc_groupsテーブルのレコードを同様の方法で移してしまえばグループ情報なども移行できそうです。