-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmysql-node-manager.sh
More file actions
54 lines (43 loc) · 1.74 KB
/
mysql-node-manager.sh
File metadata and controls
54 lines (43 loc) · 1.74 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#!/bin/bash
TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`
MYSQL_ERROR=$(mysql -Bse "SELECT 1;" 2>&1)
if [[ "$MYSQL_ERROR" =~ "ERROR 1045" ]]
then
echo "[$TIMESTAMP] Access to MySQL server denied. Check credentials in /home/mysql-node-manager/my.cnf" >> /var/log/mysql-node-manager/mysql-node-manager.log
exit 1
fi
MYSQL_AVAILABLE=$((`mysql -Bse "SELECT 1;"`))
SETUP_TYPE=2
SUPER_READ_ONLY=1
# SETUP_TYPE = 1 means its MySQL Group Replication and we read SUPER_READ_ONLY
# SETUP_TYPE = 2 means its Galera Cluster and we read wsrep_ready, wsrep_cluster_size and wsrep_cluster_status
if [ $SETUP_TYPE -eq 1 ]
then
SUPER_READ_ONLY=$((`mysql -Bse "SELECT @@super_read_only;"`))
else
WSREP_READY=$(mysql -Bse "SHOW STATUS LIKE 'wsrep_ready';" | awk '{print $2}')
WSREP_PRIMARY=$(mysql -Bse "SHOW STATUS LIKE 'wsrep_cluster_status';" | awk '{print $2}')
if [ "$WSREP_READY" = "ON" ] && [ "$WSREP_PRIMARY" = "Primary" ]
then
SUPER_READ_ONLY=0
fi
fi
# Check if rule already exists
sudo iptables -t nat -C PREROUTING -p tcp -m tcp --dport 3307 -j REDIRECT --to-ports 3306
RULE_NOT_EXISTS=$?
if [ $SUPER_READ_ONLY -eq 1 ] || [ $MYSQL_AVAILABLE -eq 0 ]
then
if [ $RULE_NOT_EXISTS -eq 0 ]
then
# Add if not
sudo iptables -t nat -D PREROUTING -p tcp -m tcp --dport 3307 -j REDIRECT --to-ports 3306
echo "[$TIMESTAMP] This node lost cluster connectivity or goes down. Remove redirect rule from iptables." >> /var/log/mysql-node-manager/mysql-node-manager.log
fi
else
if [ $RULE_NOT_EXISTS -eq 1 ]
then
# Add if not
sudo iptables -t nat -A PREROUTING -p tcp -m tcp --dport 3307 -j REDIRECT --to-ports 3306
echo "[$TIMESTAMP] This node recover cluster connectivity. Add redirect rule to iptables." >> /var/log/mysql-node-manager/mysql-node-manager.log
fi
fi