背景:
環境注意:在用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