1#!/bin/sh -eu 2 3# This is a simple example of wsrep notification script (wsrep_notify_cmd). 4# It will create 'wsrep' schema and two tables in it: 'membeship' and 'status' 5# and fill them on every membership or node status change. 6# 7# Edit parameters below to specify the address and login to server. 8 9USER=root 10PSWD=rootpass 11HOST=127.0.0.1 12PORT=3306 13 14SCHEMA="wsrep" 15MEMB_TABLE="$SCHEMA.membership" 16STATUS_TABLE="$SCHEMA.status" 17 18BEGIN=" 19SET wsrep_on=0; 20DROP SCHEMA IF EXISTS $SCHEMA; CREATE SCHEMA $SCHEMA; 21CREATE TABLE $MEMB_TABLE ( 22 idx INT UNIQUE PRIMARY KEY, 23 uuid CHAR(40) UNIQUE, /* node UUID */ 24 name VARCHAR(32), /* node name */ 25 addr VARCHAR(256) /* node address */ 26) ENGINE=MEMORY; 27CREATE TABLE $STATUS_TABLE ( 28 size INT, /* component size */ 29 idx INT, /* this node index */ 30 status CHAR(16), /* this node status */ 31 uuid CHAR(40), /* cluster UUID */ 32 prim BOOLEAN /* if component is primary */ 33) ENGINE=MEMORY; 34BEGIN; 35DELETE FROM $MEMB_TABLE; 36DELETE FROM $STATUS_TABLE; 37" 38END="COMMIT;" 39 40configuration_change() 41{ 42 echo "$BEGIN;" 43 44 local idx=0 45 46 for NODE in $(echo $MEMBERS | sed s/,/\ /g) 47 do 48 echo "INSERT INTO $MEMB_TABLE VALUES ( $idx, " 49 # Don't forget to properly quote string values 50 echo "'$NODE'" | sed s/\\//\',\'/g 51 echo ");" 52 idx=$(( $idx + 1 )) 53 done 54 55 echo "INSERT INTO $STATUS_TABLE VALUES($idx, $INDEX, '$STATUS', '$CLUSTER_UUID', $PRIMARY);" 56 57 echo "$END" 58} 59 60status_update() 61{ 62 echo "SET wsrep_on=0; BEGIN; UPDATE $STATUS_TABLE SET status='$STATUS'; COMMIT;" 63} 64 65COM=status_update # not a configuration change by default 66 67while [ $# -gt 0 ] 68do 69 case $1 in 70 --status) 71 STATUS=$2 72 shift 73 ;; 74 --uuid) 75 CLUSTER_UUID=$2 76 shift 77 ;; 78 --primary) 79 [ "$2" = "yes" ] && PRIMARY="1" || PRIMARY="0" 80 COM=configuration_change 81 shift 82 ;; 83 --index) 84 INDEX=$2 85 shift 86 ;; 87 --members) 88 MEMBERS=$2 89 shift 90 ;; 91 esac 92 shift 93done 94 95# Undefined means node is shutting down 96if [ "$STATUS" != "Undefined" ] 97then 98 $COM | mysql -B -u$USER -p$PSWD -h$HOST -P$PORT 99fi 100 101exit 0 102# 103