diff --git a/packages/mysql/_dev/deploy/docker/replica/conf/mysql.conf.cnf b/packages/mysql/_dev/deploy/docker/replica/conf/mysql.conf.cnf index bfee1aa66d3..7ba935cbfc4 100644 --- a/packages/mysql/_dev/deploy/docker/replica/conf/mysql.conf.cnf +++ b/packages/mysql/_dev/deploy/docker/replica/conf/mysql.conf.cnf @@ -10,4 +10,4 @@ binlog_do_db = mysql gtid_mode = ON enforce_gtid_consistency = ON log_slave_updates = ON -tls_version = TLSv1.2,TLSv1.3 \ No newline at end of file +tls_version = TLSv1.2,TLSv1.3 diff --git a/packages/mysql/_dev/deploy/docker/replica/entrypoint-replica.sh b/packages/mysql/_dev/deploy/docker/replica/entrypoint-replica.sh index cd79a35ba47..1b9ccf8c973 100644 --- a/packages/mysql/_dev/deploy/docker/replica/entrypoint-replica.sh +++ b/packages/mysql/_dev/deploy/docker/replica/entrypoint-replica.sh @@ -16,12 +16,27 @@ echo "MySQL slave is ready." # Configure the slave to start replication echo "Configuring slave to start replication..." + # Wait for the master to be ready and for its logs to be available MASTER_LOGS_AVAILABLE=false for i in {1..30}; do - MS_STATUS=$(mysql -h "$MYSQL_MASTER_HOST" -P 3306 -u root -p"$MYSQL_ROOT_PASSWORD" -e "SHOW MASTER STATUS;") + echo "Attempt $i: Checking master status..." + MS_STATUS=$(mysql -h "$MYSQL_MASTER_HOST" -P 3306 -u root -p"$MYSQL_ROOT_PASSWORD" -e "SHOW MASTER STATUS;" 2>/dev/null || echo "FAILED") + + if [ "$MS_STATUS" = "FAILED" ]; then + echo "Failed to connect to master, retrying..." + sleep 2 + continue + fi + + echo "Master status response: $MS_STATUS" + CURRENT_LOG=$(echo "$MS_STATUS" | awk 'NR==2 {print $1}') CURRENT_POS=$(echo "$MS_STATUS" | awk 'NR==2 {print $2}') + + echo "Debug: CURRENT_LOG = '$CURRENT_LOG'" + echo "Debug: CURRENT_POS = '$CURRENT_POS'" + if [ -n "$CURRENT_LOG" ] && [ -n "$CURRENT_POS" ]; then MASTER_LOGS_AVAILABLE=true break @@ -30,34 +45,53 @@ for i in {1..30}; do sleep 2 fi done - if [ "$MASTER_LOGS_AVAILABLE" = false ]; then - echo "Failed to obtain master log file and position." - exit 1 + echo "Failed to obtain master log file and position." + exit 1 fi -echo "Master status obtained. Current log: $CURRENT_LOG, Current position: $CURRENT_POS." +echo "Master status obtained. Current log: '$CURRENT_LOG', Current position: '$CURRENT_POS'." + +# Validate the values +if [ -z "$CURRENT_LOG" ] || [ -z "$CURRENT_POS" ]; then + echo "Error: Empty log file or position values" + exit 1 +fi # Reset the slave to ensure a clean replication setup echo "Resetting the slave..." -mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e "STOP SLAVE; RESET SLAVE ALL;" +mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e "STOP SLAVE; RESET SLAVE ALL;" 2>/dev/null || echo "Slave was not running" -# Prepare the CHANGE MASTER TO command -start_slave_stmt="CHANGE MASTER TO MASTER_HOST='$MYSQL_MASTER_HOST', MASTER_USER='mydb_replica_user', MASTER_PASSWORD='mydb_replica_pwd', MASTER_LOG_FILE='$CURRENT_LOG', MASTER_LOG_POS=$CURRENT_POS; START SLAVE;" -# Display the command that will be executed -echo "Running the following command to start replication: $start_slave_stmt" +mysql -uroot -p"$MYSQL_ROOT_PASSWORD" <