GA

2022/09/12

MySQL 8.0.30でもrpl_semi_sync_master_enabledとrpl_semi_sync_source_enabledは同じものではない

TL;DR

  • rpl_semi_sync_master_enabledsemisync_master.so 由来で rpl_semi_sync_source_eanbledsemisync_source.so 由来
    • 他のMaster/Source系と違って、MySQLサーバーの中で丸められているわけではなく、 INSTALL PLUGIN した時にどちらを入れたかに依存する

rpl_semi_sync_master_enabledrpl_semi_sync_source_eanbled (enabledに限らず、 rpl_semi_sync_* な設定は全て) は INSTALL PLGUIN した .soファイルに依存するので、MySQL 8.0.30現在、SOURCE, MASTERの用語変更が行われたバージョンであってもこれらは勝手には翻訳されない( semisync_master.so をINSTALLした場合、 rpl_semi_sync_master_* を使用するしかなくて、 rpl_semi_sync_source_* で設定しようとすると unknown variable って怒られる)

mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> SHOW WARNINGS;
+-------+------+-----------------------------------------------------------------------------------------------------------------------+
| Level | Code | Message                                                                                                               |
+-------+------+-----------------------------------------------------------------------------------------------------------------------+
| Note  | 1287 | 'rpl_semi_sync_master' is deprecated and will be removed in a future release. Please use rpl_semi_sync_source instead |
+-------+------+-----------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SHOW VARIABLES LIKE '%semi%';
+-------------------------------------------+------------+
| Variable_name                             | Value      |
+-------------------------------------------+------------+
| rpl_semi_sync_master_enabled              | OFF        |
| rpl_semi_sync_master_timeout              | 10000      |
| rpl_semi_sync_master_trace_level          | 32         |
| rpl_semi_sync_master_wait_for_slave_count | 1          |
| rpl_semi_sync_master_wait_no_slave        | ON         |
| rpl_semi_sync_master_wait_point           | AFTER_SYNC |
+-------------------------------------------+------------+
6 rows in set (0.01 sec)
mysql> INSTALL PLUGIN rpl_semi_sync_source SONAME 'semisync_source.so';
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW VARIABLES LIKE '%semi%';
+---------------------------------------------+------------+
| Variable_name                               | Value      |
+---------------------------------------------+------------+
| rpl_semi_sync_source_enabled                | OFF        |
| rpl_semi_sync_source_timeout                | 10000      |
| rpl_semi_sync_source_trace_level            | 32         |
| rpl_semi_sync_source_wait_for_replica_count | 1          |
| rpl_semi_sync_source_wait_no_replica        | ON         |
| rpl_semi_sync_source_wait_point             | AFTER_SYNC |
+---------------------------------------------+------------+
6 rows in set (0.00 sec)

ちなみに両方入れようとすると怒られる。

mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
ERROR 4045 (HY000): Cannot install the rpl_semi_sync_master plugin when the rpl_semi_sync_source plugin is installed.

semisync_sourcesemisync_slave みたいな混ぜたパターンもできる(ややこしいからやめた方が良い気がする)

mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> SHOW WARNINGS;
+-------+------+-----------------------------------------------------------------------------------------------------------------------+
| Level | Code | Message                                                                                                               |
+-------+------+-----------------------------------------------------------------------------------------------------------------------+
| Note  | 1287 | 'rpl_semi_sync_slave' is deprecated and will be removed in a future release. Please use rpl_semi_sync_replica instead |
+-------+------+-----------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SHOW VARIABLES LIKE '%semi%';
+---------------------------------------------+------------+
| Variable_name                               | Value      |
+---------------------------------------------+------------+
| rpl_semi_sync_slave_enabled                 | OFF        |
| rpl_semi_sync_slave_trace_level             | 32         |
| rpl_semi_sync_source_enabled                | OFF        |
| rpl_semi_sync_source_timeout                | 10000      |
| rpl_semi_sync_source_trace_level            | 32         |
| rpl_semi_sync_source_wait_for_replica_count | 1          |
| rpl_semi_sync_source_wait_no_replica        | ON         |
| rpl_semi_sync_source_wait_point             | AFTER_SYNC |
+---------------------------------------------+------------+
8 rows in set (0.00 sec)

やろうと思う人がいるとも思えないしすぐエラーになるけど、 semisync_master.sorpl_semi_sync_source をインストールしようとしてもエラる。

mysql> INSTALL PLUGIN rpl_semi_sync_source SONAME 'semisync_master.so';
ERROR 1127 (HY000): Can't find symbol 'rpl_semi_sync_source' in library

「8.0.28なのに SET GLOBAL rpl_semi_sync_source_enabled=OFF が効かないぞ?」って思ったので残しておきます。