使用docker-compose搭建mysql主从
目录
觉得有用的记得关注点赞加收藏哦 我的Docker专栏还有其他关于Dokcer的技术点哦~
一、docker-compose和主从的简介
1、docker-compose
Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排 通过编写docker-compose文件可对多个服务同时进行启动/停止/更新(可定义依赖,按顺序启动服务)
2、mysql主从
以往创建的集群都是做同样的事情,比如说创建了三台服务器,那么客户端发送了一条增加请求,那么就会随机分配到三台服务器其中一台,
那么mysql集群不一样,首先呢我们不叫它mysql集群,我们叫mysql主从,那么就有主服务器和从服务器这样两种概念,主服务器负责写的操作,也就是增删改,从服务器负责读的操作,也就是查询,如果说客户端发送了一条增加的请求,那么就会把这条增加的请求给到主服务器,再由主服务器把数据同步到从服务器
3、为什么要使用docke-compose?
微服务架构的应用系统一般包含若干个微服务,每个微服务一般都会部署多 个实例,如果每个微服务都要手动启停, 那么效率之低,维护量之大可想而知.而使用 Docker Compose 可以轻松、高效的管理容器, 它是一个用于定义和运行多容器 Docker 的应用程序工具,可以用来一键启动所有服务器,一键关闭所有服务器,一键删除所有服务器,非常方便。
二、部署mysql主从集群
1、mysql-master主库
在宿主机中创建相关目录,用于挂载容器的相关数据
mkdir -p /data/mysql-master/{conf,data}
上传主数据库容器的配置文件my.cnf到/data/mysql-master/conf目录下
cd /data/mysql-master/conf
rz 上传
文章所需要的文件我会放到结尾
2、mysql-slave从库
在宿主机中创建相关目录,用于挂载容器的相关数据
mkdir -p /data/mysql-slave/{conf,data}
上传从数据库容器的配置文件my.cnf到/data/mysql-slave/conf目录下
cd /data/mysql-slave/conf
rz 上传
这两个文件里的内容只有id是不一样的
三、安装docker-compose
1、上传文件
安装包刚下载过来是docker-compose-Linux-x86_64
需要将docker-compose-Linux-x86_64重命名为 docker-compose
将 docker-compose 文件上传到虚拟机 的 /usr/local/bin/ 目录下,这个目录下的文件可以被全局使用到,
cd /usr/ocal/bin
2、添加可执行权限
chmod +x /usr/local/bin/docker-compose
3、创建并编辑docker-compose.yml文件
可以使用默认的名称docker-compose.yml,因为要做MySQL的主从所以我把名字改成了docker-composemysql.yml
我们编辑yml文件可以在外部的工具先编辑在上传,比如idea
docker-composemysql.yml内容如下:
# 版本号
version: '3'
# 定义服务
services:
# 服务名
mysql-master:
# 容器名称
container_name: mysql-master
# 镜像
image: mysql/mysql-server:5.7
# 重启
restart: always
# 提供伪终端
tty: true
# root具备管理员权限
privileged: true
# 环境变量
environment:
MYSQL_ROOT_PASSWORD: 123456
# 数据卷(目录映射)
volumes:
- /data/mysql-master/conf/my.cnf:/etc/my.cnf
- /data/mysql-master/data:/var/lib/mysql
# 网络
networks:
mynetwork:
ipv4_address: 172.19.0.3
# 服务名
mysql-slave:
# 容器名称
container_name: mysql-slave
# 镜像
image: mysql/mysql-server:5.7
# 重启
restart: always
# 提供伪终端
tty: true
# root具备管理员权限
privileged: true
# 环境变量
environment:
MYSQL_ROOT_PASSWORD: 123456
# 数据卷(目录映射)
volumes:
- /data/mysql-slave/conf/my.cnf:/etc/my.cnf
- /data/mysql-slave/data:/var/lib/mysql
# 网络
networks:
mynetwork:
ipv4_address: 172.19.0.4
# 定义所需要的网络
networks:
mynetwork:
driver: bridge
ipam:
config:
- subnet: 172.19.0.0/16
创建文件夹mysql把编辑号的yml文件上传进去
mkdir mysql
4、运行docker-composeysql.yml
检查
docker-compose -f docker-composemysql.yml config -q
检查一下yml文件有没有错误的地方,没报错就是没有
运行
docker-compose -f docker-composemysql.yml up -d
四、配置mysql主从
1、进入主库容器配置远程连接
docker exec -it mysql-master /bin/sh
2、登录mysql主服务器
mysql -u root -p
输入mysql密码:123456
3、查看主节点关键参数
记住 File 的值和 Position 的值(此值重启后会变化),等会配置 slave 服务器的时候要用
show master status;
4、给用户授权并更新
grant all privileges on *.* to root@'%' identified by '123456';
flush privileges;
另外开一个窗口进入从服务器
5、进入从服务器
docker exec -it mysql-slave /bin/bash
6、登录mysql从服务器
mysql -u root -p
输入mysql密码:123456
7、配置主从复制
CHANGE MASTER TO MASTER_HOST='172.19.0.3', MASTER_PORT=3306, MASTER_USER='root',
MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=154;各参数说明:
master_host='172.19.0.3' // 这里填master主机ip,除了填写住宿主机IP,还可以填写bridge网络中的IP
master_log_file='mysql-bin.000005', // 这里填写 File 的值就是前面我们show master status;命令的执行结果
master_log_pos=154;// 这里填写 Position 的值就是前面我们show master status;命令的执行结果
8、开启主从复制
start slave;
9、查看连接状态
show slave status\G
注1:这里只要看到两个参数Slave_IO_Running和Slave_SQL_Running都为true,则表示复制是正常进行的,到这里我们的主从结构也就搭建完成了
注2:集群成功后,在mysql-master容器重启后虽然File的值和Position的值会变化,但在mysql-slave可以进行跟踪,所以不需要重新进行配置
五、测试主从服务
1、在主服务器创建一个数据库
create databse test;
在使用 show databases;查看一下所以库
2、在从服务器查看数据库
show databases;
ok,已经完成了数据的同步
六、将crm项目的数据库通过命令导入主库
在主服务器执行
1、创建数据库crm
create database crm;
2、把sql脚本上传到主服务器的的数据目录
cd /data/mysql-master/data
文章所需要的文件我会放到结尾
3、选择数据库
use crm;
4、设置数据库编码(可选)
set names utf8;
5、导入数据(注意sql文件的路径)
source /var/lib/mysql/crm.sql;
已提前将crm.sql文件上传到了宿主机/data/mysql-master/data目录
使用show tables;查看刚刚导入的数据
在从数据库也查询一下,也是有数据的,完成了数据同步
好啦 文章内容到这里就结束了 你学到了吗
觉得有用的记得关注点赞加收藏哦 我的Docker专栏还有其他关于Dokcer的技术点哦~
我敲BUG的Docker专栏:http://t.csdn.cn/ypXDz
更多推荐
所有评论(0)