通過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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM