docker下mysql主从搭建

使用docker 建立mysql主从

 环境:Mac

          Mysql:5.7.36

目标:

master主机端口 3307

slave从机端口 3308

  1. 在Mac建立master,slave对应目录

  log,data,conf,mysql-files

/Users/mac/app/mysql/mysql-master/log

/Users/mac/app/mysql/mysql-master/data

/Users/mac/app/mysql/mysql-master/conf

/Users/mac/app/mysql/mysql-master/mysql-files

。。。

/conf 目录下新建my.cnf

 Master内容

 [mysqld]

server_id = 100

log-bin=mysql-bin

read-only=0

binlog-do-db=yzz_prod

replicate-ignore-db=mysql

replicate-ignore-db=sys

replicate-ignore-db=information_schema

replicate-ignore-db=performance_schema

Slave内容

[mysqld]

server_id = 102

log-bin=mysql-bin

read-only=1

binlog-do-db=yzz_prod

replicate-ignore-db=mysql

replicate-ignore-db=sys

replicate-ignore-db=information_schema

replicate-ignore-db=performance_schema

  1. 启动master(如果没有pull mysql,会自动pull)

docker run -d  -p 3307:3306 --privileged=true --name mysql-master -v /Users/mac/app/mysql/mysql-master/log:/var/log/mysql -v /Users/mac/app/mysql/mysql-master/data:/var/lib/mysql -v /Users/mac/app/mysql/mysql-master/conf:/etc/mysql  -v /Users/mac/app/mysql/mysql-master/mysql-files:/var/lib/mysql-files/ -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.36

Tip:如果启动没有成功(docker  ps没有)docker logs ID或名 查看具体信息

3.在Master数据库创建数据同步用户,授予用户 slave REPLICATION SLAVE权限和REPLICATION CLIENT权限,用于在主从库之间同步数据。

进入master 执行

CREATE USER 'slave'@'%' IDENTIFIED BY '123456';

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%'; 

 4.启动从机

docker run -d  -p 3308:3306 --privileged=true --name mysql-slave -v /Users/mac/app/mysql/mysql-slave/log:/var/log/mysql -v /Users/mac/app/mysql/mysql-slave/data:/var/lib/mysql -v /Users/mac/app/mysql/mysql-slave/conf:/etc/mysql  -v /Users/mac/app/mysql/mysql-slave/mysql-files:/var/lib/mysql-files/ -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.36

  1. 设置主库连接

进入master 查看主机信息

执行  show master status;

进入salve

执行:

change master to master_host='172.17.0.2', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000005', master_log_pos=996, master_connect_retry=30;

我这里端口为3306,这个是因为mysql端口映射的问题 它是 0.0.0.0:3307->3306/tcp 不是你访问3307的端口给你映射到3306的端口 而是你访问3306的端口它给你寻找到3307的端口
所以就算你的主从mysql通通不是3306的端口 你还是要使用3306的端口来连接 机器会帮你寻找到实际上的物理端口

命令说明:

master_host :Master库的地址,指的是容器的独立ip,可以通过

master_port:Master的端口号,指的是容器的端口号

master_user:用于数据同步的用户

master_password:用于同步的用户的密码

master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值

master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值

master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒 

6.重启从库,执行以下命令:

reset slave;

start slave;

执行show slave status \G;用于查看主从同步状态。

查看

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

必须都为yes

  1. 验证

  在master上新建表,slave上成功查出

你可能感兴趣的:(智慧物联网,java,mysql,docker,mysql)