Mysql主从

准备环境

,准备软件

官方docker_image :Mysql5.7.28

Docker Version:        19.03.4

K8s api-version:        apps/v1

,具体制作流程

1根据docker-image编写Dockerfile制作mysql-master镜像2.1根据docker-image编写Dockerfile制作mysql-salve镜像

From mysql:latest                                                     #基础镜像

ENV MYSQL_ALLOW_EMPTY_PASSWORD yes  #设置无密码登录

COPY conf.sh /mysql/conf.sh                                  #复制配置文件

COPY set.sql /mysql/set.sql                                  #复制配置文件

CMD ["sh", "/mysql/conf.sh"]                                      #容器启动时执行脚本

2.1配置文件conf.sh

#! /bin/bash

set -e

echo "1,设置mysql_server_ID....."

sed -i '/\[mysqld\]/a server-id=1\nlog-bin=/var/lib/mysql/mysql-bin\ngtid-mode=ON\nenforce-gtid-consistency=ON' /etc/mysql/mysql.conf.d/mysqld.cnf

echo "2.启动MySQL 。。。"

service mysql start

echo "3,设置密码。。。"

sed -i 's/MYSQLROOTPASSWOED/'$MYSQL_ROOT_PASSWORD'/' mysql/set.sql

sed -i 's/MYSQLREPLICATIONPASSWORD/'$MYSQL_REPLICATION_PASSWORD'/' mysql/set.sql

sed -i 's/MYSQLREPLICATIONUSER/'$MYSQL_REPLICATION_USER'/' mysql/set.sql

mysql < /mysql/set.sql

echo "4 service mysql status"

tail -f /dev/null

2.2配置文件set.sql 设置mysql——root密码  创建复制用户及密码

use mysql;

set password for root@'localhost' = password("MYSQLROOTPASSWORD");

grant all on *.* to "MYSQLREPLICATIONUSER"@'%' identified by "MYSQLREPLICATIONPASSWORD" with grant option;

grant all on *.* to 'root'@'%' identified by "MYSQLREPLICATIONPASSWORD" with grant option;

flush privileges;

1.3将三个文件放在同级目录构建mysql-master-image

执行命令

#docker build -t mysql5.7-master:001 .

创建完image后在本地docker环境配置容器看是否有无复制用户

#docker run --name mysql-master -e MYSQL_ROOT_PASSWORD="123456" -e MYSQL_REPLICATION_USER="rep1" -e MYSQL_REPLICATION_PASSWORD="123456" -d mysql5.7-master:01

进入容器>进去mysql>查看用户

#docker exec -it mysql-master bash

2.1根据docker-image编写Dockerfile制作mysql-salve镜像

From mysql:latest                                                     #基础镜像

ENV MYSQL_ALLOW_EMPTY_PASSWORD yes  #设置无密码登录

COPY conf.sh /mysql/conf.sh                                  #复制配置文件

COPY set.sql /mysql/set.sql                                  #复制配置文件

CMD ["sh", "/mysql/conf.sh"]                                      #容器启动时执行脚本

2.1配置文件conf.sh

#! /bin/bash

set -e

echo "1,设置mysql_server_ID....."

sed -i '/\[mysqld\]/a server-id=1\nlog-bin=/var/lib/mysql/mysql-bin\ngtid-mode=ON\nenforce-gtid-consistency=ON' /etc/mysql/mysql.conf.d/mysqld.cnf

echo "2.启动MySQL 。。。"

service mysql start

echo "3,设置密码。。。"

sed -i 's/MYSQLROOTPASSWOED/'$MYSQL_ROOT_PASSWORD'/' mysql/set.sql

sed -i 's/MYSQLREPLICATIONPASSWORD/'$MYSQL_REPLICATION_PASSWORD'/' mysql/set.sql

sed -i 's/MYSQLREPLICATIONUSER/'$MYSQL_REPLICATION_USER'/' mysql/set.sql

mysql < /mysql/set.sql

echo "4 service mysql status"

tail -f /dev/null

2.2配置文件set.sql 设置mysql——root密码  创建复制用户及密码

use mysql;

set password for root@'localhost' = password("MYSQLROOTPASSWORD");

grant all on *.* to 'root'@'%' identified by "MYSQLREPLICATIONPASSWORD" with grant option;

