MySQL 部署主从数据库

本教程介绍如何借助Docker部署MySQL主从数据库。步骤包括创建映射目录,启动主从数据库,设置root密码,配置主从数据库文件,重启容器并配置从库,最后检查同步状态。确保主从配置文件的server-id不相同,且在配置从库时填写正确的主机IP和文件ID。

起步

借助 Docker 容器部署 MySQL 主从数据库。以下内容涉及路径、端口等可更换内容会额外加以说明。

如果你还没用过 Docker,不妨先看看 Centos7 上安装 MySQL

操作步骤

  1. 创建主从数据库的映射目录。
# 创建主(master)据库的数据(data)目录,配置(conf)目录
$ mkdir /Users/guan/Mine/docker_file/netdiskData/Master/data \
    /Users/guan/Mine/docker_file/netdiskData/Master/conf -p

# 创建从(slave)据库的数据(data)目录,配置(conf)目录
$ mkdir /Users/guan/Mine/docker_file/netdiskData/Slave/data \
    /Users/guan/Mine/docker_file/netdiskData/Slave/conf -p
  • 以上路径可以自行按需更换。但目录结构按如下方式管理较为合理:
|- netdiskData(项目的数据目录)
  |- Master(主数据库根目录)
    |- data(数据存放目录)
    |- conf(配置文件存放目录)	
  |- Slave (从数据库根目录)
    |- data
    |- conf

  1. 启动主从数据库。
$ docker run --name master \
           -p 3306:3306 \
           -v /.../netdiskData/Master/data:/var/lib/mysql \
           -v /.../netdiskData/Master/conf:/etc/mysql/conf.d \
           --privileged=true \
           -e MYSQL_ROOT_PASSWORD=123456 \
           -itd daocloud.io/library/mysql:5.7

$ docker run --name slave \
           -p 3307:3306 \
           -v /.../netdiskData/Slave/data:/var/lib/mysql \
           -v /.../netdiskData/Slave/conf:/etc/mysql/conf.d \
           --privileged=true \
           -e MYSQL_ROOT_PASSWORD=123456 \
           -itd daocloud.io/library/mysql:5.7
  • 类似 -v /.../netdiskData/Master/data:/var/lib/mysql语句中,: 前表示宿主机(本机)路径,请自行按需更改;: 后表示 docker 容器中的路径,不必更改。
  • -p 3306:3306,前者表示宿主机端口,后者表示容器内端口。后者不应修改。
  • -e MYSQL_ROOT_PASSWORD=123456 设置 root 密码。如有需求,请自行修改。

  1. 添加数据库配置文件。
$ vim netdiskData/Master/conf/1.cnf
# 写入内容如下
[mysqld]
log-bin=mysql-bin
server-id=1

$ vim netdiskData/Slave/conf/1.cnf
# 写入内容如下
[mysqld]
log-bin=mysql-bin
server-id=2
  • 注意,主从配置文件中,server-id 值一定不能一样

  1. 重启主从 docker 容器,进入 master 容器查看 file id。

重启 docker 之后,进入 master 数据库容器,并登陆主数据库mysql -uroot -p)。

mysql> show master status;

在这里插入图片描述

我们记录这里的 file id: mysql-bin.000002


  1. 进入 slave 容器配置从数据库。

登陆从数据库

mysql> CHANGE MASTER TO MASTER_HOST='192.168.0.102', MASTER_USER='root', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=0;
  • MASTER_HOST 表示 master 数据库的 IP 地址,如果你跟我一样借助了 docker ,那么千万不要写 127.0.0.1 或者 0.0.0.0,应该填写物理机的真实 IP(ifconfig 或者 ip addr 查看)。
  • MASTER_USER 是 master 数据库用户名,MASTER_PASSWORD 是 master 数据库用户密码,请根据实际情况自行修改。
  • MASTER_LOG_FILE 填写之前查看的 file id。
  • MASTER_LOG_POS=0 表示从最开始的位置进行同步。

  1. 启动 slave,查看 slave 状态。
mysql> start slave;
mysql> show slave status\G

在这里插入图片描述

看到 Slave_IO_Running 与 Slave_SQL_Running 都是 yes 之后就成功了。

感谢

  • 参考 https://coding.imooc.com/class/323.html
  • 参考 https://www.jianshu.com/p/ed5b501267d3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值