TL;DR
-
ポートに対応する宛先(デフォルトでは6446はマスター、6447なら全てのスレーブとマスターも(デフォルトだとフォールバックするから))のmysqldが全滅していると、CR_CONN_HOST_ERROR(2003)の後ろのアドレスがmysqlrouterのLISTENポートになる
- どこが落ちてるのかメッセージからわかりにくいと嘆かないで、「全滅した時だけ」だから
- 切り分けの一助になれば幸い
-
ただしこの「全滅」は
…_hidden: true
を含む。
TL;DR
ポートに対応する宛先(デフォルトでは6446はマスター、6447なら全てのスレーブとマスターも(デフォルトだとフォールバックするから))のmysqldが全滅していると、CR_CONN_HOST_ERROR(2003)の後ろのアドレスがmysqlrouterのLISTENポートになる
ただしこの「全滅」は _hidden: true
を含む。
TL;DR
Hiding instances on MySQL InnoDB Cluster/ReplicaSet | MySQL Server Blog
MySQL Shell AdminAPI – What’s new in 8.0.21? | MySQL Server Blog
MySQL Shell(metadataに追加)とMySQL Router(metadataを読んだ時にこのタグがついてたら接続を切る)の組み合わせなので、MySQL Serverのバージョンの要件は知らないけれどMySQL ShellとMySQL Routerは8.0.21とそれ以降が必要
まずはフツーにMySQL Shellでサンドボックスを3つばかり作る。
$ mysqlsh -- dba deploySandboxInstance 3306 { --password="" }
$ mysqlsh …
[さらに読む]
日々の覚書: シングルプライマリーモードだろうとInnoDB Cluster内のデータをズラす方法
の続き。 件数をズラした上で OPTIMIZE TABLE
をかけるといくらでもセカンダリーが遅延した状況が作り出せる、というとことまでは良いとして。
node3のグループレプリケーションを一旦止める。
### node3
mysql> STOP GROUP_REPLICATION;
Query OK, 0 rows affected (4.49 sec)
またnode1から OPTIMIZE TABLE
を5発くらい叩き込んでついでに更新SQLを入れておく。
### node1
mysql> OPTIMIZE TABLE sbtest.sbtest1; -- これを5回くらい
mysql> INSERT INTO d1.t1 VALUES (4, 'four');
Query OK, 1 row affected (0.01 sec)
mysql> SELECT * FROM d1.t1; …
[さらに読む]
TL;DR
SET sql_log_bin = 0
で効くんだからびっくりだ
動作確認用にd1.t1テーブルを作って2行くらい入れておく。
### node1
mysql> CREATE DATABASE d1;
Query OK, 1 row affected (0.01 sec)
mysql> CREATE TABLE d1.t1 (num SERIAL, val VARCHAR(32));
Query OK, 0 rows affected (0.02 sec)
mysql> INSERT INTO d1.t1 VALUES (1, 'one');
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO d1.t1 VALUES (2, 'two');
Query OK, 1 row affected (0.00 sec)
プライマリーノードで sysbench
を使って100万行くらいのテーブルを作る。
### node1
$ sysbench --mysql-user=root oltp_common --table_size=1000000 prepare
sysbench 1.0.17 (using system LuaJIT 2.0.4)
Creating table 'sbtest1'...
Inserting 1000000 …
[さらに読む]
TL;DR
TL;DR
performance_schema.replication_group_members
mysql_innodb_cluster_metadata.instances
cluster.rescan
でグループレプリケーション側の情報を正としてInnoDB Clusterのメタデータを修正できる
以下、 performance_schema.replication_group_members
をメンバー、 mysql_innodb_cluster_metadata.instances
をメタデータと略するます。 メンバーにいるけどメタデータにいないパターン 再現方法
TL;DR
ALTER TABLE
中の後続のDDL,
DMLはプライマリーノードでブロックされない限りは ALTER TABLE
を追い越してコミットすることができる
ALTER TABLE
をリプレイ中にプライマリーで実行されたDDL, DMLはその対象に関わらず 「セカンダリーでリプレイ中の
ALTER TABLE
を追い越せない」
TL;DR
hostname-relay-bin-group_replication_applier*
というリレーログに保管される
RESET SLAVE
で消せる。
日々の覚書: MultiPrimaryModeのGroup Replication環境を崩壊させるテスト …
[さらに読む]TL;DR
取り敢えず構築してマルチマスターモードに変更したところ。
MySQL localhost:33060+ ssl JS > cluster.status()
{
"clusterName": "myfabric",
"defaultReplicaSet": {
"name": "default",
"ssl": "REQUIRED",
"status": "OK",
"statusText": "Cluster is ONLINE and can tolerate up to ONE failure.",
"topology": {
"node1:3306": {
…
[さらに読む]
TL;DR
SET PASSWORD = ''
を実行したらセカンダリーノードでもEXPIRE状態じゃなくなった
パスワードが空っぽの時だけ再現するので、現用環境で問題になる可能性は低い。 再現手順。
mysql> CREATE USER yoku0825 IDENTIFIED BY '';
Query OK, 0 rows affected (0.01 sec)
mysql> SELECT user, host, plugin, password_expired FROM mysql.user WHERE user = 'yoku0825';
+----------+------+-----------------------+------------------+
| user | host | plugin | password_expired | …
[さらに読む]