MySQL 8.4 LTSにおけるセンシティブなキーワードの廃止について

MySQL 8.4 LTSにおけるセンシティブなキーワードの廃止について

ソフトウェアの世界では、かねてからプログラム上で使用されているセンシティブなキーワードの置き換えが進められてきましたが、2020年頃からの「Black Lives Matter」(BLM)運動が広がった時期に MySQL でもバージョン8.0より差別的と捉えられる可能性があるキーワードの置き換えが進められてきました。

2020年1月にはコミュニティバグ上に機能リクエストが起票され

Bug #99806 replace master/slave terminology with primary/replica
Submitted: 8 Jun 2020 16:30
Reporter: Steve David
https://bugs.mysql.com/bug.php?id=99806

2020年7月には MySQL Terminology Updates というブログ記事が公開され、用語の置き換えを推進していくことが宣言されています。

先日リリースされた MySQL 8.4.0 LTS では、上記に該当するキーワードを含む従来のコマンドが実行できなくなっており、それらの機能を使用している様々なツールへの影響が考えられます。

今回の記事では、過去のバージョンから現バージョンに至るまでのこれらのキーワードの置き換えについて調査しました。

目次

MySQL 8.0.23における変更

このバージョンでは、MASTER/SLAVE の語句を使用するコマンドに対して、それらの語句を置き換えるためのコマンドエイリアスが提供されました。

具体的には MASTERSOURCE に、 SLAVEREPLICA に変更されました。

Changes in MySQL 8.0.23 (2021-01-18, General Availability)
https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-23.html#mysqld-8-0-23-deprecation-removal

元コマンド エイリアス 説明
CHANGE MASTER TO CHANGE REPLICATION SOURCE TO MASTER_HOST等のオプションのエイリアスとしてSOURCE_HOST等を追加
START SLAVE START REPLICA MASTER_LOG_POSおよびMASTER_LOG_FILEについて、SOURCE_LOG_POSおよびSOURCE_LOG_FILEのエイリアスを追加
STOP SLAVE STOP REPLICA
SHOW SLAVE STATUS SHOW REPLICA STATUS
SHOW SLAVE HOSTS SHOW REPLICAS
RESET SLAVE RESET REPLICA

また、Com_change_masterステータス変数のエイリアスとして、 Com_change_replication_sourceステータス変数が提供されました。

MySQL 8.0.26における変更

このバージョンでは、システム変数・ステータス変数、テーブル名やメトリックに付随する以下の文字列の置き換え、エイリアスの提供が行われています。

Changes in MySQL 8.0.26 (2021-07-20, General Availability)
https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-26.html#mysqld-8-0-26-feature

置き換え前 置き換え後 説明
master source
slave replica
mts mta multi-threaded-slave から multi-threaded-appliyer への変更

上記の語句の置き換え、エイリアス化が以下のように様々な箇所で行われました。

  • performance_schema内の各テーブルのデータ
    • 各テーブルの EVENT_NAME や、threadsprocesslistテーブルで表示されるスレッド名、待機イベント名等
    • performance_schema内のこれらのデータは 8.0.26以前のバージョンとは 非互換 となりました
    • これに伴い、SHOW PROCESSLISTや、information_schema.processlist、スロークエリログ上に出力されるスレッド名等も置き換えられています
    • 救済措置として8.0.25以前と互換性を保つためのterminology_use_previous = "BEFORE_8_0_26" が導入されました
  • 準同期レプリカ
    • プラグイン名(rpl_semi_sync_master/slave.so -> rpl_semi_sync_source/replica.so)
    • プラグインファイル名(semisync_master/slave.so -> semisync_source/replica.so)
    • オプション名、ステータス変数名
    • 以前の名称のプラグインを使うことも可能です
  • MySQLソースコード
    • C++ ファイル名
    • C++ ファイルのヘッダーガード
    • デバッグシンボル
    • レプリケーション プロトコル ハンドシェイクで渡されるユーザー変数
    • これらは内部的な変更でありユーザに影響しません
  • MySQL Server システム変数名
    • 例として log_slave_updates 等
  • MySQL Server ステータス変数名
    • 例として Com_slave_start 等
  • MySQL Server コマンドラインオプション
  • mysqladmin コマンドラインオプション
  • mysqlbinlog コマンドラインオプション
  • mysqldump コマンドラインオプション
  • MySQL Server SQL関数名

一部NDB Cluster関連のオプション・ステータス変数や、削除予定のオプション・ステータス変数については、従来の語句のまま残されました。

MySQL 8.0.33における変更

このバージョンでは、エラーメッセージに含まれる master, slave, MTS といった用語が置き換えられました。

Changes in MySQL 8.0.33 (2023-04-18, General Availability)
https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-33.html#mysqld-8-0-33-feature

