起步
借助 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;
我们记录这里的 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
看到 Slave\_IO\_Running 与 Slave\_SQL\_Running 都是 yes 之后就成功了。
还不快抢沙发