kubernetes - 如何在复制的有状态中初始化 MySQL 数据
问题描述
按照本教程,我在 Kubernetes 集群上创建了一个持久性 MySQL 数据库。我正在尝试在初始化时创建表,但无法使其正常工作。
我尝试了两种不同的方法。
首先创建一个新的配置图:
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql-initdb-config
data:
initdb.sql: |
#SQL GOES HERE
我使用有状态服务将它添加到这里的卷中(注释掉的行是我添加的):
volumes:
- name: conf
emptyDir: {}
- name: config-map
configMap:
name: mysql
# - name: mysql-initdb
# configMap:
# name: mysql-initdb-config
我还尝试将 SQL 数据添加到当前使用的配置映射中:
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql
namespace: thesis
labels:
app: mysql
data:
primary.cnf: |
[mysqld]
log-bin
replica.cnf: |
[mysqld]
super-read-only
initdb.sql: |
# SQL goes here
再次在有状态集中引用它:
volumes:
- name: conf
emptyDir: {}
- name: config-map
configMap:
name: mysql
# - name: mysql-initdb
# configMap:
# name: mysql;
我采取了完全错误的方法还是只是一个小错误?
解决方案
首次启动 mysql 容器时,它将在创建新数据库后执行/docker-entrypoint-initdb.d中的扩展名为 .sh、.sql 和 sql.sz 的文件。所以我们必须在那个特定的目录上挂载初始化脚本。
首先创建一个将用作卷源的新 configmap/secret。
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql-initdb-config
data:
initdb.sql: |
#SQL GOES HERE
然后创建一个将挂载在 /docker-entrypoint-initdb.d目录中的卷。
volumes:
- name: init-script
configMap:
name: mysql-initdb-config
现在将此卷安装在特定目录上。
volumeMounts:
- name: init-script
mountPath: /docker-entrypoint-initdb.d
进一步阅读:如何使用 MySQL 镜像
推荐阅读
- angular6 - 我想根据复选框选择显示/隐藏 Angular 6 反应式表单组
- html - 悬停时文本显示在不同的框中
- python - 给定 Keras 预测,如何在 OpenCV 中绘制边界框?
- alexa - Can anyone help me with the structure of array of localized attributes in the proactive events API when there are more than one localized attributes?
- javascript - ruby on rails 中的嵌套 url 查询
- sql - 如何对“插入语句中的语法错误”进行排序
- html - 对象/iframe 溢出滚动在 ios (cordova) 中不起作用
- dart - 在 null 上调用了 setter 'msg='
- operating-system - 编辑文本文件会使 CPU 在用户模式下运行吗?
- javascript - 显示对象数组中的所有值时出现问题