mysql 主从搭建(本机)
原理
MySQL服务器之间的主从同步是基于二进制日志(binlog)机制,主服务器使用二进制日志来记录数据库的变动情况,从服务器通过读取和执行该日志文件来保持和主服务器的数据一致。
docker 安装mysql
- 启动mysql-3306
docker run --name mysql-3306 --privileged=true -v /Users/liyadong/tools/docker/mysql/data:/var/lib/mysql -v /Users/liyadong/tools/docker/mysql/log:/var/log/mysql -v /Users/liyadong/tools/docker/mysql/conf.d:/etc/mysql/conf.d -v /etc/localtime:/etc/localtime:ro -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql:latest
- 启动mysql-3307
docker run --name mysql-3307 --privileged=true -v /Users/liyadong/tools/docker/mysql-3307/data:/var/lib/mysql -v /Users/liyadong/tools/docker/mysql-3307/log:/var/log/mysql -v /Users/liyadong/tools/docker/mysql-3307/conf.d:/etc/mysql/conf.d -v /etc/localtime:/etc/localtime:ro -e MYSQL_ROOT_PASSWORD=123456 -p 3307:3306 -d mysql:latest
配置主从
-
在master 节点创建用户、并配置权限
- 进入master容器
docker exec -it <master节点容器id> /bin/bash
- 登陆mysql
mysql -uroot -p123456
- 创建slave用户,并赋权
create user 'slave'@'%' identified by '123456'; grant replication slave, replication client on *.* to 'slave'@'%'; flush privileges;
- 查看master日志状态
show master status;
注意:File表示binlog文件名,Position表示日志文件的起始位置,Binlog_IgnoreDB表示主从同步忽略的库
- 查看master节点ip地址
docker inspect <master节点容器id>
-
配置slave与master关联
-
进入slave 节点
docker exec -it <slave节点容器id> /bin/bash
-
登陆到mysql
mysql -uroot -p123456
-
绑定与master的关系
change master to master_host='172.17.0.3', master_user='slave', master_password='123456', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=566;
[!NOTE]
master-host 为 主节点ip,master_user为主节点用户名,master_password为slave用户密码,MASTER_LOG_FILE为主节点日志文件名,MASTER_LOG_POS为主节点日志位置
-
开始主从同步
start slave;
-
查看主从同步状态
show slave status;
-
> Slave_IO_Running: Yes, Slave_SQL_Running: Yes 即为主从成功
-
验证(master节点插入一条数据,查看slave库数据)
主节点
从节点