kubernetes-v1.23.3 部署 MySQL-5.7.31

2023-10-03 16:12

本文主要是介绍kubernetes-v1.23.3 部署 MySQL-5.7.31,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • @[toc]
    • 部署 MySQL
      • 配置 mysql configmap
      • 配置 mysql svc
      • 配置 mysql deployment
      • 配置 mysql cronjob
    • 配置 mysql-web
      • 配置 mysql-web svc
      • 配置 mysql-web deployment

部署 MySQL

配置 mysql configmap

---
apiVersion: v1
data:mysqld.cnf: |-[mysqld]pid-file        = /var/run/mysqld/mysqld.pidsocket          = /var/run/mysqld/mysqld.sockdatadir         = /var/lib/mysqlbind-address   = 0.0.0.0server_id = 1918default-time-zone='+08:00'# Disabling symbolic-links is recommended to prevent assorted security riskssymbolic-links=0max_connections=1024default_storage_engine=innodbskip_external_lockinglower_case_table_names=1skip_host_cacheskip_name_resolvecharacter_set_server=utf8mb4max_allowed_packet = 12Msql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'# ---------- binlog & errorlog & slowlog ---------- #log_bin = mysql-binbinlog_format = ROWmax_binlog_size = 100mbinlog_cache_size = 4mmax_binlog_cache_size = 512mexpire_logs_days = 7log-error      = /var/lib/mysql/error.logslow-query-log = onslow_query_log_file = /var/lib/mysql/slow.loglong_query_time = 1[client]default-character-set=utf8mb4
kind: ConfigMap
metadata:annotations:labels:app: mysqlname: mysql-cmnamespace: bigdata

配置 mysql svc

---
apiVersion: v1
kind: Service
metadata:annotations:labels:app: mysqlname: mysql-svcnamespace: bigdata
spec:ports:- name: mysqlport: 3306protocol: TCPtargetPort: 3306selector:app: mysql

配置 mysql deployment

mysql 的数据目录使用的 hostpath 的方式,通过亲和性来绑定节点,需要提前给对应的节点打上 mysql= 这样的标签

kubectl label node <nodename> mysql=
---
apiVersion: apps/v1
kind: Deployment
metadata:annotations:labels:app: mysqlname: mysqlnamespace: bigdata
spec:replicas: 1selector:matchLabels:app: mysqltemplate:metadata:labels:app: mysqlspec:affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: mysqloperator: Existscontainers:- name: mysqlenv:- name: APP_NAMEvalue: mysql- name: NODE_NAMEvalueFrom:fieldRef:fieldPath: spec.nodeName- name: POD_NAMEvalueFrom:fieldRef:fieldPath: metadata.name- name: NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespace- name: MYSQL_ROOT_USERvalue: root- name: MYSQL_ROOT_PASSWORDvalue: YWJjMTIzCg==- name: TZvalue: Asia/Shanghai- name: LANGvalue: en_US.UTF-8image: mysql:5.7.31imagePullPolicy: IfNotPresentlivenessProbe:exec:command:- /bin/bash- -c- mysql -u${MYSQL_ROOT_USER} -p${MYSQL_ROOT_PASSWORD} -e 'SELECT 1'initialDelaySeconds: 30periodSeconds: 30timeoutSeconds: 10ports:- containerPort: 3306name: mysqlprotocol: TCPreadinessProbe:exec:command:- /bin/bash- -c- mysql -u${MYSQL_ROOT_USER} -p${MYSQL_ROOT_PASSWORD} -e 'SELECT 1'initialDelaySeconds: 30periodSeconds: 30timeoutSeconds: 10volumeMounts:- mountPath: /var/lib/mysqlname: mysql-data-dir- mountPath: /etc/mysql/conf.d/name: mysql-configdnsPolicy: ClusterFirstrestartPolicy: AlwayssecurityContext: {}terminationGracePeriodSeconds: 10volumes:- name: mysql-data-dirhostPath:path: /data/k8s_data/mysqltype: DirectoryOrCreate- name: mysql-configconfigMap:name: mysql-cm

配置 mysql cronjob

  • 和 deployment 的一样,需要给节点打上 mysql-back= 的标签
  • 注意 schedule 的时间是和 controller-manager 组件的时区一样的,如果是 kubeadm 部署的,就要注意容器内的时间是不是和本地相差八小时
---
apiVersion: batch/v1
kind: CronJob
metadata:name: mysql-backupnamespace: bigdata
spec:schedule: "0 1 * * *"successfulJobsHistoryLimit: 3failedJobsHistoryLimit: 3jobTemplate:spec:template:spec:affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: mysql-backoperator: Existscontainers:- name: mysql-backupimagePullPolicy: IfNotPresentimage: mysql:5.7.31env:- name: MYSQL_ROOT_USERvalue: root- name: MYSQL_ROOT_PASSWORDvalue: YWJjMTIzCg==- name: MYSQL_HOSTvalue: mysql-svc.bigdata.svc.cluster.local- name: TZvalue: Asia/Shanghai- name: LANGvalue: en_US.UTF-8command:- /bin/sh- -c- |set -exmysqldump --host=${MYSQL_HOST} --user=${MYSQL_ROOT_USER} \--password=${MYSQL_ROOT_PASSWORD} \--routines --all-databases --single-transaction \> /mysql-backup/mysql-$(date +"%Y%m%dT%H_%M_%S").sql && find /mysql-backup/ -type f -mtime +3 -exec rm -rf {} \;volumeMounts:- name: mysql-backupmountPath: /mysql-backuprestartPolicy: OnFailurevolumes:- name: mysql-backuphostPath:path: /data/k8s_data/mysql-backtype: DirectoryOrCreate

