Skip to content

Instantly share code, notes, and snippets.

@DevoKun
Created November 21, 2014 02:47
Show Gist options
  • Save DevoKun/2d32956ec841ac7f90c2 to your computer and use it in GitHub Desktop.
Save DevoKun/2d32956ec841ac7f90c2 to your computer and use it in GitHub Desktop.
MySQL Docker Container Master/Slave Replication

MySQL OFFICIAL REPO

Pull MySQL Container

sudo docker pull mysql:latest

Launch MySQL [master] Server

sudo docker run --name mysql-master -e MYSQL_ROOT_PASSWORD=mypassword -e MYSQL_USER=myuser -e MYSQL_PASSWORD=mypassword -e MYSQL_DATABASE=mydb --rm mysql

Connect to MySQL Server via inter-container link

As $MYSQL_USER

sudo docker run -it --link mysql-master:mymaster --rm mysql sh -c 'mysql --host=mymaster --user=myuser --password=mypassword mydb'

As root

sudo docker run -it --link mysql-master:mymaster --rm mysql sh -c 'mysql --host=mymaster --user=root --password=mypassword mydb'

Launch MySQL [slave] Server

sudo docker run --name mysql-slave -e MYSQL_ROOT_PASSWORD=mypassword -e MYSQL_USER=myuser -e MYSQL_PASSWORD=mypassword -e MYSQL_DATABASE=mydb --rm mysql

Start Replication between MySQL Master and Slave

mkdir sql
cat << EOF > sql/setup_replication.sql
CREATE USER slave@'%' IDENTIFIED BY 'mypassword';
GRANT SELECT, PROCESS, FILE, SUPER, REPLICATION CLIENT, REPLICATION SLAVE, RELOAD ON *.* TO slave@'%';
Flush Privileges; 
CHANGE MASTER TO
MASTER_HOST='mymaster',
MASTER_USER='slave',
MASTER_PASSWORD='mypassword';
START slave;
show slave status\\G
EOF

sudo docker run -it --link mysql-master:mymaster -v $(pwd)/sql:/sql --rm mysql sh -c 'mysql --host=mymaster --user=root --password=mypassword mydb < /sql/setup_replication.sql'
sudo docker run -it --link mysql-master:mymaster -v $(pwd)/sql:/sql --rm mysql sh -c 'mysql --host=mymaster --user=root --password=mypassword mydb < /sql/setup_replication.sql'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment