NextCloud のインストールで躓いた
自宅サーバーに NextCloud をインストールしたのですが、 初回セットアップ時に必ず必要となる管理者アカウント作成で躓いてしまったので解決方法を記録しておきます。
症状
- インストールボタンをクリックした際、エラー文が出力される。
- 認証情報に誤りはなく、mysqlコマンドや、PHPの
mysqli
ではログインに成功する
エラーの内容
MySQLのユーザー名またはパスワードが有効ではありません
既存のアカウントの詳細を入力してください。
原因の調査
何かしらのログが残っていそうなのでまずは確認してみます。 NextCloud内のディレクトリにログが保存されているので確認してみます。
{NEXT_CLOUD_DIR}/data/nextcloud.log
わたしの環境下ではパーミションが640だったため、そのままでは閲覧できませんでした。chmod
で読み込めるようにします。
sudo chmod 644 nextcloud.log
これで読み込めるようなりました。サーバーからログをダウンロードして調査したところ、それらしい行を発見しました。
{
...
"message":"Failed to connect to the database: An exception occurred in the driver: SQLSTATE[HY000] [1044] Access denied for user 'oc_ユーザー名'@'localhost' to database 'mysql'",
"exception":{},
"CustomMessage":"Failed to connect to the database: An exception occurred in the driver: SQLSTATE[HY000] [1044] Access denied for user 'oc_ユーザー名'@'localhost' to database 'mysql'"
}
データベースの接続に失敗しているようですが、oc_ユーザー名
という作成した覚えのないユーザーでログインしようとしています。このユーザーについてより詳しく調査してみます。
mysql
で現在作成済みのユーザーを表示してみます。
$sudo mysql
mysql> select user, host from mysql.user;
+------------------+-----------+
| user | host |
+------------------+-----------+
| oc_ユーザー名 | localhost |
| oc_ユーザー名 | % |
| oc_ユーザー名1 | localhost |
| oc_ユーザー名1 | % |
+------------------+-----------+
ログの内容通り、oc_ユーザー名
という作成した覚えのないユーザーが大量に(数十個)も追加されていました。
どのような設定で作成されたのか不明なため、とりあえず削除します。
mysql> drop user 'oc_ユーザー名'@'localhost';
Query OK, 0 rows affected (0.04 sec)
mysql> drop user 'oc_ユーザー名'@'%';
Query OK, 0 rows affected (0.04 sec)
MySQL の認証関係が原因だと推測できますが、知識不足のため原因の特定には至りませんでした。
解決方法
いろいろ試したところ、権限が強いユーザーで接続したのが原因でした。
公式ドキュメント通りにユーザーを作成し、NextCloud用のテーブルだけを操作できるように権限を与えるとインストールに成功しました。
mysql> CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
CREATE DATABASE IF NOT EXISTS nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
GRANT ALL PRIVILEGES ON nextcloud.* TO 'username'@'localhost';
FLUSH PRIVILEGES;
一応解決自体はしましたが、はっきりとした原因が解明できていないのはモヤモヤします。
後日より詳しく調査を行い、記事として投稿したいと思います。
カテゴリ: NextCloud