docker-mysql-master-slave icon indicating copy to clipboard operation
docker-mysql-master-slave copied to clipboard

mysql 8

Open rafipiccolo opened this issue 2 years ago • 3 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

rafipiccolo avatar Apr 21 '22 22:04 rafipiccolo

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.

funder7 avatar Jul 28 '22 19:07 funder7

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

rafipiccolo avatar Jul 29 '22 09:07 rafipiccolo

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/

funder7 avatar Jul 29 '22 16:07 funder7

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?

vasconde avatar Aug 10 '22 15:08 vasconde

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

funder7 avatar Aug 11 '22 13:08 funder7

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

rafipiccolo avatar Aug 12 '22 12:08 rafipiccolo