This repository now provides two separate Docker Compose setups:
mysql-8.0/docker-compose.ymlfor MySQL 8.0 (mysql/mysql-server:8.0)mysql-9.6/docker-compose.ymlfor MySQL 9.6 (mysql:9.6)
Prerequisite: Docker and Docker Compose installed.
-
Start the MySQL 9.6 cluster:
cd mysql-9.6 && docker compose up -d
-
Wait for all 3 nodes to show
Up (healthy):docker compose ps
-
Bootstrap the group (run once on node1):
docker compose exec node1 mysql -uroot -pmypass \ -e "SET @@GLOBAL.group_replication_bootstrap_group=ON;" \ -e "CREATE USER IF NOT EXISTS 'repl'@'%' IDENTIFIED BY 'replpass';" \ -e "GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';" \ -e "FLUSH PRIVILEGES;" \ -e "CHANGE REPLICATION SOURCE TO SOURCE_USER='repl', SOURCE_PASSWORD='replpass' FOR CHANNEL 'group_replication_recovery';" \ -e "START GROUP_REPLICATION;" \ -e "SET @@GLOBAL.group_replication_bootstrap_group=OFF;" \ -e "SELECT * FROM performance_schema.replication_group_members;"
-
Join node2 and node3 to the group:
for N in 2 3; do docker compose exec node$N mysql -uroot -pmypass \ -e "STOP GROUP_REPLICATION;" \ -e "RESET BINARY LOGS AND GTIDS;" \ -e "CHANGE REPLICATION SOURCE TO SOURCE_USER='repl', SOURCE_PASSWORD='replpass' FOR CHANNEL 'group_replication_recovery';" \ -e "START GROUP_REPLICATION;" done
-
Verify group membership:
docker compose exec node1 mysql -uroot -pmypass \ -e "SELECT MEMBER_HOST, MEMBER_STATE, MEMBER_ROLE FROM performance_schema.replication_group_members;"
-
Clean up when done:
docker compose down -v
Full step-by-step explanations for MySQL 8.0 and 9.6 are in the linked articles above.
P.S. Take a look at this tutorial and check how to setup MySQL Group Replication with Docker containers.