使用docker 建立mysql主从
环境:Mac
Mysql:5.7.36
目标:
master主机端口 3307
slave从机端口 3308
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
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
进入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
在master上新建表,slave上成功查出