Bootstrap a Percona XtraDB Cluster on RHEL 9
Prerequisites
Three servers with PXC installed:
- Node 1: 192.168.1.10
- Node 2: 192.168.1.11
- Node 3: 192.168.1.12
Step 1 – Configure Node 1 (/etc/my.cnf)
[mysqld]
server-id = 1
datadir = /var/lib/mysql
socket = /var/lib/mysql/mysql.sock
# Galera settings
wsrep_on = ON
wsrep_provider = /usr/lib64/galera4/libgalera_smm.so
# Cluster name (same on all nodes)
wsrep_cluster_name = "pxc_cluster"
# All cluster node addresses
wsrep_cluster_address= "gcomm://192.168.1.10,192.168.1.11,192.168.1.12"
# This node's address
wsrep_node_address = "192.168.1.10"
wsrep_node_name = "node1"
# SST (State Snapshot Transfer) method
wsrep_sst_method = xtrabackup-v2
wsrep_sst_auth = sstuser:SSTpass!
# InnoDB settings
innodb_autoinc_lock_mode = 2
default_storage_engine = InnoDB
innodb_locks_unsafe_for_binlog = 1
# Binary log
log_bin = binlog
binlog_format = ROW
Step 2 – Open firewall ports on all nodes
# RHEL/AlmaLinux:
firewall-cmd --permanent --add-port=3306/tcp # MySQL
firewall-cmd --permanent --add-port=4444/tcp # SST
firewall-cmd --permanent --add-port=4567/tcp # Galera replication
firewall-cmd --permanent --add-port=4568/tcp # IST
firewall-cmd --reload
# Ubuntu/Debian:
ufw allow 3306/tcp
ufw allow 4444/tcp
ufw allow 4567/tcp
ufw allow 4568/tcp
Step 3 – Bootstrap Node 1
systemctl stop mysql
systemctl start mysql@bootstrap
Or (older PXC):
mysqld_bootstrap
Step 4 – Create the SST user
CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 'SSTpass!';
GRANT PROCESS, RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'sstuser'@'localhost';
FLUSH PRIVILEGES;
Step 5 – Verify cluster status
SHOW STATUS LIKE 'wsrep_%';
-- wsrep_cluster_size should be 1 (will increase as nodes join)
-- wsrep_local_state_comment: Synced