k8s创建数据库

news2024/11/25 22:43:51

 参考配置1

[root@k8s-master1 ~]# cat deployment.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: mysql #为该Deployment设置key为app,value为mysql的标签
  name: mysql
  namespace: test
spec:
  replicas: 1 #副本数量
  selector: #标签选择器,与上面的标签共同作用
    matchLabels: #选择包含标签app:nginx的资源
      app: mysql
  template: #这是选择或创建的Pod的模板
    metadata: #Pod的元数据
      labels: #Pod的标签,上面的selector即选择包含标签app:nginx的Pod
        app: mysql
    spec: #期望Pod实现的功能(即在pod中部署)
      containers: #生成container,与docker中的container是同一种
      - name: mysql
        image: mysql:5.7 #使用镜像mysql: 创建container,该container默认3306端口可访问
        ports:
        - containerPort: 3306  # 开启本容器的3306端口可访问
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: hjj123456   
        volumeMounts: #挂载持久存储卷
        - name: mysql-data  #挂载设备的名字,与volumes[*].name 需要对应
          mountPath: /var/lib/mysql  #挂载到容器的某个路径下
        - name: mysql-dev-conf
          mountPath: /etc/mysql   
          
      volumes:
      - name: mysql-data  #和上面保持一致 这是本地的文件路径,上面是容器内部的路径
        nfs:
          server: 10.0.19.129  #nfs的ip地址
          path: /opt/data/mysql/data  #此路径需要实现创建
      - name: mysql-dev-conf
        nfs:
          server: 10.0.19.129
          name: /opt/data/mysql/cnf   #此路径需要实现创建

参考配置2

---
apiVersion: v1
kind: ConfigMap
metadata:
  name: mysql-config
  namespace: plugins
  labels:
    app: mysql
data:
  my.cnf: |-
    [client]
    default-character-set=utf8mb4
    [mysql]
    default-character-set=utf8mb4
    [mysqld]
    character-set-server = utf8mb4
    collation-server = utf8mb4_unicode_ci
    init_connect='SET NAMES utf8mb4'
    skip-character-set-client-handshake = true
    max_connections=2000
    secure_file_priv=/var/lib/mysql
    bind-address=0.0.0.0
    symbolic-links=0
    sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: mysql
  name: mysql-svc
  namespace: plugins
spec:
  type: NodePort
  ports:
    - name: http
      port: 3306
      nodePort: 30021
      protocol: TCP
      targetPort: 3306
  selector:
    app: mysql
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql
  namespace: plugins
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
        - args:
            - --datadir
            - /var/lib/mysql/datadir
          env:
            - name: MYSQL_ROOT_PASSWORD
              value: root
            - name: MYSQL_USER
              value: user
            - name: MYSQL_PASSWORD
              value: user
          image: mysql:5.7
          name: mysql-container
          ports:
            - containerPort: 3306
              name: dbapi
          volumeMounts:
            - mountPath: /var/lib/mysql
              name: mysql-storage
            - name: config
              mountPath: /etc/mysql/conf.d/my.cnf
              subPath: my.cnf
      volumes:
        - name: mysql-storage
          persistentVolumeClaim:
            claimName: nfs-plugins
        - name: config
          configMap:
            name: mysql-config
        - name: localtime
          hostPath:
            type: File
            path: /etc/localtime

自己配置 ,   nodeName: gem-yxyw-t-c02,分配主机的时候需要查看主机名

实际配置1 

---
apiVersion: v1
kind: ConfigMap
metadata:
  name: mysqldb01-config
  labels:
    app: gem-sale-t-db01
data:
  my.cnf: |-
    [client]
    default-character-set=utf8mb4
    [mysql]
    default-character-set=utf8mb4
    [mysqld]
    character-set-server = utf8mb4
    collation-server = utf8mb4_unicode_ci
    init_connect='SET NAMES utf8mb4'
    skip-character-set-client-handshake = true
    max_connections=2000
    secure_file_priv=/var/lib/mysql
    bind-address=0.0.0.0
    symbolic-links=0
    sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: gem-sale-t-db01
  name: gem-sale-t-db01
spec:
  type: NodePort
  ports:
    - name: http
      port: 3306
      nodePort: 30001
      protocol: TCP
      targetPort: 3306
  selector:
    app: gem-sale-t-db01

---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: gem-sale-t-db01 
  name: gem-sale-t-db01
