当前位置: 首页 > 知识库问答 >
问题:

可液化一体化

申查猛
2023-03-14
  • 创建N个数据库
  • 为每个数据库创建数据库用户
  • 为每个数据库运行liquibase迁移

远程服务器只能通过ssh访问,而liquibase不支持ssh隧道(据我所知),也没有用于liquibase的ansible模块。

在运行上述任务之前,似乎有一种奇怪的方法:

  • 为mysql创建正向/反向通道,
  • 创建N个数据库
  • 为每个数据库创建数据库用户
  • 为每个数据库运行liquibase迁移
  • 杀死隧道。

但我不确定这是解决这个问题的最好方法

共有1个答案

翁良弼
2023-03-14

使用java在服务器端安装liquibase似乎会带来额外的开销因此,ssh隧道似乎是我解决这个问题的一个可行的解决方案,如下所示:

VAR:

mysql:
    ssh_user: "xyz@{{ inventory_hostname }}"
    forward_port: 3306
    listen_port: 3307
    ssh_key: "{{ ansible_ssh_private_key_file }} "
    definer: "'root'@'localhost'"
    backup_dir: "/var/somebackup/location"

任务:

 - name: Kill any active ssh tunnel to current host
    local_action: command bash -c "ps ax | grep ssh |grep -v grep | grep  '{{ mysql.ssh_user }}' |head -n 1| xargs -n 1|head -n 1|xargs kill -KILL"
    sudo: no
    register: ssh_tunnel_end

  - name: Create ssh tunnel to mysql
    local_action:  command bash -c "ssh -o ExitOnForwardFailure=yes  -o ConnectTimeout=2 -i {{ mysql.ssh_key }} -f -N -L  {{ mysql.listen_port }}:127.0.0.1:{{ mysql.forward_port }} {{ mysql.ssh_user }}" 
    sudo: no      
    register: ssh_tunnel_start

  - name: Run liquibase migrations for each db
    shell: liquibase --contexts='{{item.1.contexts}}' --username='{{customer.db.root_user}}' --password='{{customer.db.root_password}}' --changeLogFile='update.xml' --url='jdbc:mysql://127.0.0.1:{{mysql.listen_port}}/{{ customer.prefix }}_{{ item.1.db_suffix }}'   
    args:
        chdir: "{{special_modules.migrations.dest}}/{{item.1.name}}"
    delegate_to: 127.0.0.1
    sudo: no
    with_subelements:
        - "{{ customer_modules }}"
        - migrations

  - name: Kill reverse ssh tunnel to mysql
    local_action: command bash -c "ps ax | grep ssh |grep -v grep | grep  '{{ mysql.ssh_user }}' |head -n 1|xargs -n 1|head -n 1|xargs kill -KILL"
    sudo: no
    register: ssh_tunnel_end
 类似资料:
  • 我有一个应用程序,它使用hibernate使用注释创建初始数据库。 有人这样做过吗,如果有请告诉我怎么做。或者至少是另一种选择。是否所有的ORM更新都必须用sql脚本手动创建?

  • 我问是因为我试过了,但失败了。问题似乎是liquibase需要关于它运行的主机的信息来锁定并写入DATABASECHANGELOG。 因此,当我在ECS Fargate集群中启动spring boot应用程序时,我看到: 有什么办法可以解决这个问题吗?或者我必须下注并使用AWS ECS EC2吗?通常我会通过检查我的/etc/主机来解决这个问题,以确保其中定义了一个localhost。但我不知道我

  • 我创建了一个名为person的表,并使用liquibase变更集添加了一列“phone_number”。但现在我想为它添加一个默认值。但它不起作用,到目前为止,我已经尝试过: 和 和 有人能指出我哪里做错了,并且添加默认值会给以前添加的行增加值吗?

  • 如果要使用相同的变量但值不同,如何替换下一个更改集的标记值。实例 这个例子只适用于第一次和第二次 设置或运行Liquibase时出错:Liquibase。例外设置例外:液化。例外SetupException:分析/patches/translate\me的第150行第67列时出错。xml:cvc复杂类型。2.4.a: 发现以元素“property”开头的内容无效。“{”之一http://www.l

  • 我正在创建一个新表,如下所示: 至于约束,如果省略该属性,默认设置是什么? 例如,如果我只是这样做: ...该列是否可以为空? 更重要的是,说明这一点的文档在哪里(因为我还有其他类似的问题)? 我看了这里:Liquibase列标记,但它只含糊不清地说: 可为空-列是否可为空?

  • 我对OpenCV Java还很陌生,我一直在寻找方法来完成标题所要求的内容。到目前为止,根据我的理解,第一步应该是使用像Sobel或Laplace这样的检测边缘滤波器。 从https://docs.opencv.org/3.4/d2/d2c/tutorial_sobel_diversities.html中,我得到以下结果:glass_sobel 从现在开始,我不知道下一步该怎么办...我该怎么做才