首页 > 数据库 >单机部署MySQL

单机部署MySQL

时间:2022-10-02 00:22:23浏览次数:52  
标签:name 单机 部署 MySQL infra mysql password root

一、单机部署MySQL

  • 单机部署后面不考虑组集群可以采用此方案,主从集群建议使用StatefulSet方式部署

1.1、MySQL密码

  • 密码存储在secret,通过环境变量方式挂到容器中

  • mysql-secret.yaml【MySQL密码secret】

  • echo -n root | base64 必须加 -n 否认环境变量会换行【这种方式也不行,mysql -uroot -p的时候密码会报错】

  • 正确的方法:需要使用这种重定向到文件中

    • kubectl create secret generic  password-secrets --from-literal=mysql_root_username=root --from-literal=mysql_root_password=root123 -n infra --dry-run=client -oyaml
      
apiVersion: v1
data:
  mysql_root_password: cm9vdDEyMw==
  mysql_root_username: cm9vdA==
kind: Secret
metadata:
  creationTimestamp: "2022-09-30T10:38:01Z"
  managedFields:
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:data:
        .: {}
        f:mysql_root_password: {}
        f:mysql_root_username: {}
      f:type: {}
    manager: kubectl-create
    operation: Update
    time: "2022-09-30T10:38:01Z"
  name: password-secrets
  namespace: infra
  resourceVersion: "3625749"
  selfLink: /api/v1/namespaces/infra/secrets/password-secrets
  uid: 08bdaa44-9c4d-4ef1-8f79-b8012bfd39ea
type: Opaque

1.2、MySQL编排文件

  • namespace.yaml
  • 或者用命令创建【kubectl create ns infra】
apiVersion: v1
kind: Namespace
metadata:
  name: infra
  • MySQL PV、PVC、SC 【目前公司生产也是用这种】
    • 这里采用local-pv
    • mysql-sc.yaml 、mysql-pvc.yaml、mysql-pv.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: infra-mysql-sc
  namespace: infra
provisioner: kubernetes.io/no-provisioner
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: infra-mysql-pvc
  namespace: infra
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
  storageClassName: infra-mysql-sc
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: infra-mysql-pv
spec:
  capacity:
    storage: 5Gi
  volumeMode: Filesystem
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Delete
  storageClassName: infra-mysql-sc
  local:
    path: /admin/mysql/  # k8s-node01节点上的目录
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - k8s-node01
  • mysql-cnf.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: mysql-config
  namespace: infra
data:
  mysqld.cnf: |-
    [mysqld]
    default-time_zone='+8:00'
    datadir=/var/lib/mysql
    symbolic-links=0
    max_connections=1000
    max_allowed_packet = 1000M
    character-set-server=utf8
    sql_mode ='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION'
  • mysql-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: infra-mysql
  namespace: infra
  labels:
    app: infra-mysql
    tier: mysql
spec:
  replicas: 1
  selector:
    matchLabels:
      app: infra-mysql
      tier: mysql
  template:
    metadata:
      labels:
        app: infra-mysql
        tier: mysql
    spec:
      nodeSelector:
        kubernetes.io/hostname: k8s-node01
      containers:
      - name: mysql
        image: mysql:5.7
        imagePullPolicy: IfNotPresent
        args:  # 新版本镜像有更新,需要使用下面的认证插件环境变量配置才会生效
        - --default_authentication_plugin=mysql_native_password
        - --character-set-server=utf8mb4
        - --collation-server=utf8mb4_unicode_ci
        volumeMounts:                         # 容器内挂载点的定义部分
          - name: time-zone                   # 容器内挂载点名称
            mountPath: /etc/localtime         # 容器内挂载点路径,可以是文件或目录
          - name: mysql-data
            mountPath: /var/lib/mysql         # 容器内mysql的数据目录
          - name: mysqlcnf                               # 引用 Volume的名称
            mountPath: /etc/mysql/conf.d/mysqld.cnf      # 挂载到容器内的目录,这写全路径否则还是会覆盖
            subPath: mysqld.cnf                          # 不会覆盖掉原本的路径下的文件,subpath的值必须是configMap中data下的key值
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 3306
          name: dbport               # 起个名字,svc可以使用这个名字关联后端pod的端口,更改端口就不需要更改svc
        env:                         # 使用env挂载环境变量可以清晰看出来使用了哪些环境变量,还可以自定义pod内环境变量名称
          - name: POD_NAMESPACE      # 环境变量名
            valueFrom:               # value来源
              fieldRef:
                apiVersion: v1
                fieldPath: metadata.namespace    # 挂载名称空间进去
          - name: MYSQL_ROOT_USERNAME            # 环境变量名==secret中key对应的value
            valueFrom:
              secretKeyRef:
                name: password-secrets           # secret 名称
                key: mysql_root_username         # secret中key的name
          - name: MYSQL_ROOT_PASSWORD
            valueFrom:
              secretKeyRef:
                name: password-secrets
                key: mysql_root_password
      volumes:
      - name: mysqlcnf                        # 引用 Volume的名称
        configMap:
          name: mysql-config                  # 使用ConfigMap "mysql-config"
      - name: time-zone                       # 数据卷名称,需要与容器内挂载点名称一致
        hostPath:
          path: /etc/localtime                # 挂载到容器里的路径,将localtime文件挂载到容器里,可让容器使用本地的时区
      - name: mysql-data
        persistentVolumeClaim:                # 使用PVC进行挂载
          claimName: infra-mysql-pvc          # PVC name;  本地存放mysql数据的目录

