Subsonic のデータベースを MySQL でセットアップする際のバッドノウハウ

CentOS 8
スポンサーリンク
音楽もサブスクのご時世ですが、私はストリーミングサーバーの Subsonic を設置し、iPhone アプリの iSub で聴くスタイルを愛用しています。長年使っていて特に問題はなかったのですが、最近アートワークの画像に別のアルバムのものが表示されたり、タイトルやアーティストが実際の楽曲と異なるものが表示されたりするようになりました。 Subsonic の管理画面からデータベースを再構築しても改善されなかったため、標準で使われている 組み込みデータベースである HSQLDB から、外部データベースの MariaDB に切り替えて解決を図ってみたところ、泥沼にハマったので記録しておきます。 ※サーバー移行に伴う新規インストールなので、HSQLDB から MySQL へのデータ移行の記事ではありません。

環境

サーバー

  • RHEL 8
  • Subsonic 6.1.6
  • MariaDB 10.6

クライアント

手順

まずは普通に導入

公式サイトの手順に従って進めていきます。 4040 ポートが空いていない場合は開けておく ブラウザで http://サーバー名:4040/ にアクセスしたところ、初期ログイン画面が表示された。 Subsonic 初期画面

外部データベースを使用するように設定変更

MariaDB に subsonic ユーザーとデータベースを作成 /etc/sysconfig/subsonic の起動オプションにデータベースを読み込むよう修正 Subsonic を再起動 ブラウザでアクセスしたところ、エラー画面になってしまった。 ログを確認 /var/subsonic/subsonic.log を確認するとパスワードが通っていない様子。 接続元のホストが「localhost」ではなく「127.0.0.1」となっていたので、ダメ元で MariaDB でユーザー情報を修正してみる。 Subsonic を再起動してもやっぱりエラーになる。 Subsonic のログも先程と同じく「Access denied for user 'subsonic'@'127.0.0.1' (using password: NO)」となっている。

MariaDB の subsonic ユーザーパスワードを空にしてみる

subsonic ユーザーのパスワードを空にしてみたところ接続できるようになった。 Subsonic の設定ファイルもパスワード無しに修正
  • SUBSONIC_ARGS からパスワードを項目ごと削除
  • メモリを 150 から 300(適当)に変更
  • SUBSONIC_USER を root からユーザーに変更
データベース接続がタイムアウトエラー

結論

MariaDB のパスワード無し運用は気持ち悪いが、ホスト制限で内部からしか見れない筈なので良しとしておきます。特に理由がない限りは外部データベースに切り替える必要は無いと感じました。 肝心の iSub 上でアートワークが入れ替わったりする問題は、暫く使って検証します。

その後

この後三ヶ月程使用しました。アーティストや曲名が間違って表示されることは無くなりましたが、アートワークが入れ替わる現象は相変わらず発生しました。 クライアントの iSub 側で App Setting > Settings > Reset Album Art Cache を行えば直るので、対症療法で行くしかなさそうです。 Reset Album Art Cache

データベース接続がタイムアウトエラーになる

暫くサーバーにアクセスがない状態で iSub から Subsonic サーバーを参照すると下記のエラーが発生するようになりました。
iSub Error
Error There was an error grabbing the album list. Error: PreparedStatementCallback; SQL [select id, name, type, username, ip_address, auto_control_enabled, last_seen, cover_art_scheme, transcode_scheme, dynamic_ip, technology, client_id from player where username=? and client_id=?]; The last packet successfully received from the server was 61,949,589 milliseconds ago. The last packet sent successfully to the server was 61,949,590 milliseconds ago. is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connection/J connection priority 'autoReconnect=true' to avoid this problem.; nested exception is com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 61,949,589 milliseconds ago. The last packet sent successfully to the server was 61,949,589 milliseconds ago. is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.
Subsonic の設定ファイルを下記のように書き換えるも効果は無かった。 やはり外部データベースに変えるメリットは無いと感じました。

参考にしたサイト

コメント

タイトルとURLをコピーしました