k8s mysql 配置文件_更新k8s里的mysql配置文件

标签:

背景:

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

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

65ae33416463480c0bd4118542b5d2ef.png

但是,我起初通过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,设置配置映射

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以回答这个问题。写一个 k8sMySQL YAML 文件需要指定以下内容: 1. 镜像名称和版本号 2. 容器名称 3. 环境变量,包括 MySQL 的用户名、密码、数据库名称等 4. 挂载卷,用于持久化数据 5. 端口号和服务类型 一个示例的 MySQL YAML 文件如下: ``` apiVersion: v1 kind: Service metadata: name: mysql labels: app: mysql spec: ports: - port: 3306 targetPort: 3306 selector: app: mysql type: ClusterIP --- apiVersion: apps/v1 kind: Deployment metadata: name: mysql spec: selector: matchLabels: app: mysql replicas: 1 template: metadata: labels: app: mysql spec: containers: - name: mysql image: mysql:5.7 env: - name: MYSQL_ROOT_PASSWORD value: password - name: MYSQL_DATABASE value: mydb - name: MYSQL_USER value: user - name: MYSQL_PASSWORD value: password ports: - containerPort: 3306 volumeMounts: - name: mysql-persistent-storage mountPath: /var/lib/mysql volumes: - name: mysql-persistent-storage persistentVolumeClaim: claimName: mysql-pv-claim ``` ### 回答2: 在使用Kubernetes(K8s)来部署和管理MySQL数据库时,我们可以使用YAML文件来定义MySQL的Deployment、Service和PersistentVolumeClaim对象。 首先,我们需要创建一个Deployment对象来定义MySQL的部署配置。以下是一个简单的MySQL Deployment的YAML文件示例: ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: mysql spec: selector: matchLabels: app: mysql replicas: 1 template: metadata: labels: app: mysql spec: containers: - name: mysql image: mysql:latest env: - name: MYSQL_ROOT_PASSWORD value: your_password_here ports: - containerPort: 3306 volumeMounts: - name: mysql-persistent-storage mountPath: /var/lib/mysql volumes: - name: mysql-persistent-storage persistentVolumeClaim: claimName: mysql-pvc ``` 在这个示例中,我们创建了一个名为`mysql`的Deployment对象,使用了`mysql:latest`镜像,并将MySQL的root密码设置为`your_password_here`。我们还定义了一个名为`mysql-persistent-storage`的PersistentVolumeClaim对象,用于将MySQL的数据持久化存储。 接下来,我们需要创建一个Service对象,用于暴露MySQL Deployment给其他的应用程序。以下是一个简单的MySQL Service的YAML文件示例: ```yaml apiVersion: v1 kind: Service metadata: name: mysql-service spec: selector: app: mysql ports: - protocol: TCP port: 3306 targetPort: 3306 type: ClusterIP ``` 在这个示例中,我们创建了一个名为`mysql-service`的Service对象,将MySQL Deployment中的`app: mysql`标签用于选择要暴露的Deployment。Service对象使用了TCP协议,并将端口3306映射到MySQL容器的端口3306。 最后,我们可以将这些YAML文件通过kubectl命令进行部署,例如: ``` kubectl apply -f mysql-deployment.yaml kubectl apply -f mysql-service.yaml ``` 这样,Kubernetes将会根据我们定义的YAML文件来创建和管理MySQL的Deployment和Service对象,从而实现MySQL的部署和访问。 ### 回答3: 在Kubernetes中使用MySQL的方式是通过编写一个MySQL的yaml文件来定义和部署MySQL实例。下面是一个示例的MySQL的yaml文件: ```yaml apiVersion: v1 kind: Service metadata: name: mysql-service spec: selector: app: mysql ports: - protocol: TCP port: 3306 targetPort: 3306 --- apiVersion: apps/v1 kind: Deployment metadata: name: mysql-deployment spec: selector: matchLabels: app: mysql replicas: 1 template: metadata: labels: app: mysql spec: containers: - name: mysql image: mysql:latest env: - name: MYSQL_ROOT_PASSWORD value: rootpassword ports: - containerPort: 3306 volumeMounts: - name: mysql-persistent-storage mountPath: /var/lib/mysql resources: requests: memory: "1Gi" # 设置内存请求 cpu: "500m" # 设置CPU请求 volumes: - name: mysql-persistent-storage persistentVolumeClaim: claimName: mysql-pvc ``` 上述yaml文件涵盖了Kubernetes中创建和部署MySQL实例所需的关键信息和配置。其中,Service部分定义了MySQL服务的网络,指定了端口号为3306,并将流量转发到MySQL Pod上的3306端口。Deployment部分定义了MySQL的部署方式,使用了MySQL的容器镜像,设置了MySQL的root密码,并指定了存储卷用于持久化存储数据。 通过使用上述yaml文件,可以使用Kubernetes运行MySQL实例,实现高可用、容器化的MySQL部署。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值