我正在使用Vitess示例中的helm和文件101_initial_cluster.yaml来设置我的初始集群。该示例使用SQL字符串进行模式初始化,如下所示:

schema:
        initial: |-
          create table product(
            sku varbinary(128),
            description varbinary(128),
            price bigint,
            primary key(sku)
          );
          create table customer(
            customer_id bigint not null auto_increment,
            email varbinary(128),
            primary key(customer_id)
          );
          create table corder(
            order_id bigint not null auto_increment,
            customer_id bigint,
            sku varbinary(128),
            price bigint,
            primary key(order_id)
          );

我想用initial: my_initial_keyspace_schema.sql文件替换它。从Vitess文档中,我可以看到Vitess确实允许使用ApplySchema -sql_file=user_table.sql user进行此操作,但是我想使用helm文件进行初始化。

这将非常有帮助,因为将模式组织和粘贴为string非常繁琐。必须先粘贴依赖于其他表的表,然后再粘贴其余表。忘记让Vitess抛出错误。

最佳答案

欢迎使用StackOverflow。

恐怕没有开箱即用的功能可以直接在Vitess Helm图表的当前状态下从SQL文件直接初始化DbSchema。您可以通过helm inspect <chart_name>命令识别其任何可配置参数。

但是,您可以尝试通过以下方式自定义它来满足您的需求:

  • 保持ApplySchema {-sql =}模式
    但是让SQL模式作为Helm图表的一部分从静态文件中提取
    模板(例如从static / initial_schema.sql位置):

    因此,只需添加一段这样的控制流代码:


  • {{ if .Values.initialSchemaSqlFile.enabled }}
            {{- $files := .Files }}
            {{- range tuple "static/initial_schema.sql" }}
            {{ $schema := $files.Get . }}
    {{- end }}
    {{ else }}
       # Default inline schema from Values.topology.cells.keyspaces[0].schema
    {{ end }}


    查看有关使用Helm内置对象(如文件here)的更多信息
  • 使用ApplySchema {-sql-file =}模式
    修改一段代码here,在其中构建vtctlclient命令。
    这还需要引入一个新的Kubernetes Volume对象(nfs
    或基于Git的仓库都是不错的选择),您可以在
    作业,在特定路径下,将从中使用initial_schema.sql文件的位置。
  • 关于mysql - Vitess:使用SQL文件初始化键空间架构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54821522/

    10-11 01:47
    查看更多