owncloudのユーザアカウントを移行する(MySQL)

Tetsuro Aoki 383views 更新:2015年6月19日

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テーブルのレコードを同様の方法で移してしまえばグループ情報なども移行できそうです。

ログイン / 新規登録してコメントする

このソースコードをストックして後で利用したり、作業に利用したソースコードをまとめることができます。

こちらもお役に立つかもしれません