spec:
  replicas: 1
  selector:
    matchLabels:
      app: gem-sale-t-db01
  template:
    metadata:
      labels:
        app: gem-sale-t-db01
    spec:
      containers:
      - name: gem-sale-t-db01
        image: mysql:5.7
        ports:
        - containerPort: 3306
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: 3!y5cD&%2OWz 
        livenessProbe:
          initialDelaySeconds: 30
          periodSeconds: 10
          timeoutSeconds: 5
          successThreshold: 1
          failureThreshold: 3
          exec:
            command: ["mysqladmin", "-uroot", "-p${MYSQL_ROOT_PASSWORD}", "ping"]
        readinessProbe:  
          initialDelaySeconds: 10
          periodSeconds: 10
          timeoutSeconds: 5
          successThreshold: 1
          failureThreshold: 3
          exec:
            command: ["mysqladmin", "-uroot", "-p${MYSQL_ROOT_PASSWORD}", "ping"]
      volumes:
        - name: config
          configMap:
            name: mysqldb01-config
      nodeName: gem-yxyw-t-c02

 实际配置2

---
apiVersion: v1
kind: ConfigMap
metadata:
  name: mysqldb02-config
  labels:
    app: gem-sale-t-db02
data:
  my.cnf: |-
    [client]
    default-character-set=utf8mb4
    [mysql]
    default-character-set=utf8mb4
    [mysqld]
    character-set-server = utf8mb4
    collation-server = utf8mb4_unicode_ci
    init_connect='SET NAMES utf8mb4'
    skip-character-set-client-handshake = true
    max_connections=2000
    secure_file_priv=/var/lib/mysql
    bind-address=0.0.0.0
    symbolic-links=0
    sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: gem-sale-t-db02
  name: gem-sale-t-db02
spec:
  type: NodePort
  ports:
    - name: http
      port: 3306
      nodePort: 30002
      protocol: TCP
      targetPort: 3306
  selector:
    app: gem-sale-t-db02

---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: gem-sale-t-db02 
  name: gem-sale-t-db02
spec:
  replicas: 1
  selector:
    matchLabels:
      app: gem-sale-t-db02
  template:
    metadata:
      labels:
        app: gem-sale-t-db02
    spec:
      containers:
      - name: gem-sale-t-db02
        image: mysql:5.7
        ports:
        - containerPort: 3306
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: 3!y5cD&%2OWz 
        livenessProbe:
          initialDelaySeconds: 30
          periodSeconds: 10
          timeoutSeconds: 5
          successThreshold: 1
          failureThreshold: 3
          exec:
            command: ["mysqladmin", "-uroot", "-p${MYSQL_ROOT_PASSWORD}", "ping"]
        readinessProbe:  
          initialDelaySeconds: 10
          periodSeconds: 10
          timeoutSeconds: 5
          successThreshold: 1
          failureThreshold: 3
          exec:
            command: ["mysqladmin", "-uroot", "-p${MYSQL_ROOT_PASSWORD}", "ping"]
      volumes:
        - name: config
          configMap:
            name: mysqldb02-config
      nodeName: gem-yxyw-t-c02

 mysql8.0部署

apiVersion: v1
kind: ConfigMap
metadata:
  name: mysql-config
  labels:
    app: mysql
data:
  my.cnf: |-
    [client]
    default-character-set=utf8mb4
    [mysql]
    default-character-set=utf8mb4
    [mysqld] 
    max_connections = 2000
    secure_file_priv=/var/lib/mysql
    sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
## PV
apiVersion: v1
kind: PersistentVolume
metadata:
  name: mysql
  labels:
    app: mysql             #设置 pv 的 label 标签
spec:
  capacity:          
    storage: 20Gi          #设置 pv 存储资源大小 
  accessModes:       
  - ReadWriteOnce
  mountOptions:
  - hard
  - nfsvers=4.1    
  nfs:                     #指定使用 NFS 存储驱动
    server: 10.36.21.220   #指定 NFS 服务器 IP 地址
    path: /data/mysql/GEM-SALE-T-DB04       #指定 NFS 共享目录的位置,且需提前在该目录中创建 mysql 目录
  persistentVolumeReclaimPolicy: Retain  
---
## PVC
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: mysql
spec:
  resources:
    requests:
      storage: 20Gi        #设置 pvc 存储资源大小
  accessModes:
  - ReadWriteOnce
  selector:
    matchLabels:
      app: mysql           #根据 Label 选择对应 PV
## Service
apiVersion: v1
kind: Service
metadata:
  name: mysql
  labels:
    app: mysql
spec:
  type: NodePort
  ports:
  - name: mysql
    port: 3306
    targetPort: 3306
    nodePort: 30336
  selector:
    app: mysql