flush privileges;

2.3将三个文件放在同级目录构建mysql-slave-image

执行命令

#docker build -t mysql5.7-slave:001 .

2.4创建完image后在配置slave容器

2.4.1先查看master容器IP

# docker inspect mysql-master | grep IPAddr

2.5创建slave容器

docker run --name mysql-slave -e MYSQL_ROOT_PASSWORD="123456" -e MYSQL_MASTER_SERVICE_HOST="172.17.0.10" -e MYSQL_REPLICATION_USER="rep1" -e MYSQL_REPLICATION_PASSWORD="123456" -d mysql5.7-slave:001

2.6进入容器>进去mysql>slave状态

#docker exec -it mysql-slave bash

,将所创建mysql-images转入k8s镜像库作为底层pod基础

1 在本地环境docker保存刚刚创建的两个mysql镜像

#docker save -o mysql5.7-master.tar mysql5.7-master:001

#docker save -o mysql5.7-slave.tar mysql5.7-slave:001

2导入至k8s环境

# docker load -i mysql5.7-master.tar

# docker load -i mysql5.7-slave.tar

3编写mysql-master-deploy.yaml

apiVersion: apps/v1                            #版本号

kind: Deployment                               #创建的资源类型

metadata:                                      #该资源的元数据,name必选项

name: mysql-master                           #name描述

spec:                                          #deployment的规格说明

replicas: 1                                  #副本数量

selector:

matchLabels:

name: mysql-master

template:                                   #定义pod的模板,配置文件的重要部分

metadata:                                  #定义pod的元数据,至少定义一个label

labels:

name: mysql-master

track: stable

spec:           #描述pod的规格,定义pod中每个容器的属性,name和image必须

containers:                            #容器描述

- image: mysql5.7-master:001          #镜像来源名字

name: mysql-master

imagePullPolicy: IfNotPresent

ports:

- containerPort: 3306

env:

- name: MYSQL_ROOT_PASSWORD

value: "123456"

- name: MYSQL_REPLICATION_USER

value: "rep1"

- name: MYSQL_REPLICATION_PASSWORD

value: "123456"

4编写mysql-mater-svc.yaml  映射端口为集群:31111

apiVersion: v1

kind: Service

metadata:

name: mysql-master

labels:

name: mysql-master

spec:

type: NodePort

ports:

- port: 3306

targetPort: 3306

nodePort: 31111

protocol: TCP

selector:

name: mysql-master

5编写mysql-slave-deploy.yaml

apiVersion: apps/v1

kind: Deployment

metadata:

name: mysql-slave

spec:

replicas: 3

selector:

matchLabels:

name: mysql-slave

template:

metadata:

labels:

name: mysql-slave

spec:

#      hostNetwork: true

#      endpoint-pod-names: mysql-master

containers:

- name: mysql-slave

image: mysql5.7-slave:001

imagePullPolicy: IfNotPresent

env:

-  name: MYSQL_ROOT_PASSWORD

value: "123456"

-  name: MYSQL_REPLICATION_USER

value: "rep1"

-  name: MYSQL_REPLICATION_PASSWORD

value: "123456"

-  name: MYSQL_MASTER_SERVICE_HOST

value: 192.168.226.183

ports:

- name:

containerPort: 3306

查看pods状态

#kubectl  get pods -o wide

验证 再master创建一张表看slave是否同步

