41から始めました

文字通り41歳から始めたブログです。DB(MySQL)を使ってお仕事してるので、DB周りの話を中心に最近始めたこととかをTwitterのノリで書いています。なお、本サイトにおいて示されている見解は私個人の見解であり、所属団体や組織を代表するものではありません。

cluster.status()で特定の情報だけ抜き出したい人へ

この記事はMySQL Advent Calendar 2023 8日目の記事です。

今回もMySQL Shellの小ネタです。

cluster.status()でレプリカの遅延情報だけ取得して検知させたい

MySQL Shellのcluster.status()、JSON形式だから特定の情報「だけ」を抜き出せないかなー?という人向け

例)

 MySQL  127.0.0.1:27536 ssl  JS > cluster.status()
{
    "clusterName": "testCluster",
    "defaultReplicaSet": {
        "name": "default",
        "primary": "127.0.0.1:27536",
        "ssl": "REQUIRED",
        "status": "OK",
        "statusText": "Cluster is ONLINE and can tolerate up to ONE failure.",
        "topology": {
            "127.0.0.1:27536": {
                "address": "127.0.0.1:27536",
                "memberRole": "PRIMARY",
                "mode": "R/W",
                "readReplicas": {},
                "replicationLag": "applier_queue_applied",
                "role": "HA",
                "status": "ONLINE",
                "version": "8.0.35"
            },
            "127.0.0.1:27537": {
                "address": "127.0.0.1:27537",
                "memberRole": "SECONDARY",
                "mode": "R/O",
                "readReplicas": {},
                "replicationLag": "applier_queue_applied",
                "role": "HA",
                "status": "ONLINE",
                "version": "8.0.35"
            },
            "127.0.0.1:27538": {
                "address": "127.0.0.1:27538",
                "memberRole": "SECONDARY",
                "mode": "R/O",
                "readReplicas": {},
                "replicationLag": "applier_queue_applied",
                "role": "HA",
                "status": "ONLINE",
                "version": "8.0.35"
            }
        },
        "topologyMode": "Single-Primary"
    },
    "groupInformationSourceMember": "127.0.0.1:27536"
}

レプリカのreplicationLagを抜きたい場合こうする

 MySQL  127.0.0.1:27536 ssl  JS > cluster.status()["defaultReplicaSet"]["topology"]["127.0.0.1:27537"]["replicationLag"]
applier_queue_applied
 MySQL  127.0.0.1:27536 ssl  JS > cluster.status()["defaultReplicaSet"]["topology"]["127.0.0.1:27538"]["replicationLag"]
applier_queue_applied

はい、とれました。

とはいえ…

バッチでゴリゴリぶん回したいとかになってくるとjqとか使うのが良いでしょうね。

今回のはちょっと見てみたいけど、不要な情報見たくない時どーぞ、って感じの話でした。

明日のイルカのお友達は

いつも僕が色々とお世話になってる@meijik さんの「最新のSQL標準(SQL:2023)とFirebird/MySQL/PostgreSQL」です。お楽しみに!