diff --git a/README.md b/README.md index 98927dc..de63a69 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,9 @@ Docker MySQL master-slave replication ======================== -MySQL master-slave replication with using Docker. +MySQL 8.0 master-slave replication with using Docker. + +Previous version based on MySQL 5.7 is available in [mysql5.7](https://github.com/vbabak/docker-mysql-master-slave/tree/mysql5.7) branch. ## Run @@ -10,19 +12,19 @@ and after starting setup replication. See commands inside ./build.sh. #### Create 2 MySQL containers with master-slave row-based replication -``` +```bash ./build.sh ``` #### Make changes to master -``` +```bash docker exec mysql_master sh -c "export MYSQL_PWD=111; mysql -u root mydb -e 'create table code(code int); insert into code values (100), (200)'" ``` #### Read changes from slave -``` +```bash docker exec mysql_slave sh -c "export MYSQL_PWD=111; mysql -u root mydb -e 'select * from code \G'" ``` @@ -30,7 +32,7 @@ docker exec mysql_slave sh -c "export MYSQL_PWD=111; mysql -u root mydb -e 'sele #### Check Logs -``` +```bash docker-compose logs ``` @@ -40,37 +42,37 @@ docker-compose logs #### Check running containers -``` +```bash docker-compose ps ``` #### Clean data dir -``` +```bash rm -rf ./master/data/* rm -rf ./slave/data/* ``` #### Run command inside "mysql_master" -``` +```bash docker exec mysql_master sh -c 'mysql -u root -p111 -e "SHOW MASTER STATUS \G"' ``` #### Run command inside "mysql_slave" -``` +```bash docker exec mysql_slave sh -c 'mysql -u root -p111 -e "SHOW SLAVE STATUS \G"' ``` #### Enter into "mysql_master" -``` +```bash docker exec -it mysql_master bash ``` #### Enter into "mysql_slave" -``` +```bash docker exec -it mysql_slave bash ``` diff --git a/build.sh b/build.sh index 24d023e..9ba0bf5 100755 --- a/build.sh +++ b/build.sh @@ -1,6 +1,6 @@ #!/bin/bash -docker-compose down +docker-compose down -v rm -rf ./master/data/* rm -rf ./slave/data/* docker-compose build @@ -12,7 +12,7 @@ do sleep 4 done -priv_stmt='GRANT REPLICATION SLAVE ON *.* TO "mydb_slave_user"@"%" IDENTIFIED BY "mydb_slave_pwd"; FLUSH PRIVILEGES;' +priv_stmt='CREATE USER "mydb_slave_user"@"%" IDENTIFIED BY "mydb_slave_pwd"; GRANT REPLICATION SLAVE ON *.* TO "mydb_slave_user"@"%"; FLUSH PRIVILEGES;' docker exec mysql_master sh -c "export MYSQL_PWD=111; mysql -u root -e '$priv_stmt'" until docker-compose exec mysql_slave sh -c 'export MYSQL_PWD=111; mysql -u root -e ";"' @@ -21,15 +21,11 @@ do sleep 4 done -docker-ip() { - docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$@" -} - MS_STATUS=`docker exec mysql_master sh -c 'export MYSQL_PWD=111; mysql -u root -e "SHOW MASTER STATUS"'` CURRENT_LOG=`echo $MS_STATUS | awk '{print $6}'` CURRENT_POS=`echo $MS_STATUS | awk '{print $7}'` -start_slave_stmt="CHANGE MASTER TO MASTER_HOST='$(docker-ip mysql_master)',MASTER_USER='mydb_slave_user',MASTER_PASSWORD='mydb_slave_pwd',MASTER_LOG_FILE='$CURRENT_LOG',MASTER_LOG_POS=$CURRENT_POS; START SLAVE;" +start_slave_stmt="CHANGE MASTER TO MASTER_HOST='mysql_master',MASTER_USER='mydb_slave_user',MASTER_PASSWORD='mydb_slave_pwd',MASTER_LOG_FILE='$CURRENT_LOG',MASTER_LOG_POS=$CURRENT_POS; START SLAVE;" start_slave_cmd='export MYSQL_PWD=111; mysql -u root -e "' start_slave_cmd+="$start_slave_stmt" start_slave_cmd+='"' diff --git a/docker-compose.yml b/docker-compose.yml index 2fd9485..2ff682e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,7 +1,7 @@ version: '3' services: mysql_master: - image: mysql:5.7 + image: mysql:8.0 env_file: - ./master/mysql_master.env container_name: "mysql_master" @@ -15,7 +15,7 @@ services: - overlay mysql_slave: - image: mysql:5.7 + image: mysql:8.0 env_file: - ./slave/mysql_slave.env container_name: "mysql_slave" diff --git a/master/conf/mysql.conf.cnf b/master/conf/mysql.conf.cnf index 4d44d2a..1173fa4 100644 --- a/master/conf/mysql.conf.cnf +++ b/master/conf/mysql.conf.cnf @@ -1,9 +1,9 @@ [mysqld] -skip-host-cache skip-name-resolve +default_authentication_plugin = mysql_native_password server-id = 1 -log_bin = /var/log/mysql/mysql-bin.log +log_bin = 1 binlog_format = ROW binlog_do_db = mydb diff --git a/slave/conf/mysql.conf.cnf b/slave/conf/mysql.conf.cnf index bac2ed2..782e1e5 100644 --- a/slave/conf/mysql.conf.cnf +++ b/slave/conf/mysql.conf.cnf @@ -1,9 +1,8 @@ [mysqld] -skip-host-cache skip-name-resolve +default_authentication_plugin = mysql_native_password -server-id=2 -relay-log = /var/log/mysql/mysql-relay-bin.log -log_bin = /var/log/mysql/mysql-bin.log +server-id = 2 +log_bin = 1 binlog_do_db = mydb