028-86261949

当前位置:首页 > 技术交流 > docker 搭建主从同步的Mysql集群

docker 搭建主从同步的Mysql集群

2019/06/14 16:42 分类: 技术交流 浏览:2

1.为什么需要数据库集群?

随着业务的发展,系统的数据量和访问量都在大量增长。

对于大型网站来说,有不少业务是读多写少的。

 

2.数据库集群:

一个是主库,负责写入数据,我们称之为:写库

其他都是从库,负责读取数据,我们称之为:读库

 

3.容器化实现:

  1. 环境搭建
  • 下载mysql 镜像

docker pull mysql:5.7

 

  • 启动 docker

docker run -p 3339:3306 --name mysql-master --privileged=true \

-e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

 

docker run -p 3340:3306 --name mysql-slave --privileged=true \

-e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

 

 

 

  • 查看ip

【查看主IP】

docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql-master

【查看从IP】

docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql-slave

 

 

  1. 主从配置实现:

主节点配置

  • 1. 进入容器:

docker exec -it mysql-master /bin/bash

 

  • 2. 修改配置文件

vim /etc/mysql/my.cnf

[mysqld]

## 同一局域网内注意要唯一

server-id=100 

## 开启二进制日志功能,可以随便取(关键)

log-bin=mysql-bin

 

注:没有vim 需要安装

apt-get update

apt-get install vim

 

  • 3. 重启mysql服务使配置生效

service mysql restart

 

## 重启mysql会使docker容器停止

docker start mysql-master

 

  • 4. 创建数据同步用户并授权

CREATE USER 'slave'@'%' IDENTIFIED BY '123456';

 

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

 

从节点配置

  • 修改配置文件

vim /etc/mysql/my.cnf

[mysqld]

## 设置server_id,注意要唯一

server-id=101

 

## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用 log-bin=mysql-slave-bin

 

## relay_log配置中继日志

relay_log=edu-mysql-relay-bin

  • 重启生效

 

链接Master(主)和Slave(从)

  • 1、查看主节点的状态

show master status;

  • 2、在Slave 中配置同步数据的File 和Position

change master to master_host='172.17.0.2', \

master_user='slave',\

master_password='123456', \

master_port=3306, \

master_log_file='mysql-bin.000001', \

master_log_pos= 617, \

master_connect_retry=30;

 

配置说明:

master_host:Master的地址

master_port:Master的端口号,指的是容器的端口号

master_user:用于数据同步的用户

master_password:用于同步的用户的密码

master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值

master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值

master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒

 

  • 3、开启主从复制

start slave;

 

  • 4、在Slave中查看主从同步状态

show slave status \G;

 

 

  1. 测试主从复制

在Master创建一个数据库,检查Slave是否存在此数据库

#标签:java,docker 搭建,Mysql集群