如何使用docker 测试mysql主从配置

1:docker配置

#拉取mysql镜像
docker pull mysql
#创建docker容器互联,新建网络
docker network create -d bridge my-net
#使用mysql镜像创建两个mysql服务器容器,
#设置密码123456,设置端口映射到本地,设置容器互联网络my-net
docker run --name mysql-2 -e MYSQL_ROOT_PASSWORD=123456 -d -p 3307:3307 --network my-net mysql
docker run --name mysql-1 -e MYSQL_ROOT_PASSWORD=123456 -d -p 3306:3306 --network my-net mysql



2:mysql配置

由于容器内没有vim等编辑命令,所以临时使用docker desktop软件,配置mysql的配置文件/etc/my.conf,设置主从。

#配置容器mysql-1  /etc/my.conf
port=3306 

server-id=1 

log-bin=mysql-bin 

binlog-format=row 

#配置容器mysql-2 /etc/my.conf

port=3307 

server-id=2 

relay-log=mysql-relay-bin

配置完成重启两个容器

3:测试mysql连接和设置复制数据的账号

#主库配置

#创建复制账号
CREATE USER repl@localhost IDENTIFIED  BY'123456';
CREATE USER repl@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON . TO repl@'localhost';
GRANT REPLICATION SLAVE ON . TO repl@'%';
FLUSH PRIVILEGES;

SHOW GRANTS FOR repl @'%';
SHOW GRANTS FOR repl @'localhost';

#查看主库的bin log
SHOW VARIABLES LIKE '%log_bin%';
SHOW BINARY LOGS;
SHOW BINARY LOG STATUS

#查看从库
SHOW REPLICAS;

#从库配置

#停止复制进程
STOP REPLICA;

#创建复制配置
#使用docket inspect mysql-1查看容器mysql-1主库的ip为172.18.0.3
CHANGE REPLICATION SOURCE TO SOURCE_HOST = '172.18.0.3',
SOURCE_PORT = 3306,
SOURCE_USER = 'repl',
SOURCE_PASSWORD = '123456',
SOURCE_LOG_FILE = 'mysql-bin.000002',
SOURCE_LOG_POS = 358;

#开始复制进程
START REPLICA;

#查看复制进程状态
#########################
######重要################
#可以根据这个判断复制进程的状态和信息,例如失败,失败原因等
SHOW REPLICA STATUS;




4:遇到的错误

1:原本没有创建容器网络,所以容器之间是没有网络的,不是属于同一网络
docker network create -d bridge my-net

2:由于没有创建网络,所以以为可以通过映射到本地的端口配置复制
错误:CHANGE REPLICATION SOURCE TO SOURCE_HOST = 'local'
正确:CHANGE REPLICATION SOURCE TO SOURCE_HOST = '172.18.0.3'

3:原本是不使用docker的,想在本地机器,开启两个mysql服务,发现不可以,只能开启一个

4:SHOW REPLICA STATUS;提示密码不安全,这时候需要去容器mysql-2里面执行
mysql -u repl -p123456 -h 172.18.0.3 -P3306 --get-server-public-key
获取到容器mysql-1的mysql服务公钥

5:SHOW REPLICA STATUS;可以查看具体的错误信息,应该是在字段Last_IO_Error

6:由于版本较新mysql 9了,SHOW MASTER STATUS;已经被弃用了,改为SHOW REPLICAS;


本文只是为了测试主从,不能作为正式配置。

暗夜魔王 的头像

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注