---
## Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql
  labels:
    app: mysql
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:     
      containers:
      - name: mysql
        image: mysql:8.0.19
        ports:
        - containerPort: 3306
        env:
        - name: MYSQL_ROOT_PASSWORD    ## 配置Root用户默认密码
          value: "123456"
        resources:
          limits:
            cpu: 2000m
            memory: 512Mi
          requests:
            cpu: 2000m
            memory: 512Mi
        livenessProbe:
          initialDelaySeconds: 30
          periodSeconds: 10
          timeoutSeconds: 5
          successThreshold: 1
          failureThreshold: 3
          exec:
            command: ["mysqladmin", "-uroot", "-p${MYSQL_ROOT_PASSWORD}", "ping"]
        readinessProbe:  
          initialDelaySeconds: 10
          periodSeconds: 10
          timeoutSeconds: 5
          successThreshold: 1
          failureThreshold: 3
          exec:
            command: ["mysqladmin", "-uroot", "-p${MYSQL_ROOT_PASSWORD}", "ping"]
        volumeMounts:
        - name: data
          mountPath: /var/lib/mysql
        - name: config
          mountPath: /etc/mysql/conf.d/my.cnf
          subPath: my.cnf
        - name: localtime
          readOnly: true
          mountPath: /etc/localtime
      volumes:
      - name: data
        persistentVolumeClaim:
          claimName: mysql
      - name: config      
        configMap:
          name: mysql-config
      - name: localtime
        hostPath:
          type: File
          path: /etc/localtime
      nodeName: gem-yxyw-t-c02


 mkdir -p /data/mysql/GEM-SALE-T-DB01/mysql-data

mkdir -p /data/mysql/GEM-SALE-T-DB02/mysql-data

参数简介:

show variables like '%max_connections%';    #查数据库最大连接数确定配置是否生效

  • ports: 配置镜像映射端口。

  • env: 镜像环境变量配置,其中 MYSQL_ROOT_PASSWORD 是 Mysql 镜像用于配置 root 用户默认密码变量。

  • resources: 配置 CPU、Memory 资源限制,可以通过配置该值来配置 Pod 的 QoS 级别。

  • livenessProbe: 配置存活探针,定时检测 Mysql 应用运行状态,如果检测到 Mysql 挂掉将进行重启操作。

  • readinessProbe: 配置就绪探针,定时检测 Mysql 应用启动状态,如果启动成功将允许流量涌入,启动失败将进行重启操作。

  • command: 探针执行探测时执行的探测命令。

  • volumeMounts: 存储卷挂载配置,用于镜像内存储的挂载配置,与 volumes 中对于的 name 进行绑定。

  • volumes: 存储卷配置,可配置使用 pvc、hostPath、emptyDir、nfs 等存储,需要配置 name 值与 VolumeMounts 进行绑定。

  • 在镜像内部命令行中输入 mysql 登录命令,测试是否能够正常登录:

    $ mysql -h 10.36.21.220 -P 30336 --user=root --password=123456
    mysql -h 10.36.21.220 -P 30336 -uroot -p'123456'

导出导入数据库

导出数据库所有库
mysqldump -h 127.0.0.1 -uroot -p"Gd*(53#SALE" -R -E --all-databases  >back.sql
导入数据库所有库
mysql -h 10.36.21.220 -P 30004 -uroot -p'3!y5cD&%2OWz' <back.sql

k8s的mysql的pod误删之后数据恢复,

gem-sale-t-db04被删除之后,挂载的数据卷还在/data/mysql/GEM-SALE-T-DB04/mysql-data,我们从新创建一个pod把数据拷贝到新的挂载卷,数据库就自动恢复了

