hi-server/mysql/configure-replica.sh
shanshanzhong 68c7b0a8ec
All checks were successful
Build docker and publish / build (20.15.1) (push) Successful in 5m52s
chore(deploy): add replication deployment assets
2026-04-28 05:22:48 -07:00

42 lines
1.5 KiB
Bash

#!/bin/sh
set -eu
: "${MYSQL_ROOT_PASSWORD:?MYSQL_ROOT_PASSWORD is required}"
: "${MASTER_MYSQL_HOST:?MASTER_MYSQL_HOST is required}"
: "${MYSQL_REPLICATION_USER:?MYSQL_REPLICATION_USER is required}"
: "${MYSQL_REPLICATION_PASSWORD:?MYSQL_REPLICATION_PASSWORD is required}"
MASTER_MYSQL_PORT="${MASTER_MYSQL_PORT:-3306}"
REPLICA_MYSQL_HOST="${REPLICA_MYSQL_HOST:-mysql-replica}"
REPLICA_MYSQL_PORT="${REPLICA_MYSQL_PORT:-3306}"
echo "Waiting for MySQL source ${MASTER_MYSQL_HOST}:${MASTER_MYSQL_PORT}..."
until mysqladmin ping -h"${MASTER_MYSQL_HOST}" -P"${MASTER_MYSQL_PORT}" -u"${MYSQL_REPLICATION_USER}" -p"${MYSQL_REPLICATION_PASSWORD}" --silent; do
sleep 2
done
echo "Waiting for local replica ${REPLICA_MYSQL_HOST}:${REPLICA_MYSQL_PORT}..."
until mysqladmin ping -h"${REPLICA_MYSQL_HOST}" -P"${REPLICA_MYSQL_PORT}" -uroot -p"${MYSQL_ROOT_PASSWORD}" --silent; do
sleep 2
done
echo "Configuring GTID replication..."
mysql -h"${REPLICA_MYSQL_HOST}" -P"${REPLICA_MYSQL_PORT}" -uroot -p"${MYSQL_ROOT_PASSWORD}" <<SQL
STOP REPLICA;
RESET REPLICA ALL;
SET GLOBAL super_read_only = OFF;
SET GLOBAL read_only = OFF;
CHANGE REPLICATION SOURCE TO
SOURCE_HOST='${MASTER_MYSQL_HOST}',
SOURCE_PORT=${MASTER_MYSQL_PORT},
SOURCE_USER='${MYSQL_REPLICATION_USER}',
SOURCE_PASSWORD='${MYSQL_REPLICATION_PASSWORD}',
SOURCE_AUTO_POSITION=1,
GET_SOURCE_PUBLIC_KEY=1;
START REPLICA;
SET GLOBAL read_only = ON;
SET GLOBAL super_read_only = ON;
SQL
mysql -h"${REPLICA_MYSQL_HOST}" -P"${REPLICA_MYSQL_PORT}" -uroot -p"${MYSQL_ROOT_PASSWORD}" -e "SHOW REPLICA STATUS\\G"