Ubuntu の Mysql と PowerDNS のバージョン組み合わせでRestAPIが使えなくなる現象について


Ubuntu の Mysql と PowerDNS のバージョン組み合わせでRestAPIが使えなくなる現象について

ある仕事でオフラインの Ubuntu に debパッケージで mysql-server と PowerDNS をインストールし、
運用ではスケジュールで各マシンのIP情報を監視し、変更内容をバッチコマンドの RestAPIで DNS情報を更新するような使い方だったのですが、
通常のdebパッケージだけでインストールしたら何故か RestAPIでの DNS情報の更新ができない現象になったので、

同じ現象で困った人は以下にこの現象になった環境を記載しますので、対処方法を参考にしていただければ幸いです。

現象環境

OS DNS DB
Ubuntu20.04 pdns-server_4.2.1-1build2 mysql-server_8.0.22-0
主に使用したdebパッケージ
libmysqlclient21_8.0.22-0ubuntu0.20.04.3_amd64.deb
mysql-client_8.0.22-0ubuntu0.20.04.3_all.deb
mysql-client-8.0_8.0.22-0ubuntu0.20.04.3_amd64.deb
mysql-client-core-8.0_8.0.22-0ubuntu0.20.04.3_amd64.deb
mysql-common_5.8+1.0.5ubuntu2_all.deb
mysql-server_8.0.22-0ubuntu0.20.04.3_all.deb
mysql-server-8.0_8.0.22-0ubuntu0.20.04.3_amd64.deb
mysql-server-core-8.0_8.0.22-0ubuntu0.20.04.3_amd64.deb
pdns-server_4.2.1-1build2_amd64.deb
pdns-backend-bind_4.2.1-1build2_amd64.deb
pdns-backend-mysql_4.2.1-1build2_amd64.deb
(関連パッケージを入れると多くなってしまうので割愛させていただきます。)

インストールは検索などで得た上記のようなパッケージでそのままインストールして問題ありませんが、
PowerDNS 用の初期設定で使う Mysql 用スキーマ(テーブル作成SQL) に問題がありました。
パッケージは以下のものになります。
pdns-backend-mysql_4.2.1-1build2_amd64.deb
インストールされると下記にMySQL用のスキーマが下記 Dir に入ります。
/usr/share/pdns-backend-mysql/schema/schema.mysql.sql
これをそのまま実行して初期設定をしたら何故か RestAPIでの DNS情報の更新ができない現象になりました。
設定ファイルの
/etc/powerdns/pdns.conf
api=yes
になっているので、APIは使えるはずです。。。

考察

まず、大きな違いのあるアップデートを考えると、Mysql の バージョンアップでの utf8mb4 対応などが思い付きました。
utf8 の4バイト文字対応です。
これを原因とするトラブル対応はいろいろあったのでこれに関わる部分を修正する事にしました。

対処方法

予想で対処したのですが、結果は正常に各機能が動作するようになったのでこの方法を記載します。
インストール用スキーマの内容を確認。

各テーブル内の項目毎に文字列部分には utf8 を指定していたので、
この部分を削除

 VARCHAR(40) CHARACTER SET 'utf8' DEFAULT NULL,
 ↓ ↓ ↓
 VARCHAR(40) DEFAULT NULL,

項目ではなく、各テーブルのデフォルト文字列を utf8mb4 に変更。

Engine=InnoDB CHARACTER SET 'latin1';
 ↓ ↓ ↓
Engine=InnoDB CHARACTER SET 'utf8mb4';

一度作成されたDatabaseを削除して、この修正したスキーマで初期設定を行い起動する事で RestAPI で DNS情報を更新できるようになりました。

今後のPowerDNS 側のアップデートで対応される事を期待しております。