cd /data/mysql/GEM-SALE-T-DB06/mysql-data

 \cp -rf /data/mysql/GEM-SALE-T-DB04/mysql-data/* ./

数据恢复

docker容器数据恢复

恢复步骤
1. 查找数据卷位置

数据卷目录在 /var/lib/docker/volumes 下,每个容器都会在该目录下有一个文件夹,如果容器还存在的话,我们可以使用 docker inspect 容器ID 去查看 数据卷位置,这下容器被删除了,可怎么办,只能挨个去找了,一般 MySQL 容器数据卷目录下会有一个 _data 目录,该目录下会显示你每个数据库的文件夹,最终找到了

2. 创建新数据卷

使用 docker volume create 数据卷名字 命令新建一个数据卷,docker volume ls 查看数据卷列表

docker volume create mysqldata
docker volume ls
注意:使用数据卷进行挂载的时候,数据卷必须是一个空的目录,也就是说不能有任何数据。

创建容器
执行创建指令:
docker run -d -p 3306:3306 --name mysql -v mysqldata:/var/lib/mysql -e MYSQL\_ROOT\_PASSWORD=123456 -d mysql:5.7
恢复数据之前需要把刚刚建立的数据卷里面关联的内容删除掉,然后把之前的数据卷内容复制到现在的数据卷进行数据恢复。
cd /var/lib/docker/volumes/mysqldata/_data/
rm -f *
rm -f -R *
复制内容到数据卷
cd /var/lib/docker/volumes/容器id/_data/
cp -R * /var/lib/docker/volumes/mysqldata/_data/
至此数据库数据恢复完成,需要重启下mysql容器,进入恢复的容器查看

docker stop mysql
docker start mysql

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/154062.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深挖你拥有的东西的背后的价值到底是什么,价值转换模型分析。

深挖你拥有的东西的背后的价值到底是什么。 我们先把它转换成为观众观看这条视频的动机&#xff0c;甚至是观众关注账号的动机。 例如你能帮助别人赚钱&#xff0c;你能帮助别人变美。你提供的价值是成长的价值&#xff0c;你提供的价值是精神追求的价值&#xff0c;是生活理念…

【ROS】—— ROS常用组件—rosbag与rqt工具箱(十二)

文章目录前言1. rosbag1.1 rosbag使用_命令行2. rosbag使用_编码2.1 C实现2.1.1 写bag2.1.2 读bag2.2 python实现2.2.1 写bag2.2.2 读bag3. rqt工具箱3.1 rqt安装启动与基本使用3.2 rqt常用插件:rqt_graph3.3 rqt常用插件:rqt_console3.4 rqt常用插件:rqt_plot3.5 rqt常用插件:…

python算法与数据结构2-栈、队列、排序算法

目录1、栈1.1 栈的介绍1.2 栈的代码实现2、队列2.1 队列的介绍2.2 队列的代码实现3、双端队列4、数据结构与算法_排序算法4.1 排序算法的稳定性4.2 冒泡排序4.3 选择排序4.4 插入排序4.5 快速排序1、栈 1.1 栈的介绍 栈&#xff1a;运算受限的线性表&#xff0c;其限制是仅允…

黑盒测试用例设计 - 功能图法

目录功能图法原理介绍功能图法步骤案例&#xff1a;以QQ登录界面为例功能图法原理介绍 功能图方法其实是一种灰盒测试&#xff08;因其兼有黑盒和白盒测试&#xff09;用例设计方法&#xff1b;通常情况一个程序的功能说明通常由动态说明和静态说明组成&#xff0c;动态说明描…

UG/NX 二次开发(C#)自动出2D零件图思路

一、前言 项目需要自动出2D零件图&#xff0c;可是我之前没做过这方面的内容&#xff0c;没有一点思路。然后我就做了下面几件事&#xff1a; 1、百度、google翻了一遍&#xff0c;搜索关键字“UG二次开发自动出图” 2、csdn.com 和 cnblogs.com翻了一遍 3、平时逛的qq技术…

数字图像处理(第四版)-冈萨雷斯-学习过程的笔记

作者介绍1.绪论自己读书存在一个问题&#xff0c;书太厚&#xff0c;重点难以把握&#xff0c;对如此经典的书籍&#xff0c;希望自己的学习历程和重点记录下来。 目前在持续更新和学习中&#xff0c;觉得有帮助的话可以先收藏和关注我博客的内容--更新于2023/1/102.数字图像基…

C语言进阶——自定义类型——结构体

目录 一. 结构体类型的声明 结构体的声明 特殊的声明 二. 结构的自引用 三. 结构体变量的定义和初始化 定义 初始化 四. 结构体内存对齐 未完待续 一. 结构体类型的声明 结构体的声明 结构是一些值的集合&#xff0c;这些值称为成员变量。结构的每个成员可以…

08-Alibaba微服务组件Nacos配置中心实战源码分析

Nacos配置中心源码分析 Config相关配置 Nacos 数据模型 Key 由三元组唯一确定, Namespace默认是空串&#xff0c;公共命名空间&#xff08;public&#xff09;&#xff0c;分组默认是DEFAULT_GROUP 配置中心的架构 nacos config client源码分析 获取配置 获取配置的主要方…

windows配置java环境

windows配置java环境下载JDK安装JDK配置环境变量java9及以上版本配置环境变量&#xff08;以java17为例&#xff0c;只需要配置JAVA_HOME和Path变量&#xff09;配置JAVA_HOME变量配置Path变量java8及以下版本配置环境变量&#xff08;以java8为例&#xff0c;需要配置JAVA_HOM…

Unity官方本地化插件localization

官方文档地址&#xff1a;https://docs.unity3d.com/Packages/com.unity.localization1.0/manual/QuickStartGuideWithVariants.html 使用流程 安装 PackageManager搜索Localization完成对应插件的安装 配置 PlayerSetting->Localization 创建本地化相关配置 创建之后点…

python的安装以及pycharm的配置

大家好&#xff0c;我是csdn的博主&#xff1a;lqj_本人 这是我的个人博客主页&#xff1a;lqj_本人的博客_CSDN博客-微信小程序,html特效,vue2基础领域博主 哔哩哔哩欢迎关注&#xff1a;小淼前端 小淼前端的个人空间_哔哩哔哩_bilibili 本篇文章主要讲述python的安装以及pych…

【Linux】小程序进度条

目录回车换行问题日常中的换行代码中的回车换行倒计时函数进度条回车换行问题 日常中的换行 即&#xff1a; 回车&#xff1a;回到当前行的最开始 换行&#xff1a;列不变&#xff0c;新起一行 代码中的回车换行 我们先看一段代码&#xff1a; 这个是带\n的 &#x1f30d;结…

什么是运动神经元 你们真的知道吗

大家好&#xff0c;你们知道什么运动神经元吗&#xff0c;你们有误入这些误区吗&#xff1f; 运动神经元是一种神秘的疾病&#xff0c;导致的原因尚且不明确。这种疾病的发生可能是体内的运动神经元细胞的减少或是凋亡导致的&#xff0c;是一种慢性发展的神经类疾病。虽然导致运…

【晶振】NTP网络校时服务器(卫星时钟)电路里的主心跳

【晶振】NTP网络校时服务器&#xff08;卫星时钟&#xff09;电路里的主心跳 【晶振】NTP网络校时服务器&#xff08;卫星时钟&#xff09;电路里的主心跳 晶振是NTP网络校时服务器&#xff08;卫星时钟&#xff09;电路板数字电路的&#xff02;心跳&#xff02;&#xff0c;在…

阿狸(Hans设计卡通形象)的幸福生活 ---- 充满趣味性(可自定义更改)

Ali the fox 目录 一、前言 二、关于代码 三、效果展示 四、详细介绍 五、编码实现 index.html css 文件夹 88rh.css js 文件夹 img 文件夹 fonts 文件夹 六、获取源码 需要源码&#xff0c;可以私信我(⊙o⊙)&#xff1f;关注我&#xff1f; 一、前言 时光荏苒&…

MyBatis­Plus快速入门

介绍 MyBatisPlus&#xff08;简称 MP&#xff09;是一个 MyBatis的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。 特性&#xff1a; 无侵入&#xff1a;只做增强不做改变&#xff0c;引入它不会对现有工程产生影响&#xf…

冰冰学习笔记:异常处理

欢迎各位大佬光临本文章&#xff01;&#xff01;&#xff01; 还请各位大佬提出宝贵的意见&#xff0c;如发现文章错误请联系冰冰&#xff0c;冰冰一定会虚心接受&#xff0c;及时改正。 本系列文章为冰冰学习编程的学习笔记&#xff0c;如果对您也有帮助&#xff0c;还请各位…

Github-Action-Workflow-概念和基本操作

workflow 文件 GitHub Actions 的配置文件叫做 workflow文件&#xff0c;存放在代码仓库的.github/workflows/目录下。比如写一个first.yaml文件&#xff0c;存储的目录就是.github/workflows/first.yaml workflow/下的文件采用 YAML 格式&#xff0c;文件名可以任意取&#xf…

代码随想录第56天|● 583. 两个字符串的删除操作 ● 72. 编辑距离

583.两个字符串的删除操作 思路一 dp[i][j]&#xff1a;以i-1为结尾的字符串word1&#xff0c;和以j-1位结尾的字符串word2&#xff0c;想要达到相等&#xff0c;所需要删除元素的最少次数。 当word1[i - 1] 与 word2[j - 1]相同的时候 dp[i][j] dp[i - 1][j - 1];当word1[…

检修盒面板AI视觉检测系统,赋能工业发展!

制造业是中国工业化的源头&#xff0c;也是工业生产大国。任何一步的质量都可能影响生产过程的变化。表面缺陷不仅影响产品的美观和舒适性&#xff0c;还会对其性能产生不良影响。因此&#xff0c;制造商对产品的表面缺陷检测非常重视。传统的检修盒面板按钮安装是否正确的质量…