-
Notifications
You must be signed in to change notification settings - Fork 18
Expand file tree
/
Copy pathstart_pxc_package.sh
More file actions
116 lines (98 loc) · 2.89 KB
/
start_pxc_package.sh
File metadata and controls
116 lines (98 loc) · 2.89 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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#!/bin/bash
set -e
# Detect OS family to set Galera provider path
if [[ -d /usr/lib64/galera4 ]]; then
galera_provider="/usr/lib64/galera4/libgalera_smm.so"
elif [[ -d /usr/lib/galera4 ]]; then
galera_provider="/usr/lib/galera4/libgalera_smm.so"
else
echo "❌ Could not detect Galera provider path (/usr/lib*/galera4)."
exit 1
fi
# Node-specific ports and directories
declare -A nodes=(
[1]=23100
[2]=23200
[3]=23300
)
# Galera listen ports per node
declare -A listen_ports=(
[1]=23108
[2]=23208
[3]=23308
)
cluster_address="gcomm://127.0.0.1:23108,127.0.0.1:23208,127.0.0.1:23308"
# Create mysql group/user if not present
getent group mysql >/dev/null || sudo groupadd mysql
getent passwd mysql >/dev/null || sudo useradd -r -g mysql -s /sbin/nologin mysql
# Step 1: Prepare directories and config files
for i in 1 2 3; do
datadir="/var/lib/mysql$i"
cnf="/etc/percona${i}.cnf"
socket="$datadir/mysql.sock"
pidfile="$datadir/mysql.pid"
port="${nodes[$i]}"
listen_port="${listen_ports[$i]}"
server_id=$((10 + i))
echo "🔧 Setting up MySQL node $i..."
sudo mkdir -p "$datadir"
sudo chown -R mysql:mysql "$datadir"
sudo tee "$cnf" > /dev/null <<EOF
[mysqld]
datadir=$datadir
socket=$socket
pid-file=$pidfile
log-error=$datadir/error.log
port=$port
server_id=$server_id
# Galera/PXC settings
wsrep_provider=$galera_provider
wsrep_sst_method=xtrabackup-v2
wsrep_cluster_address=$cluster_address
wsrep_provider_options=gmcast.listen_addr=tcp://127.0.0.1:$listen_port
wsrep_node_address=127.0.0.1
wsrep_node_incoming_address=127.0.0.1
wsrep-debug=1
innodb_file_per_table
innodb_autoinc_lock_mode=2
innodb_flush_log_at_trx_commit=0
core-file
log-output=none
log_error_verbosity=3
pxc_encrypt_cluster_traffic=OFF
gtid_mode=ON
enforce_gtid_consistency=ON
log_slave_updates=ON
log_bin=binlog
binlog_format=ROW
pxc_maint_transition_period=1
EOF
done
# Step 2: Initialize data directories
for i in 1 2 3; do
echo "🧹 Initializing MySQL node $i..."
sudo mysqld --defaults-file="/etc/percona${i}.cnf" --initialize-insecure --user=mysql
done
# Step 3: Bootstrap first node
echo "🚀 Bootstrapping Node 1..."
sudo mysqld --defaults-file="/etc/percona1.cnf" --user=mysql --wsrep-new-cluster &
sleep 10
# Step 4: Start node 2 and 3
echo "🔄 Starting Node 2..."
sudo mysqld --defaults-file="/etc/percona2.cnf" --user=mysql &
sleep 5
echo "🔄 Starting Node 3..."
sudo mysqld --defaults-file="/etc/percona3.cnf" --user=mysql &
sleep 10
# Step 5: Verify cluster status
for i in 1 2 3; do
echo "🔍 Checking cluster size on Node $i..."
mysql -u root --socket="/var/lib/mysql$i/mysql.sock" -e "SHOW STATUS LIKE 'wsrep_cluster_size';"
done
echo -e "\n✅ 3-node PXC cluster setup complete.\n"
# Print connection info
echo "🔗 You can connect to each MySQL node using the following commands:"
for i in 1 2 3; do
echo "Node $i: mysql -u root --socket=/var/lib/mysql${i}/mysql.sock"
done
echo