chore(deploy): add replication deployment assets
Build docker and publish / build (20.15.1) (push) Successful in 5m52s

This commit is contained in:
2026-04-28 05:22:48 -07:00
parent 0ec0e2b9d2
commit 68c7b0a8ec
12 changed files with 1077 additions and 9 deletions
+5
View File
@@ -0,0 +1,5 @@
[client]
host=mysql
port=3306
user=root
password=CHANGE_ME_TO_MYSQL_ROOT_PASSWORD
+41
View File
@@ -0,0 +1,41 @@
#!/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"
+14
View File
@@ -0,0 +1,14 @@
#!/bin/sh
set -eu
: "${MYSQL_ROOT_PASSWORD:?MYSQL_ROOT_PASSWORD is required}"
: "${MYSQL_REPLICATION_USER:?MYSQL_REPLICATION_USER is required}"
: "${MYSQL_REPLICATION_PASSWORD:?MYSQL_REPLICATION_PASSWORD is required}"
mysql_note "Creating MySQL replication user '${MYSQL_REPLICATION_USER}'"
mysql --protocol=socket -uroot -p"${MYSQL_ROOT_PASSWORD}" <<SQL
CREATE USER IF NOT EXISTS '${MYSQL_REPLICATION_USER}'@'%' IDENTIFIED WITH mysql_native_password BY '${MYSQL_REPLICATION_PASSWORD}';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO '${MYSQL_REPLICATION_USER}'@'%';
FLUSH PRIVILEGES;
SQL
+9
View File
@@ -0,0 +1,9 @@
[mysqld]
server-id=1
log-bin=mysql-bin
binlog-format=ROW
gtid-mode=ON
enforce-gtid-consistency=ON
log-replica-updates=ON
binlog-expire-logs-seconds=604800
relay-log-recovery=ON
+10
View File
@@ -0,0 +1,10 @@
[mysqld]
server-id=2
relay-log=mysql-relay-bin
read-only=ON
super-read-only=ON
gtid-mode=ON
enforce-gtid-consistency=ON
log-replica-updates=ON
relay-log-recovery=ON
skip-replica-start=ON