Setup with mysql 8.0

This commit is contained in:
Vladyslav Babak 2022-08-25 19:07:34 +02:00
parent c1e40ab10f
commit 2d14f80243
5 changed files with 23 additions and 26 deletions

View File

@ -1,7 +1,9 @@
Docker MySQL master-slave replication 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 ## 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 #### Create 2 MySQL containers with master-slave row-based replication
``` ```bash
./build.sh ./build.sh
``` ```
#### Make changes to master #### 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)'" 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 #### Read changes from slave
``` ```bash
docker exec mysql_slave sh -c "export MYSQL_PWD=111; mysql -u root mydb -e 'select * from code \G'" 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 #### Check Logs
``` ```bash
docker-compose logs docker-compose logs
``` ```
@ -40,37 +42,37 @@ docker-compose logs
#### Check running containers #### Check running containers
``` ```bash
docker-compose ps docker-compose ps
``` ```
#### Clean data dir #### Clean data dir
``` ```bash
rm -rf ./master/data/* rm -rf ./master/data/*
rm -rf ./slave/data/* rm -rf ./slave/data/*
``` ```
#### Run command inside "mysql_master" #### Run command inside "mysql_master"
``` ```bash
docker exec mysql_master sh -c 'mysql -u root -p111 -e "SHOW MASTER STATUS \G"' docker exec mysql_master sh -c 'mysql -u root -p111 -e "SHOW MASTER STATUS \G"'
``` ```
#### Run command inside "mysql_slave" #### Run command inside "mysql_slave"
``` ```bash
docker exec mysql_slave sh -c 'mysql -u root -p111 -e "SHOW SLAVE STATUS \G"' docker exec mysql_slave sh -c 'mysql -u root -p111 -e "SHOW SLAVE STATUS \G"'
``` ```
#### Enter into "mysql_master" #### Enter into "mysql_master"
``` ```bash
docker exec -it mysql_master bash docker exec -it mysql_master bash
``` ```
#### Enter into "mysql_slave" #### Enter into "mysql_slave"
``` ```bash
docker exec -it mysql_slave bash docker exec -it mysql_slave bash
``` ```

View File

@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
docker-compose down docker-compose down -v
rm -rf ./master/data/* rm -rf ./master/data/*
rm -rf ./slave/data/* rm -rf ./slave/data/*
docker-compose build docker-compose build
@ -12,7 +12,7 @@ do
sleep 4 sleep 4
done 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'" 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 ";"' until docker-compose exec mysql_slave sh -c 'export MYSQL_PWD=111; mysql -u root -e ";"'
@ -21,15 +21,11 @@ do
sleep 4 sleep 4
done 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"'` 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_LOG=`echo $MS_STATUS | awk '{print $6}'`
CURRENT_POS=`echo $MS_STATUS | awk '{print $7}'` 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='export MYSQL_PWD=111; mysql -u root -e "'
start_slave_cmd+="$start_slave_stmt" start_slave_cmd+="$start_slave_stmt"
start_slave_cmd+='"' start_slave_cmd+='"'

View File

@ -1,7 +1,7 @@
version: '3' version: '3'
services: services:
mysql_master: mysql_master:
image: mysql:5.7 image: mysql:8.0
env_file: env_file:
- ./master/mysql_master.env - ./master/mysql_master.env
container_name: "mysql_master" container_name: "mysql_master"
@ -15,7 +15,7 @@ services:
- overlay - overlay
mysql_slave: mysql_slave:
image: mysql:5.7 image: mysql:8.0
env_file: env_file:
- ./slave/mysql_slave.env - ./slave/mysql_slave.env
container_name: "mysql_slave" container_name: "mysql_slave"

View File

@ -1,9 +1,9 @@
[mysqld] [mysqld]
skip-host-cache
skip-name-resolve skip-name-resolve
default_authentication_plugin = mysql_native_password
server-id = 1 server-id = 1
log_bin = /var/log/mysql/mysql-bin.log log_bin = 1
binlog_format = ROW binlog_format = ROW
binlog_do_db = mydb binlog_do_db = mydb

View File

@ -1,9 +1,8 @@
[mysqld] [mysqld]
skip-host-cache
skip-name-resolve skip-name-resolve
default_authentication_plugin = mysql_native_password
server-id=2 server-id = 2
relay-log = /var/log/mysql/mysql-relay-bin.log log_bin = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = mydb binlog_do_db = mydb