配置 mysql-web

  • phpmyadmin-github
  • phpmyadmin-docker-github
  • 这个是 mysql 的图形化界面

配置 mysql-web svc

  • 如果有 ingress,可以配置成 clusterip 的模式
  • 如果没有 ingress,可以配置成 nodeport 的模式
  • 下面两个都配置了,可以各取所需
    • 下面的 nodeport 配置了 30003 端口,需要检查一下自己本地有没有被占用,也可以自己随意修改,端口范围值一般是 30000-32767,具体要看 apiserver 的配置
---
apiVersion: v1
kind: Service
metadata:namespace: bigdataname: phpmyadminlabels:app: phpmyadmin
spec:ports:- port: 80targetPort: 80protocol: TCPname: httpselector:app: phpmyadmin
---
apiVersion: v1
kind: Service
metadata:namespace: bigdataname: phpmyadmin-nplabels:app: phpmyadmin
spec:type: NodePortports:- port: 80targetPort: 80protocol: TCPname: http-npnodePort: 30003selector:app: phpmyadmin

配置 mysql-web deployment

  • 下面的 PMA_HOST 需要替换成自己的 mysql 地址
  • 下面的 PMA_PORT 需要替换成自己的 mysql 端口
---
apiVersion: apps/v1
kind: Deployment
metadata:annotations:labels:app: phpmyadminname: phpmyadminnamespace: bigdata
spec:replicas: 1selector:matchLabels:app: phpmyadmintemplate:metadata:annotations:labels:app: phpmyadminspec:containers:- name: phpmyadminimage: phpmyadmin/phpmyadmin:latestimagePullPolicy: IfNotPresentports:- containerPort: 80env:- name: PMA_HOSTvalue: mysql-svc.bigdata.svc.cluster.local- name: PMA_PORTvalue: "3306"

pod 变成 running 之后,就可以通过 ip 加 nodeport 的方式来访问了,使用 mysql 数据库内的用户名和密码登录,可以自己先提前在 mysql 数据库里面创建好

这篇关于kubernetes-v1.23.3 部署 MySQL-5.7.31的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/582

相关文章

MySQL 中的 CAST 函数详解及常见用法

《MySQL中的CAST函数详解及常见用法》CAST函数是MySQL中用于数据类型转换的重要函数,它允许你将一个值从一种数据类型转换为另一种数据类型,本文给大家介绍MySQL中的CAST... 目录mysql 中的 CAST 函数详解一、基本语法二、支持的数据类型三、常见用法示例1. 字符串转数字2. 数字

Mysql实现范围分区表(新增、删除、重组、查看)

《Mysql实现范围分区表(新增、删除、重组、查看)》MySQL分区表的四种类型(范围、哈希、列表、键值),主要介绍了范围分区的创建、查询、添加、删除及重组织操作,具有一定的参考价值,感兴趣的可以了解... 目录一、mysql分区表分类二、范围分区(Range Partitioning1、新建分区表:2、分

MySQL 定时新增分区的实现示例

《MySQL定时新增分区的实现示例》本文主要介绍了通过存储过程和定时任务实现MySQL分区的自动创建,解决大数据量下手动维护的繁琐问题,具有一定的参考价值,感兴趣的可以了解一下... mysql创建好分区之后,有时候会需要自动创建分区。比如,一些表数据量非常大,有些数据是热点数据,按照日期分区MululbU

MySQL 删除数据详解(最新整理)

《MySQL删除数据详解(最新整理)》:本文主要介绍MySQL删除数据的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、前言二、mysql 中的三种删除方式1.DELETE语句✅ 基本语法: 示例:2.TRUNCATE语句✅ 基本语

MySQL中查找重复值的实现

《MySQL中查找重复值的实现》查找重复值是一项常见需求,比如在数据清理、数据分析、数据质量检查等场景下,我们常常需要找出表中某列或多列的重复值,具有一定的参考价值,感兴趣的可以了解一下... 目录技术背景实现步骤方法一:使用GROUP BY和HAVING子句方法二:仅返回重复值方法三:返回完整记录方法四:

从入门到精通MySQL联合查询

《从入门到精通MySQL联合查询》:本文主要介绍从入门到精通MySQL联合查询,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下... 目录摘要1. 多表联合查询时mysql内部原理2. 内连接3. 外连接4. 自连接5. 子查询6. 合并查询7. 插入查询结果摘要前面我们学习了数据库设计时要满

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

mysql表操作与查询功能详解

《mysql表操作与查询功能详解》本文系统讲解MySQL表操作与查询,涵盖创建、修改、复制表语法,基本查询结构及WHERE、GROUPBY等子句,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随... 目录01.表的操作1.1表操作概览1.2创建表1.3修改表1.4复制表02.基本查询操作2.1 SE

MySQL中的锁机制详解之全局锁,表级锁,行级锁

《MySQL中的锁机制详解之全局锁,表级锁,行级锁》MySQL锁机制通过全局、表级、行级锁控制并发,保障数据一致性与隔离性,全局锁适用于全库备份,表级锁适合读多写少场景,行级锁(InnoDB)实现高并... 目录一、锁机制基础:从并发问题到锁分类1.1 并发访问的三大问题1.2 锁的核心作用1.3 锁粒度分

MySQL数据库中ENUM的用法是什么详解

《MySQL数据库中ENUM的用法是什么详解》ENUM是一个字符串对象,用于指定一组预定义的值,并可在创建表时使用,下面:本文主要介绍MySQL数据库中ENUM的用法是什么的相关资料,文中通过代码... 目录mysql 中 ENUM 的用法一、ENUM 的定义与语法二、ENUM 的特点三、ENUM 的用法1