vbabak/docker-mysql-master-slave

mysql 8

Closed this issue · 6 comments

i tried it and got a failure.
In short, i can't even start the master with your config file.
do you have an advice to make it run with mysql 8 ?

this is a sample script

docker rm -f mysql_master mysql_slave
rm -rf /root/docker/mysql_slave /root/docker/mysql_master
mkdir -p /root/docker/mysql_slave/data /root/docker/mysql_master/data

cat - > /root/docker/mysql_master/myconfig.cnf <<EOF
[mysqld]
# skip-host-cache
# skip-name-resolve
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_format = ROW
binlog_do_db = mydb
EOF

docker run -p 5506:3306 --name mysql_master \
-e MYSQL_ROOT_PASSWORD=xxxxxxxx \
-v /root/docker/mysql_master/data:/var/lib/mysql \
-v /root/docker/mysql_master/myconfig.cnf:/etc/mysql/conf.d/myconfig.cnf \
-d mysql

Hi @vbabak (and @rafipiccolo)

First, thanks for your effort.

I've got problems with mysql 5.7, so I migrated your setup to use v8.

If you are interested, I can open a PR.

pull request or not i'd like to see a working script for mysql 8 :)

In the end what i want is a script to start a mysql master slave + do a rolling upgrade

It's not that easy, after loading up the two instances with docker, they should be configured properly.
There are some little differences in syntax between mysql 5 & 8, but the concept is the same.

You can find infos here: https://developpaper.com/docker-builds-mysql-8-master-slave/

Hi @vbabak (and @rafipiccolo)

First, thanks for your effort.

I've got problems with mysql 5.7, so I migrated your setup to use v8.

If you are interested, I can open a PR.

That would be great.
@funder7 do you have a fork with your setup?

Hi @vasconde, I'll try to create one in the next days!

ok, i have a working sequence of command to create a master + a slave + a test

docker rm -f mysql_master mysql_slave;
rm -rf /root/docker/mysql_slave /root/docker/mysql_master;
mkdir -p /root/docker/mysql_slave/data /root/docker/mysql_master/data;

cat - > /root/docker/mysql_master/myconfig.cnf <<EOF
[mysqld]
# skip-host-cache
# skip-name-resolve
server-id = 1
log_bin = mysql-bin
binlog_do_db = mydb
EOF

docker run -p 5506:3306 --name mysql_master \
-e MYSQL_ROOT_PASSWORD=xxxxxxxx \
-v /root/docker/mysql_master/data:/var/lib/mysql \
-v /root/docker/mysql_master/myconfig.cnf:/etc/mysql/conf.d/myconfig.cnf \
mysql



cat - > /root/docker/mysql_slave/myconfig.cnf <<EOF
[mysqld]
# skip-host-cache
# skip-name-resolve
server-id = 2
replicate-do-db = mydb
EOF

docker run -p 6606:3306 --name mysql_slave \
-e MYSQL_ROOT_PASSWORD=xxxxxxxx \
-v /root/docker/mysql_slave/data:/var/lib/mysql \
-v /root/docker/mysql_slave/myconfig.cnf:/etc/mysql/conf.d/myconfig.cnf \
mysql




# get status on the master 
echo "show master status;" | docker exec -i mysql_master mysql -u root -pxxxxxxxx

# on slave : start following the master  : adapt this command from the show master output / set correct master_host master_port
echo "change master to master_host='EXTERNAL MYSQL HOST',master_port=EXTERNALMYSQLPORT,master_user='root',master_password='xxxxxxxx',master_log_file='mysql-bin.000003',master_log_pos=157;" | docker exec -i mysql_slave mysql -u root -pxxxxxxxx;
echo "start slave;" | docker exec -i mysql_slave mysql -u root -pxxxxxxxx;

# get status on the slave 
echo "show slave status \G;" | docker exec -i mysql_slave mysql -u root -pxxxxxxxx;
echo "show variables like 'server_id';" | docker exec -i mysql_slave mysql -u root -pxxxxxxxx;


# create data on master
echo "create database mydb;" | docker exec -i mysql_master mysql -u root -pxxxxxxxx
echo "create table t_user(id bigint primary key ,name varchar(200));" | docker exec -i mysql_master mysql -u root -pxxxxxxxx mydb
echo "insert into t_user values(1,'mindong');" | docker exec -i mysql_master mysql -u root -pxxxxxxxx mydb

# verify on slave
echo "select * from t_user;" | docker exec -i mysql_slave mysql -u root -pxxxxxxxx mydb