k8s部署mysql主从复制的更多相关文章

  1. 2.快速部署MySQL主从复制

      1.快速部署MySQL主从复制 [root@mysql ~]# mysql -uroot -p123456 -S /data/3307/mysql.sock -e "show slave ...

  2. k8s部署mysql数据持久化

    在这里我部署mysql的目的是为了后面将上一篇博客docker打包的el-admin镜像部署到k8s上,所以本文主要是部署mysql并实现持久化. 1.将我们的应用都部署到 el-admin 这个命名 ...

  3. centos7下部署mysql主从复制

    首先大致看一下这个图 环境说明: 系统:centos7 IP:master:192.168.7.235 slave:192.168.7.226 mysql版本MySQL-5.7 1.Master 下载 ...

  4. 安装部署MySQL主从复制

    Environment:{ CentOS 7 两台  安装MySQL(mariadb  mariadb-server) } !!!关闭防火墙SELinux 1.查看版本信息 2.启动mysql服务,查 ...

  5. docker 容器模式下部署mysql 主从复制

    1.计划用两台host来部署,分别部署一台 mysql,一主一从,2.配置好主从mysql配置文件,更改文件名即可[client]port = 3306socket = /var/run/mysqld ...

  6. 使用docker部署mysql主从复制集群

    一.环境搭建 虚拟机环境:centos7 IP: 启动3个容器,一个是master,端口是3307,另外两个是slaver,端口是3308和3309 docker pull mysql:5.7 doc ...

  7. Kubernetes 部署Mysql 主从复制集群

    Mysql主从参考文章: https://www.jianshu.com/p/509b65e9a4f5 http://blog.51cto.com/ylw6006/2071864 Statefulse ...

  8. Ubuntu 16.04下使用docker部署MySQL主从复制

    (以下docker相关的命令,需要在root用户环境下或通过sudo提升权限来进行操作.) 首先更新 软件源 https://mirrors.tuna.tsinghua.edu.cn/help/ubu ...

  9. MySQL主从复制原理及配置详细过程以及主从复制集群自动化部署的实现

    一.复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重 ...

随机推荐

  1. MOSFET 的 I / V 特性曲线

    https://www.cnblogs.com/yeungchie/ MOSFET 线性区(三极管区,\(V_{DS} \leq V_{GS} - V_{TH}\)) \[I_{D} = \mu_{n ...

  2. 5.12 省选模拟赛 T2 贪心 dp 搜索 差分

    LINK:T2 这题感觉很套路 但是不会写. 区间操作 显然直接使用dp不太行 直接爆搜也不太行复杂度太高. 容易想到差分 由于使得整个序列都为0 那么第一个数也要i差分前一个数 强行加一个0 然后 ...

  3. bzoj 3790 神奇项链 回文串 manacher|PAM

    LINK:神奇项链 存在两个操作:1. 一个操作可以生成所有形式的回文串 2.一个操作可以将两个串给合并起来 如果前缀和后缀相同还可以将其并起来. 多组询问 每次询问合成一个串所需最少多少次2操作. ...

  4. bzoj 4278 [ONTAK2015]Tasowanie

    给出两个字符串 A B 让我们对其二路归并 求出能够归并出的最小字典序. 考虑后缀数组 不难发现我们将B直接连在A上会出现问题 问题是 A串剩下的和B串完全相同了 那么此时比大小就会用到B的部分 这是 ...

  5. 面试官:怎么做JDK8的内存调优?

    面试官:怎么做JDK8的内存调优? 看着面试官真诚的眼神,心中暗想看起来年纪轻轻却提出如此直击灵魂的问题.擦了擦额头上汗,我稍微调整了一下紧张的情绪,对面试官说: 在内存调优之前,需要先了解JDK8的 ...

  6. Python3.x+Fiddler抓取APP数据

    随着移动互联网的市场份额逐步扩大,手机APP已经占据我们的生活,以往的数据分析都借助于爬虫爬取网页数据进行分析,但是新兴的产品有的只有APP,并没有网页端这对于想要提取数据的我们就遇到了些问题,本章以 ...

  7. JSP中contentType、pageEncoding和meta charset的区别

    1.创建JSP 使用Eclipse创建JSP文件: <%@ page language="java" contentType="text/html; charset ...

  8. dom4j解析xml时报出文件提前结束

    在写javaweb小项目的时候,用dom4j解析xml报出如下错误: org.dom4j.DocumentException:Error    .......    Nested exception: ...

  9. eclipse中启动tomcat出现错误的解决方法

    前段时间跟着老师做课设,各方面调试都没有问题.近段时间想起来,看看之前写过的代码,翻着翻着就发现启动tomcat出现了错误 错误如下: 错误原因:tomcat路径配置有问题,之前可能配置好了然后由于种 ...

  10. java数组与数组异常

    一 数组的定义 1.第一种定义方法: 格式: 数据类型[] 数组名=new 数据类型[数组长度] 2.第二种定义方法: 格式: 类型[] 数组名 = new 类型[]{元素,元素,.....} 3.第 ...