MySQL 部署主从数据库

工具 2020-01-21 3018 字 1220 浏览 点赞

起步

借助 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

2.启动主从数据库。

$ 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 密码。如有需求,请自行修改。

3.添加数据库配置文件。

$ 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 值一定不能一样

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

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

mysql> show master status;

Alt text

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


5.进入 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 表示从最开始的位置进行同步。

6.启动 slave,查看 slave 状态。

mysql> start slave;
mysql> show slave status\G

Alt text

看到 Slave\_IO\_Running 与 Slave\_SQL\_Running 都是 yes 之后就成功了。

感谢



本文由 Guan 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

还不快抢沙发

添加新评论