基于Windows和Docker环境搭建MySQL的主从复制

389 阅读2分钟

一、启动MySQL的Docker容器

  • 拉取MySQL 5.7的image
docker pull mysql:5.7
  • 启动主库Mysql容器
docker run -d -p 3307:3306 -v D:\\mysql\\master\\conf:/etc/mysql/conf.d -v D:\\mysql\\master\\log:/var/mysql/logs -v D:\\mysql\\master\\data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql-master mysql:5.7
  • 在挂载的文件目录D:\mysql\master\conf下面创建mysql配置文件my.cnf 开启binglog日志
[mysqld]
server-id=1
binlog_format=ROW
log-bin=binlog
  • 重启容器
docker restart mysql-master
  • 进入主库容器内部
docker exec -it mysql-master bash
  • 查看主库的binglog日志是否开启
mysql -uroot -p;
show variables like 'log_bin';

image-20230307164409535.png

  • 查看并记录初始的binlog日志文件名称和日志的position
show master status;

image-20230307164519967.png 记录file binlog.000002 和Position 2156后面在配置从库的时候需要。

  • 从库配置
    • 从库容器启动和主库的容器启动是一样的,只是对于配置文件、日志文件、数据的挂载路径需要改为对应的slave目录即可。
    • 配置从库的my.cnf配置文件
    [mysqld]
    server-id=2 #在整个集群中该id需要唯
    

二、主从数据库设置

用户创建

主库上创建一个专门用于主从同步的用户

CREATE USER 'SLAVER'@'%' INDENFITY BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'SLAVER'@'%';
FLUSH PRIVILEGES;

为从库设置主库的地址和端口信息

以下命令需要在每个从库都执行一遍

#使从库和主库关联
CHANGE MASTER TO MASTER_HOST='192.182.11.10',MASTER_PORT=3307,MASTER_USER='SLAVER',MASTER_PASSWORD='123456',
MASTER_LOG_FILE='binlog.000002',MASTER_LOG_POS=2156;
#开启主从同步
START SLAVE;
#查看同步状态
SHOW SLAVE STATUS;

image-20230307165623289.png 看到上图标红的地方,就说明了主从同步正常。

三、常见问题

在最后查看主从同步的状态的时候,可能会出现各种问题,我们可以根据 LAST_IO_ERRNO的值和信息去网络查询具体的解决方案,下面介绍一下我搭建的时候遇到的问题。

最后查看 SHOW SLAVE STATUS;的时候,发现 Slave_IO_State状态为Connecting连接中,Last_IO_Errno=2003,该错误码主要是反应网络不通造成的。原因有两点

  • Windows没有关闭防火墙,可以先关闭防火墙,然后再重新启动主从容器
  • 执行主库和从库关联的的SQL的时候设置MASTER_HOST这个参数为localhost了,改为宿主机的真实Ip地址即可。