MySQL 8.4 LTS Master-Slave Enterprise Runbook
Live Dynamic Engine Configurator
Master & Slave Node Parameters & Resource Sizing
Edits update all commands, paths, and buffer pool parameters in real-time.
Primary Node (Master)
server_id = 1
11G
Secondary Node (Slave)
server_id = 2
11G
Phase 00: Pre-Installation & Capacity Planning
STEP 0.1
CRITICAL
Verify Disk Partitions, Mountpoints & Inode Capacity
Ensure block storage backing the datadir has adequate free space (>3x working dataset size) on both servers.
Run on Master (db-master.internal)
df -hT /var/lib/mysql mount | grep -E 'ext4|xfs'Get-CimInstance Win32_LogicalDisk | Where-Object {$_.DriveType -eq 3} | Select-Object DeviceID, @{Name="FreeSpace(GB)";Expression={"{0:N2}" -f ($_.FreeSpace/1GB)}}
Run on Slave (db-slave.internal)
df -hT /var/lib/mysql mount | grep -E 'ext4|xfs'Get-CimInstance Win32_LogicalDisk | Where-Object {$_.DriveType -eq 3} | Select-Object DeviceID, @{Name="FreeSpace(GB)";Expression={"{0:N2}" -f ($_.FreeSpace/1GB)}}
STEP 0.2
HIGH
Check Network Ports & Firewall Reachability
Verify bidirectional TCP communication over port 3306 between both nodes.
Run on Master (db-master.internal)
ping -c 3 192.168.10.51 nc -zv 192.168.10.51 3306Test-NetConnection -ComputerName 192.168.10.51 -Port 3306
Run on Slave (db-slave.internal)
ping -c 3 192.168.10.50 nc -zv 192.168.10.50 3306Test-NetConnection -ComputerName 192.168.10.50 -Port 3306
Phase 01: OS Kernel, Storage & Security Preparation
STEP 1.1
HIGH
Disable Transparent Huge Pages (Linux) / Verify Lock Pages Privilege (Windows)
Prevent memory fragmentation on Linux or configure large page privileges on Windows.
Run on Master (db-master.internal)
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/enabled echo never | sudo tee /sys/kernel/mm/transparent_hugepage/defragWrite-Host "Verify SeLockMemoryPrivilege for MySQL service account via secpol.msc"
Run on Slave (db-slave.internal)
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/enabled echo never | sudo tee /sys/kernel/mm/transparent_hugepage/defragWrite-Host "Verify SeLockMemoryPrivilege for MySQL service account via secpol.msc"
STEP 1.2
HIGH
Configure Firewall Rules for Port 3306 & 33060
Open TCP ports in OS firewall across both servers.
Run on Master (db-master.internal)
sudo firewall-cmd --add-port=3306/tcp --permanent && sudo firewall-cmd --reloadsudo ufw allow 3306/tcp && sudo ufw status verboseNew-NetFirewallRule -DisplayName "MySQL 8.4 Port 3306" -Direction Inbound -Protocol TCP -LocalPort 3306 -Action Allow
Run on Slave (db-slave.internal)
sudo firewall-cmd --add-port=3306/tcp --permanent && sudo firewall-cmd --reloadsudo ufw allow 3306/tcp && sudo ufw status verboseNew-NetFirewallRule -DisplayName "MySQL 8.4 Port 3306" -Direction Inbound -Protocol TCP -LocalPort 3306 -Action Allow
Phase 02: MySQL 8.4 LTS Engine Installation
STEP 2.1
CRITICAL
Deploy Binaries & Initialize Datadir
Extract archive binaries or packages and initialize database instance using custom configured Base Paths and Data Directories.
Run on Master (db-master.internal)
sudo groupadd mysql && sudo useradd -r -g mysql -s /bin/false mysql sudo mkdir -p /usr/local/mysql /var/lib/mysql sudo chown -R mysql:mysql /usr/local/mysql /var/lib/mysql cd /tmp && wget https://cdn.mysql.com/Downloads/MySQL-8.4/mysql-8.4.3-linux-glibc228-x86_64.tar.xz sudo tar -xf mysql-8.4.3-linux-glibc228-x86_64.tar.xz -C /usr/local/mysql --strip-components=1 sudo /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/var/lib/mysqlExpand-Archive -Path "C:\Downloads\mysql-8.4.3-winx64.zip" -DestinationPath "C:\Program Files\MySQL" New-Item -ItemType Directory -Force -Path "C:\ProgramData\MySQL\Data" & "C:\Program Files\MySQL\bin\mysqld.exe" --initialize-insecure --basedir="C:\Program Files\MySQL" --datadir="C:\ProgramData\MySQL\Data"
Run on Slave (db-slave.internal)
sudo groupadd mysql && sudo useradd -r -g mysql -s /bin/false mysql sudo mkdir -p /usr/local/mysql /var/lib/mysql sudo chown -R mysql:mysql /usr/local/mysql /var/lib/mysql cd /tmp && wget https://cdn.mysql.com/Downloads/MySQL-8.4/mysql-8.4.3-linux-glibc228-x86_64.tar.xz sudo tar -xf mysql-8.4.3-linux-glibc228-x86_64.tar.xz -C /usr/local/mysql --strip-components=1 sudo /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/var/lib/mysqlExpand-Archive -Path "C:\Downloads\mysql-8.4.3-winx64.zip" -DestinationPath "C:\Program Files\MySQL" New-Item -ItemType Directory -Force -Path "C:\ProgramData\MySQL\Data" & "C:\Program Files\MySQL\bin\mysqld.exe" --initialize-insecure --basedir="C:\Program Files\MySQL" --datadir="C:\ProgramData\MySQL\Data"
Phase 03: Master-Slave Replication Setup
STEP 3.1
Deploy Server Configuration Profiles (
CRITICAL
Deploy Server Configuration Profiles (my.cnf / my.ini)
Apply unique server_id, custom basedir/datadir paths, and calculated buffer pool sizes.
Master Config Profile
sudo tee /etc/my.cnf > /dev/null << 'EOF' [mysqld] server-id = 1 basedir = /usr/local/mysql datadir = /var/lib/mysql bind-address = 0.0.0.0 log-bin = mysql-bin binlog_format = ROW gtid_mode = ON enforce_gtid_consistency = ON innodb_buffer_pool_size = 11G EOF$cfg = @" [mysqld] server-id = 1 basedir = C:\Program Files\MySQL datadir = C:\ProgramData\MySQL\Data bind-address = 0.0.0.0 log-bin = mysql-bin binlog_format = ROW gtid_mode = ON enforce_gtid_consistency = ON innodb_buffer_pool_size = 11G "@ Set-Content -Path "C:\ProgramData\MySQL\my.ini" -Value $cfg -Encoding ASCII
Slave Config Profile
sudo tee /etc/my.cnf > /dev/null << 'EOF' [mysqld] server-id = 2 basedir = /usr/local/mysql datadir = /var/lib/mysql bind-address = 0.0.0.0 log-bin = mysql-bin relay-log = slave-relay-bin binlog_format = ROW gtid_mode = ON enforce_gtid_consistency = ON read_only = 1 innodb_buffer_pool_size = 11G EOF$cfg = @" [mysqld] server-id = 2 basedir = C:\Program Files\MySQL datadir = C:\ProgramData\MySQL\Data bind-address = 0.0.0.0 log-bin = mysql-bin relay-log = slave-relay-bin binlog_format = ROW gtid_mode = ON enforce_gtid_consistency = ON read_only = 1 innodb_buffer_pool_size = 11G "@ Set-Content -Path "C:\ProgramData\MySQL\my.ini" -Value $cfg -Encoding ASCII
STEP 3.2
CRITICAL
Create Replication User & Start Replication
Execute replication privileges on master and configure connection on slave.
Run on Master (db-master.internal)
CREATE USER 'repl_user'@'192.168.10.51' IDENTIFIED WITH caching_sha2_password BY 'StrongReplPass#2026!';
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'192.168.10.51';
FLUSH PRIVILEGES;
Run on Slave (db-slave.internal)
CHANGE MASTER TO
MASTER_HOST='192.168.10.50',
MASTER_USER='repl_user',
MASTER_PASSWORD='StrongReplPass#2026!',
MASTER_AUTO_POSITION=1;
START SLAVE;
SHOW SLAVE STATUS\G

No comments:
Post a Comment