1.3、创建MySQL的Service

  • mysql-svc.yaml
apiVersion: v1
kind: Service
metadata:
  name: infra-mysql
  namespace: infra
  labels:
    app: infra-mysql
spec:
  ports:
  - port: 3306
    targetPort: dbport
  selector:
    app: infra-mysql
    tier: mysql

1.4、检测MySQL是否正常使用

# 查看环境变量是否生效
[root@k8s-master01 ~]# kubectl  exec -it  -n infra  infra-mysql-656f47c8d5-q6lsx -- env | grep -i mysql
HOSTNAME=infra-mysql-656f47c8d5-q6lsx
MYSQL_ROOT_PASSWORD=root123
MYSQL_ROOT_USER=root
MYSQL_MAJOR=5.7
MYSQL_VERSION=5.7.23-1debian9

# 是否能用root用户连接
[root@k8s-master01 ~]# kubectl exec -it -n infra  infra-mysql-7b7776d7d6-2kc29 -- bash
root@infra-mysql-7b7776d7d6-2kc29:/# mysql -uroot -proot123
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.36 MySQL Community Server (GPL)

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

标签:name,单机,部署,MySQL,infra,mysql,password,root
From: https://www.cnblogs.com/hsyw/p/16748063.html

相关文章

  • MYSQL学习笔记之 表
    (一)语法格式createtable表名(字段名1数据类型,字段名2数据类型...);或createtable表名(字段名1 数据类型,字段名2 数据类型,字段名3 数据类型​);说明:① 表名:建议以t_......
  • day02-MySQL基础知识
    MySQL基础知识1.数据库1.1.创建数据库语法:CREATEDATABASE[IFNOTEXISTS]db_name[create_specification[,create_specification]...]create_specification:......
  • 【云原生】Hive on k8s 环境部署
    目录一、概述二、开始部署1)构建镜像2)添加Metastore服务编排1、配置2、控制器3、Service3)添加HiveServer2服务编排1、控制器2、Service4)修改values.yaml5)开始部署6)测试......
  • MYSQL学习笔记之子查询
    (一)基本介绍     select语句中可以嵌套select语句,被嵌套的select语句被称为子查询。(二)应用场景   select...(select) from...(select) where...(sele......
  • MYSQL学习之连接查询
    (一)连接查询?    从一张表中单独查询,称为单表查询。   emp表和dept表联合起来进行查询数据,从emp表中取员工名字,从dept表中取部门名字,这种跨表查询,多张表联合起来进......
  • mysql安装后无法启动,升级/降级/重新安装后无法启动问题mysqld: Can‘t open file: ‘m
    1.报错Loaded:loaded(/usr/lib/systemd/system/mysqld.service;enabled;vendorpreset:disabled)Active:failed(...日志/var/log/mysqld.log...mysqld:C......
  • k8s helm方式部署夜莺监控系统
    一、夜莺介绍   Nightingale|夜莺监控,一款先进的开源云原生监控分析系统,采用All-In-One的设计,集数据采集、可视化、监控告警、数据分析于一体,与云原生生态紧密......
  • 【MySQL】MySQL分区是如何处理NULL的
    MySQL的分区实现中,认为NULL比任何non-NULL值都小。和orderby类似。​RANGE分区是如何处理NULL的?如果将行插入到按RANGE分区的表中,使得用于确定分区的列值为NULL,则该行将......
  • mysql中的事务隔离级别序列化如何实现
    ......
  • mysql基础(十六):定义条件、定义处理程序
    简介定义条件是事先定义程序执行过程中可能遇到的问题,处理程序定义了在遇到问题时应当采取的处理方式,并且保证存储过程或函数在遇到警告或错误时能继续执行。这样可以增......