その他問い合わせ #3792
完了MySQL8.4以降非推奨:非一意キーまたは部分キーを外部キーとして使用すること
説明
お世話になっております。
JobArrangerのテーブル構成においてMySQLの最新仕様に関する懸念事項を確認いたしました。
MySQL 8.4のリリースノート(WL #15699)によれば、非一意キーまたは部分キーを外部キーとして使用することが非推奨となり、
新規作成時にはシステム変数 restrict_fk_on_non_standard_key によって制限される旨が記載されております。
JobArrangerの現行のテーブル定義においても、以下の通り「親テーブルの主キーの一部のみを参照する」構成が見受けられます。
【該当する構成の例(jobarranger-server-mysql-7.0.0-1.amzn2023.x86_64.rpm)】
①ja_flow_control_table の外部キー (jobnet_id, start_job_id, update_date) → 参照先:ja_job_control_table (jobnet_id, job_id, update_date)
②ja_job_control_table の外部キー (jobnet_id, update_date) → 参照先:ja_jobnet_control_table (jobnet_id, update_date)
これらの構成について、今後、完全な一意キー(Full Unique Index)を参照するようにインデックスの追加やテーブル定義を変更されるなど、製品側での改修予定はございますでしょうか。
将来的なMySQLのメジャーバージョンアップ(9.0等)において、これらの「非標準的なキー参照」が完全に廃止されるリスクを考慮し、
製品ロードマップとしての対応方針をお聞かせいただけますと幸いです。
ご多忙の折恐縮ですが、ご確認のほどよろしくお願いいたします。
参考URL(MySQLドキュメント)
https://dev.mysql.com/doc/relnotes/mysql/8.4/en/news-8-4-0.html#mysqld-8-4-0-deprecation-removal
(WL #15699)
保守サポート 担当362 さんが約1ヶ月前に更新
- ステータス を 担当者処理中 から 回答中 に変更
ご担当者様
いつもお世話になっております。
ご質問に対し、以下の通り回答させていただきます。
これらの構成について、今後、完全な一意キー(Full Unique Index)を参照するようにインデックスの追加やテーブル定義を変更されるなど、製品側での改修予定はございますでしょうか。
将来的なMySQLのメジャーバージョンアップ(9.0等)において、これらの「非標準的なキー参照」が完全に廃止されるリスクを考慮し、
製品ロードマップとしての対応方針をお聞かせいただけますと幸いです。
これらのテーブル構成について、現時点ではテーブル定義を変更したり、完全なユニークキーを参照するためのインデックスを追加したりする予定はありません(Job Arranger 製品側でも同様です)。
将来的に、MySQL のメジャーバージョン(例:9.0)で「非標準的なキー参照」が非推奨となる可能性を考慮し、弊社環境内で JobArranger が正常に動作することを確認しました。
MySQL の restrict_fk_on_non_standard_key 設定を有効にした状態でも、テーブル作成・データ挿入・テーブル削除が問題なく動作することを確認済みです。
JobArranger の外部キーはすでにユニークキーを参照しているため、現時点で影響はなく、今後のバージョンでもテーブル設計を変更する予定はありません。
そのため、現行のテーブル定義のままで、Job Arranger を安全にご利用いただけます。
匿名ユーザー さんが約1ヶ月前に更新
本件、解決いたしましたので、ステータスは完了(終了)としていただいて差し支えございません。
最後にお問い合わせの経緯のみ共有させていただきます。
JobArrangerにてRDS(MySQL 8.0.40から8.4.7)のブルー/グリーンデプロイを実施した際、
PrePatchCompatibility.logに以下のエラーが出力されたため、その影響範囲を確認したくお問い合わせいたしました。
手厚いサポートをいただき、大変助かりました。また何かございましたら、よろしくお願いいたします。
------------------------------------------------------------------------------------------------------------
3) Checks for foreing keys not referencing a full unique index
Foreign keys to partial indexes may be forbidden as of 8.4.0, this check identifies such cases to warn the user.
zabbix.ja_flow_control_fk1 - invalid foreign key defined as 'ja_flow_control_table(jobnet_id,update_date)' references a non unique key at table 'ja_job_control_table'.
zabbix.ja_flow_control_fk2 - invalid foreign key defined as 'ja_flow_control_table(jobnet_id,update_date)' references a non unique key at table 'ja_job_control_table'.
zabbix.ja_icon_agentless_fk1 - invalid foreign key defined as 'ja_icon_agentless_table(jobnet_id,update_date)' references a non unique key at table 'ja_job_control_table'.
zabbix.ja_icon_calc_fk1 - invalid foreign key defined as 'ja_icon_calc_table(jobnet_id,update_date)' references a non unique key at table 'ja_job_control_table'.
zabbix.ja_icon_end_fk1 - invalid foreign key defined as 'ja_icon_end_table(jobnet_id,update_date)' references a non unique key at table 'ja_job_control_table'.
zabbix.ja_icon_extjob_fk1 - invalid foreign key defined as 'ja_icon_extjob_table(jobnet_id,update_date)' references a non unique key at table 'ja_job_control_table'.
zabbix.ja_icon_fcopy_fk1 - invalid foreign key defined as 'ja_icon_fcopy_table(jobnet_id,update_date)' references a non unique key at table 'ja_job_control_table'.
zabbix.ja_icon_fwait_fk1 - invalid foreign key defined as 'ja_icon_fwait_table(jobnet_id,update_date)' references a non unique key at table 'ja_job_control_table'.
zabbix.ja_icon_if_fk1 - invalid foreign key defined as 'ja_icon_if_table(jobnet_id,update_date)' references a non unique key at table 'ja_job_control_table'.
zabbix.ja_icon_info_fk1 - invalid foreign key defined as 'ja_icon_info_table(jobnet_id,update_date)' references a non unique key at table 'ja_job_control_table'.
zabbix.ja_icon_job_fk1 - invalid foreign key defined as 'ja_icon_job_table(jobnet_id,update_date)' references a non unique key at table 'ja_job_control_table'.
zabbix.ja_icon_jobnet_fk1 - invalid foreign key defined as 'ja_icon_jobnet_table(jobnet_id,update_date)' references a non unique key at table 'ja_job_control_table'.
zabbix.ja_icon_reboot_fk1 - invalid foreign key defined as 'ja_icon_reboot_table(jobnet_id,update_date)' references a non unique key at table 'ja_job_control_table'.
zabbix.ja_icon_release_fk1 - invalid foreign key defined as 'ja_icon_release_table(jobnet_id,update_date)' references a non unique key at table 'ja_job_control_table'.
zabbix.ja_icon_task_fk1 - invalid foreign key defined as 'ja_icon_task_table(jobnet_id,update_date)' references a non unique key at table 'ja_job_control_table'.
zabbix.ja_icon_value_fk1 - invalid foreign key defined as 'ja_icon_value_table(jobnet_id,update_date)' references a non unique key at table 'ja_job_control_table'.
zabbix.ja_icon_zabbix_link_fk1 - invalid foreign key defined as 'ja_icon_zabbix_link_table(jobnet_id,update_date)' references a non unique key at table 'ja_job_control_table'.