mirror of
				https://github.com/MariaDB/server.git
				synced 2025-11-03 14:33:32 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			100 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/bin/sh -eu
 | 
						|
 | 
						|
# This is a simple example of wsrep notification script (wsrep_notify_cmd).
 | 
						|
# It will create 'wsrep' schema and two tables in it: 'membeship' and 'status'
 | 
						|
# and fill them on every membership or node status change.
 | 
						|
#
 | 
						|
# Edit parameters below to specify the address and login to server.
 | 
						|
 | 
						|
USER=root
 | 
						|
HOST=127.0.0.1
 | 
						|
PORT=$NODE_MYPORT_1
 | 
						|
 | 
						|
SCHEMA="mtr_wsrep_notify"
 | 
						|
MEMB_TABLE="$SCHEMA.membership"
 | 
						|
STATUS_TABLE="$SCHEMA.status"
 | 
						|
 | 
						|
BEGIN="
 | 
						|
SET wsrep_on=0;
 | 
						|
CREATE SCHEMA IF NOT EXISTS $SCHEMA;
 | 
						|
CREATE TABLE IF NOT EXISTS $MEMB_TABLE (
 | 
						|
    idx  INT,
 | 
						|
    uuid CHAR(40), /* node UUID */
 | 
						|
    name VARCHAR(32),     /* node name */
 | 
						|
    addr VARCHAR(256)     /* node address */
 | 
						|
) ENGINE=MEMORY;
 | 
						|
CREATE TABLE IF NOT EXISTS $STATUS_TABLE (
 | 
						|
    size   INT,      /* component size   */
 | 
						|
    idx    INT,      /* this node index  */
 | 
						|
    status CHAR(16), /* this node status */
 | 
						|
    uuid   CHAR(40), /* cluster UUID */
 | 
						|
    prim   BOOLEAN   /* if component is primary */
 | 
						|
) ENGINE=MEMORY;
 | 
						|
BEGIN;
 | 
						|
"
 | 
						|
END="COMMIT;"
 | 
						|
 | 
						|
configuration_change()
 | 
						|
{
 | 
						|
    echo "$BEGIN;"
 | 
						|
 | 
						|
    local idx=0
 | 
						|
 | 
						|
    for NODE in $(echo $MEMBERS | sed s/,/\ /g)
 | 
						|
    do
 | 
						|
        echo "INSERT INTO $MEMB_TABLE VALUES ( $idx, "
 | 
						|
        # Don't forget to properly quote string values
 | 
						|
        echo "'$NODE'" | sed  s/\\//\',\'/g
 | 
						|
        echo ");"
 | 
						|
        idx=$(( $idx + 1 ))
 | 
						|
    done
 | 
						|
 | 
						|
    echo "INSERT INTO $STATUS_TABLE VALUES($idx, $INDEX, '$STATUS', '$CLUSTER_UUID', $PRIMARY);"
 | 
						|
 | 
						|
    echo "$END"
 | 
						|
}
 | 
						|
 | 
						|
status_update()
 | 
						|
{
 | 
						|
    echo "SET wsrep_on=0; BEGIN; UPDATE $STATUS_TABLE SET status='$STATUS'; COMMIT;"
 | 
						|
}
 | 
						|
 | 
						|
COM=status_update # not a configuration change by default
 | 
						|
 | 
						|
while [ $# -gt 0 ]
 | 
						|
do
 | 
						|
    case $1 in
 | 
						|
    --status)
 | 
						|
        STATUS=$2
 | 
						|
        shift
 | 
						|
        ;;
 | 
						|
    --uuid)
 | 
						|
        CLUSTER_UUID=$2
 | 
						|
        shift
 | 
						|
        ;;
 | 
						|
    --primary)
 | 
						|
        [ "$2" = "yes" ] && PRIMARY="1" || PRIMARY="0"
 | 
						|
        COM=configuration_change
 | 
						|
        shift
 | 
						|
        ;;
 | 
						|
    --index)
 | 
						|
        INDEX=$2
 | 
						|
        shift
 | 
						|
        ;;
 | 
						|
    --members)
 | 
						|
        MEMBERS=$2
 | 
						|
        shift
 | 
						|
        ;;
 | 
						|
    esac
 | 
						|
    shift
 | 
						|
done
 | 
						|
 | 
						|
# Undefined means node is shutting down
 | 
						|
if [ "$STATUS" != "Undefined" ]
 | 
						|
then
 | 
						|
    $COM | mysql -B -u$USER -h$HOST -P$PORT
 | 
						|
fi
 | 
						|
 | 
						|
exit 0
 | 
						|
#
 |