Replication: As part of ongoing work to change old terminology used in MySQL products, the terms “master”, “slave”, and “MTS” have been replaced in error messages relating to MySQL Replication by “source”, “replica”, and “MTA”, respectively. This includes all error messages listed in messages_to_clients.txt and messages_to_error_log.txt relating to replication; the present task does not perform this replacement for messages used in other contexts.

See the MySQL 8.0 Error Message Reference, for more information. (Bug #108422, Bug #34594819, WL #14191)

MySQL 8.2.0における変更

このバージョンでは、さらに残っていたコマンドについてのエイリアスが提供されました。

Changes in MySQL 8.2.0 (2023-10-25, Innovation Release)
https://dev.mysql.com/doc/relnotes/mysql/8.2/en/news-8-2-0.html#mysqld-8-2-0-sql-syntax

元コマンド エイリアス 説明
RESET MASTER RESET BINARY LOGS AND GTIDS MASTER_HOST等のオプションのエイリアスとしてSOURCE_HOST等を追加
SHOW MASTER STATUS SHOW BINARY LOG STATUS MASTER_LOG_POSおよびMASTER_LOG_FILEについて、SOURCE_LOG_POSおよびSOURCE_LOG_FILEのエイリアスを追加
SHOW MASTER LOGS SHOW BINARY LOGS
PURGE MASTER LOGS PURGE BINARY LOGS

上記に合わせて Com_show_master_status ステータス変数が Com_show_binary_log_status 変数にリネームされています。

また、 ALTER EVENTCREATE EVENT で使用されている DISABLED ON SLAVE 句は DISABLED ON REPLICA に変更されています。

https://dev.mysql.com/doc/refman/8.0/ja/replication-features-invoked.html#idm45467798485328
https://dev.mysql.com/doc/refman/8.0/ja/create-event.html

さらに、mysqldump が出力するダンプファイルの内容について、センシティブなキーワードに関する互換性を保持する形式とするかどうかを --output-as-version オプションで制御できるようになりました。

--output-as-version = BEFORE_8_0_23 では、MASTER/SLAVE表記のコマンドになり、--output-as-version = BEFORE_8_2_0 では8.2.0によるエイリアスを除きSOURCE/REPLICA形式になり、--output-as-version = SERVER ではサーバのバージョンを基準にそれらを使い分ける形になります。

MySQL 8.4.0における変更

そして先日リリースされたMySQL 8.4.0においては、2020年から進めてきたセンシティブなキーワードの置き換えを前進させて、置き換え対象の語句を含むコマンド、変数、オプションは 削除 されました。

Changes in MySQL 8.4.0 (2024-04-30, LTS Release)
https://dev.mysql.com/doc/relnotes/mysql/8.4/en/news-8-4-0.html#mysqld-8-4-0-deprecation-removal

Master/Slave等のコマンドはすべて構文エラーとなります。
今まで慣れ親しんだコマンドが構文エラーとなってしまうと驚いてしまうかもしれませんが、これは8.4の予想された動作です。

ステータス変数、システム変数を確認すると、まだすべてが削除されていません。
ですが、これらは非推奨であったりNDB専用の変数であったりするため、将来のバージョンでは大半は削除されていく予定です。

影響されるソフトウェアについて

MySQLのエコシステムを支えるソフトウェアに Master/Slave の語句を使用しているものは数多くあります。

今も活発にメンテナンスされているものもあれば、そうではないソフトウェアもあり、従来のMaster/Slave表記のコマンドを使用しているソフトウェア、またはソフトウェアの部分的な機能は8.4以降で利用できなくなります。

代表的なソフトウェアで影響を受けるものに以下があります。
※ 影響の有無の判断については、ソースコード中に MASTER/SLAVE の語句を含んだコマンドを実行しているか否かで判定

また、独自に作成している監視用スクリプト等も、8.4対応になっていない場合はエラーとなってしまいます。

上記に限らず幅広い影響が考えられますので、8.4へのアップグレード前に影響範囲についてチェックを行う必要があるでしょう。

まとめ

MySQL 8.4でのセンシティブなキーワードの置き換えについて説明させていただきました。

何らかの救済措置があればよかったのですが、現在のところ互換モードがオプションで設定できるといった情報は確認できていません。

今はもうメンテナンスされていないソフトウェアであっても有用なものは数多くあるかと思います。

ぜひ今後のリリースで何かしらの対応策が出ることに期待したいところです。

Lets enjoy MySQL!

スマートスタイルTECHブログについて

スマートスタイルTECHブログでは、日頃MySQLのサポート業務に従事している有資格者で構成された技術サポートチームがMySQLに関する技術情報を発信しています。データベースのお困りごとはお気軽にご相談下さい。

よかったらシェアしてね!
  • URLをコピーしました!
目次