MySQL 部署主从数据库

起步

借助 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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章