• 通过configmap更新k8s里的mysql配置文件


    背景:

      环境注意:在用rancher搭建的k8s里,mysql是起了一个pod,镜像是网上的mysql:5.7

      开发人员提出了一个报错“查询时的ONLY_FULL_GROUP_BY错误”,让我改sql_mode,当时我觉得这很好改,将数据库的配置文件添加一条sql_mode,重启数据库就行了。

      但是,我起初通过rancher进入到mysql容器里面,执行命令 mysql -uroot -p密码 -e "set @@sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';" 或者是进到mysql里面执行命令或者写到配置文件里重启mysql,会出现一些问题:设置只针对新建的数据,旧的数据还是不起作用;设置只针对这次运行中的容器,下次重启更新pod,配置都会失效;写入配置文件再重启或重载mysql会出现整个pod都会更新,导致配置文件恢复到初始。

      既然不能在容器里面改,也不能修改镜像,所以就从mysql的yaml文件下手。

      思路:

        1.创建configmap,设置配置映射

        2.mysql里使用configmap挂载数据配置

    mysql配置文件---configmap

    apiVersion: v1
    data:
      mysqld.cnf: |-
        [mysqld]
        pid-file        = /var/run/mysqld/mysqld.pid
        socket          = /var/run/mysqld/mysqld.sock
        datadir         = /var/lib/mysql
        #log-error      = /var/log/mysql/error.log
        # By default we only accept connections from localhost
        #bind-address   = 127.0.0.1
        # Disabling symbolic-links is recommended to prevent assorted security risks
        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' kind: ConfigMap metadata: name: mysql-config namespace: gymdev

      其中,mysqld.cnf是数据库配置文件的名称,后面跟的是配置文件的内容,最后一排就是更改报错的配置;metadata--name是这个configmap的名称,后面mysql的yaml里面会调用。

    mysql

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: mysql-dev
      namespace: icourt-dev
      labels:
        app: mysql-dev
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: mysql-dev
      template:
        metadata:
          labels:
            app: mysql-dev
        spec:
          containers:
          - name: mysql
            image: mysql:5.7
            env:
            - name: MYSQL_ROOT_PASSWORD
              value: "密码"
            ports:
            - containerPort: 3306
              protocol: TCP
              name: 3306tcp01
            volumeMounts:
            - mountPath: "/var/lib/mysql"
              name: mysqlpv-icourt-dev
              subPath: mysqldev-icourt-dev
            - name: config-volume                      <--(1)
              mountPath: "/etc/mysql/mysql.conf.d/"    <--(2)
          volumes:
          - name: mysqlpv-icourt-dev
            persistentVolumeClaim:
              claimName: mysqlpvc-icourt-dev
          - name: config-volume                        <--(3)
            configMap:                                 <--(4)
              name: mysql-config                       <--(5)

      其中,(1)表示一个挂载点的名称

         (2)表示新挂载点的路径,这里就是mysql配置文件的路径

            (3)表示挂载点的名称

            (4)使用configmap

            (5)使用名为mysql-config,configmap的name

  • 相关阅读:
    jquery--blur()事件,在页面加载时自动获取焦点
    jquery三级联动
    工具集
    兼容各个浏览器:禁止鼠标选择文字事件
    jquery 事件委托(利用冒泡)
    小功能1:多种方法实现网页加载进度条
    JavaSE| 泛型
    SSM整合
    Redis数据库 02事务| 持久化| 主从复制| 集群
    Hadoop| MapperReduce02 框架原理
  • 原文地址:https://www.cnblogs.com/chy-op/p/9811852.html
Copyright © 2020-2023  润新知