当前位置: 首页 > wzjs >正文

品牌外贸网站建设百度指数查询

品牌外贸网站建设,百度指数查询,这里是我做的网站,开发者助手app关于使用ansible 对ARM版达梦7的k8s自动化部署参考我的这篇操作 ansible-playbook 写arm版达梦7数据库的一键安装脚本-CSDN博客文章浏览阅读303次,点赞5次,收藏3次。达梦官方提供镜像目前是dm8_x86 版本,因为众所周知的国产化方面的需求&…

关于使用ansible 对ARM版达梦7的k8s自动化部署参考我的这篇操作

ansible-playbook 写arm版达梦7数据库的一键安装脚本-CSDN博客文章浏览阅读303次,点赞5次,收藏3次。达梦官方提供镜像目前是dm8_x86 版本,因为众所周知的国产化方面的需求,需要在kylin v10机器上部署一个DM数据库以及其他使用数据库的服务,为了更便捷的交付需要把安装步骤都写入到ansible 脚本里,这里就单说下DM 的部署。 https://blog.csdn.net/u011564831/article/details/146979512?spm=1011.2415.3001.5331

下面进入另一个需要解决的问题,如何使用ansbile  实现达梦7数据库初始化数据脚本写入

对于有特定性数据配置的项目会需要在服务安装时候把db_init的初始文件, 根据实际部署的情况修改初始化数据的信息,等待准备好以后直接导入到数据库里,类似于mysql

mysql -u username -p your_database_name < /path/to/your/file.sql

sql数据渲染

因为我本地DM数据库是整个/dm7/data 搬家,所以表结构是不需要重新去创建,只要把一些业务表TRUNCATE 掉就可以, 然后把dm数据库需要动态插入数据的记录动态生成好等待导入

在任务里添加一个 Init DM 的节点

    # dm 数据库初始化- name: Init DMinclude_role:name: deploy_rlstudiotasks_from: 11.dm_init.ymlwhen: (deploy_type is not defined) or (deploy_type == "dm_init")tags: [ "always" ]

在task_from 的文件里先从template  sql.jq 为底本生成要导入的 target.sql

---
- name: Render ConfigMap with namespaceansible.builtin.template:src: "{{ role_path }}/files/sql.jq2"dest: "{{ role_path }}/files/target.sql"mode: '0644'delegate_to: "{{ inventory_hostname }}"run_once: truevars:ansible_python_interpreter: "{{ custom_python_interpreter }}"

这样可以把已经全局定义的变量写入到target.sql里

比如sql.jq2了定义的,全局inventory下定义 了该变量rl_mysql_node: 10.10.121.12

INSERT INTO USER_QUOTAS_MANAGE.properties VALUES ('argoAddress', 'String', 'http://{{rl_mysql_node}}:30128');

在最后生成的target.sql里就可以动态写入上

还可以把要truncate的表名在Ansible Playbook 中先定义上

vars: arr: ["x1", "x2"]

  • sql.jq2 模板文件中使用 Jinja2 语法
    使用上述示例中的代码来遍历 arr 变量并生成 SQL 语句。当运行 Ansible Playbook 时,模板将被渲染,target.sql 文件将包含根据 arr 生成的 SQL 语句。

-- 清理原来的表数据
{% for item in arr %}
TRUNCATE TABLE USER_QUOTAS_MANAGE.{{ item }};
{% endfor %}

DM 数据库查看 表xx10 外键关联的方法

SELECTa.table_name AS referencing_table,a.constraint_name AS foreign_key_name
FROMuser_constraints a
JOINuser_cons_columns b ON a.constraint_name = b.constraint_name
WHEREa.constraint_type = 'R'AND a.r_constraint_name IN (SELECT constraint_nameFROM user_constraintsWHERE table_name = 'xx10'  -- 替换为你的表名

然后是初始化表数据道理也差不多,把动态写入的变量在playbook先定义好然后执行

寻找一个类似mysql的sql文件导入方式

现在我已经有了待执行的sql文件,我的思路就是把这个文件复制到dm的 pod里然后用dm自带的disql 工具把文件导入进去

先把target.sql复制到pod里去

- name: Get DM7 Pod name using kubectlansible.builtin.command:cmd: "kubectl get pods -n {{ dm7_namespace }} -l app=apps.deployment-dm-dm7 -o jsonpath='{.items[0].metadata.name}'"register: dm7_pod_namedelegate_to: "{{ inventory_hostname }}"run_once: truevars:ansible_python_interpreter: "{{ custom_python_interpreter }}"- name: Fail if no DM7 Pod is foundansible.builtin.fail:msg: "No DM7 Pod found in namespace {{ dm7_namespace }} with label app=apps.deployment-dm-dm7"when: dm7_pod_name.stdout == ""delegate_to: "{{ inventory_hostname }}"run_once: truevars:ansible_python_interpreter: "{{ custom_python_interpreter }}"- name: Copy SQL file to DM7 Pod using kubectl cpansible.builtin.command:cmd: "kubectl cp {{ role_path }}/files/target.sql {{ dm7_namespace }}/{{ dm7_pod_name.stdout }}:/dm7/data/target.sql"delegate_to: "{{ inventory_hostname }}"run_once: truewhen: dm7_pod_name.stdout != ""vars:ansible_python_interpreter: "{{ custom_python_interpreter }}"

然后调用 ./disql <user>/<password>@localhost:5236 -i /dm7/data/target.sql 做导入

- name: Execute target.sql in DM7 Podansible.builtin.command:cmd: >kubectl exec -n {{ dm7_namespace }} {{ dm7_pod_name.stdout }} -- cd /dm7/bin && ./disql SYSDBA/123456789012@localhost:5236 -i /dm7/data/target.sqldelegate_to: "{{ inventory_hostname }}"run_once: truewhen: dm7_pod_name.stdout != ""vars:ansible_python_interpreter: "{{ custom_python_interpreter }}"

先是报错 无法找到动态链接库 libdmdpi.so

TASK [deploy_rlstudio : Get DM7 Pod name] ************************************************************************************************** fatal: [192.168.107.9]: FAILED! => {"changed": false, "msg": "Failed to find executable libdmdpi.so"}

这个错在cmd里加上 export LD_LIBRARY_PATH=/dm7/bin:$LD_LIBRARY_PATH

- name: Execute target.sql in DM7 Podansible.builtin.command:cmd: >kubectl exec -n {{ dm7_namespace }} {{ dm7_pod_name.stdout }} -- export LD_LIBRARY_PATH=/dm7/bin:$LD_LIBRARY_PATH && cd /dm7/bin && ./disql SYSDBA/123456789012@localhost:5236 -i /dm7/data/target.sqldelegate_to: "{{ inventory_hostname }}"run_once: truewhen: dm7_pod_name.stdout != ""vars:ansible_python_interpreter: "{{ custom_python_interpreter }}"

执行结束ansible 没报错但是数据并没有导入成功

手动进入pod调试了下发现报错了

[root@dm7-7db84c6d-h9dgm /]# /dm7/bin/disql SYSDBA/123456789012@localhost:5236 -i /dm7/data/target.sqlUSAGE:CONN[ECT] <logon><logon> : {<username>[/<password>][*<MPP_TYPE>][@<connect_identifier>]} | {/ AS <SYSDBA|SYSSSO|SYSAUDITOR|AUTO>}<connect_identifier> :{[<server>][:<port>][?{UDP|TCP|IPC|RDMA}][#<sslpath>@<sslpwd>]}<server>: if ipv6 address,[] is needed. For example [fe80::1e6f:65ff:fed1:3724%6]
DISQL usage1:disql -h|help  show disql version and help messageDISQL usage2:disql [ [<option>] [{<logon> | /NOLOG}] [<start>] ]<option> : [-L] [-S]-L only try to login once-S set no show model, hidden disql flag<logon> : {<username>[/<password>][*<MPP_TYPE>][@<connect_identifier>]} | {/ AS <SYSDBA|SYSSSO|SYSAUDITOR|AUTO>}<connect_identifier> :{[<server>][:<port>][?{UDP|TCP|IPC|RDMA}][#<sslpath>@<sslpwd>]}<server>: if ipv6 address,[] is needed. For example [fe80::1e6f:65ff:fed1:3724%6]<start> : `<filename>[<parameter> ...]<direct sql> run disql bash/NOLOG option can run disql, while not connected to DM server<direct sql>:-e "<SQL statement>[;<SQL statement>]"

先检查 disql 版本和支持的选项

运行以下命令查看 disql 的帮助信息:

/dm7/bin/disql -h

  • 检查输出中是否提到 - arroAddress,如果是,可能是个文档错误(应为 -i),说明版本支持问题。
  • 如果没有 -i,说明你的 disql 版本不支持此选项。

结论是我使用的dm7 这个disql 工具没有-i 这个选项

不过这也不是什么大问题, 想办法把target.sql里sql拆成可执行的一条条记录逐条执行就可以了

换个思路

从 DM7 Pod 中读取 SQL 文件内容

- name: Read SQL file content from DM7 Podansible.builtin.command:cmd: "kubectl exec -n {{ dm7_namespace }} {{ dm7_pod_name.stdout }} -- cat {{ sql_file }}"register: sql_contentdelegate_to: "{{ inventory_hostname }}"run_once: truewhen: dm7_pod_name.stdout != ""vars:sql_file: "/dm7/data/target.sql"ansible_python_interpreter: "{{ custom_python_interpreter }}"
  • 执行 kubectl exec 命令,进入指定的 Kubernetes Pod,并读取 SQL 文件的内容。
  • 注册变量:将读取的内容保存到变量 sql_content 中。
  • 条件执行:只有当 dm7_pod_name.stdout 不为空时,才会执行这个任务。
  • 使用的变量
    • dm7_namespace:命名空间。
    • dm7_pod_name.stdout:Pod 名称。
    • sql_file:SQL 文件的路径。

在 DM7 Pod 中执行 SQL 语句

- name: Execute SQL statements in DM7 Podansible.builtin.command:cmd: >kubectl exec -n {{ dm7_namespace }} {{ dm7_pod_name.stdout }} -- sh -c "{{ disql_base_cmd }} \"{{ item | trim }}\""loop: "{{ (sql_content.stdout | split(';')) | list }}"delegate_to: "{{ inventory_hostname }}"run_once: truewhen:- dm7_pod_name.stdout != ""- item | trim | length > 0register: disql_resultchanged_when: disql_result.rc == 0failed_when: disql_result.rc != 0vars:disql_base_cmd: "export LD_LIBRARY_PATH=/dm7/bin:$LD_LIBRARY_PATH && /dm7/bin/disql SYSDBA/123456789012@localhost:5236 -e"ansible_python_interpreter: "{{ custom_python_interpreter }}"
  • 从第一步读取的 SQL 内容中提取 SQL 语句,并逐一执行。
  • 循环:将 sql_content.stdout 按分号 (;) 分割成列表,遍历每个 SQL 语句。
  • 条件执行:只有当 Pod 名称不为空且 SQL 语句非空时才执行。
  • 注册结果:将每个执行的结果保存到 disql_result 中。
  • 成功与失败条件
    • changed_when:如果返回代码为 0,则标记为成功。
    • failed_when:如果返回代码不为 0,则标记为失败。
  • 执行命令:使用 disql 命令执行 SQL 语句。

调试执行结果

- name: Debug execution resultansible.builtin.debug:var: disql_resultwhen: disql_result is definedvars:ansible_python_interpreter: "{{ custom_python_interpreter }}"
  • 输出 disql_result 的内容,以便查看 SQL 执行的结果。
  • 条件执行:只有当 disql_result 被定义时才会执行这个任务。

修改后全部脚本

---
- name: Render ConfigMap with namespaceansible.builtin.template:src: "{{ role_path }}/files/sql.jq"dest: "{{ role_path }}/files/target.sql"mode: '0644'delegate_to: "{{ inventory_hostname }}"run_once: truevars:ansible_python_interpreter: "{{ custom_python_interpreter }}"- name: Get DM7 Pod name using kubectlansible.builtin.command:cmd: "kubectl get pods -n {{ dm7_namespace }} -l app=apps.deployment-dm-dm7 -o jsonpath='{.items[0].metadata.name}'"register: dm7_pod_namedelegate_to: "{{ inventory_hostname }}"run_once: truevars:ansible_python_interpreter: "{{ custom_python_interpreter }}"- name: Fail if no DM7 Pod is foundansible.builtin.fail:msg: "No DM7 Pod found in namespace {{ dm7_namespace }} with label app=apps.deployment-dm-dm7"when: dm7_pod_name.stdout == ""delegate_to: "{{ inventory_hostname }}"run_once: truevars:ansible_python_interpreter: "{{ custom_python_interpreter }}"- name: Copy SQL file to DM7 Pod using kubectl cpansible.builtin.command:cmd: "kubectl cp {{ role_path }}/files/target.sql {{ dm7_namespace }}/{{ dm7_pod_name.stdout }}:/dm7/data/target.sql"delegate_to: "{{ inventory_hostname }}"run_once: truewhen: dm7_pod_name.stdout != ""vars:ansible_python_interpreter: "{{ custom_python_interpreter }}"- name: Read SQL file content from DM7 Podansible.builtin.command:cmd: "kubectl exec -n {{ dm7_namespace }} {{ dm7_pod_name.stdout }} -- cat {{ sql_file }}"register: sql_contentdelegate_to: "{{ inventory_hostname }}"run_once: truewhen: dm7_pod_name.stdout != ""vars:sql_file: "/dm7/data/target.sql"ansible_python_interpreter: "{{ custom_python_interpreter }}"- name: Execute SQL statements in DM7 Podansible.builtin.command:cmd: >kubectl exec -n {{ dm7_namespace }} {{ dm7_pod_name.stdout }} -- sh -c "{{ disql_base_cmd }} \"{{ item | trim }}\""#loop: "{{ (sql_content.stdout | split(';')) | select('match', '^(GRANT|SET|DROP|CREATE|INSERT)') | reject('match', '^\\s*--') | list }}"loop: "{{ (sql_content.stdout | split(';')) | list }}"delegate_to: "{{ inventory_hostname }}"run_once: truewhen:- dm7_pod_name.stdout != ""- item | trim | length > 0register: disql_resultchanged_when: disql_result.rc == 0failed_when: disql_result.rc != 0vars:disql_base_cmd: "export LD_LIBRARY_PATH=/dm7/bin:$LD_LIBRARY_PATH && /dm7/bin/disql SYSDBA/123456789012@localhost:5236 -e"ansible_python_interpreter: "{{ custom_python_interpreter }}"- name: Debug execution resultansible.builtin.debug:var: disql_resultwhen: disql_result is definedvars:ansible_python_interpreter: "{{ custom_python_interpreter }}"

执行没有错误

输出debug信息

后面检查了初始化的数据都插入成功了

http://www.dtcms.com/wzjs/297817.html

相关文章:

  • 物流运输做网站的素材查网站关键词工具
  • 福州做网站互联网公司百度推广员工工资怎么样
  • 马鞍山北京网站建设少儿编程
  • 毕业设计做网站怎样的工作量算达标2023年10月爆发新冠
  • 没有网站想做个链接页面怎么做快速提升排名seo
  • wordpress 单页 多页网站seo哪家做的好
  • 遵义网站建设优化公司软文营销文章500字
  • 网站登录如何做百度近日收录查询
  • 做游戏网站需要哪些许可百度快照投诉中心人工电话
  • 网站建设运营公司企业特色友情链接的形式有哪些
  • web服务器网站网站标题seo外包优化
  • 武汉建站多少钱seo的全称是什么
  • 网站公司怎么做推广方案澎湃新闻
  • 做网站公司联系方式页面百度2018旧版下载
  • 做网站比较便宜seo用什么论坛引流
  • 优秀材料写作网站整合营销传播案例分析
  • 手机网站怎么在电脑上打开seo高级优化方法
  • 市住房城乡建设网站今天最新新闻
  • 企业b2c网站建设seo研究中心超逸seo
  • 有没有做妓男平台以及网站站长源码
  • 专业的集团网站开发费用多少钱百度帐号登录入口
  • 张家港做英文网站如何优化搜索引擎
  • 企业可以做哪些网站有哪些内容大型网站建设公司
  • 如何 网站收录seo排名怎样
  • 温岭市住房和城乡建设规划局网站企业网站模板建站
  • wordpress创建wiki页面谷歌seo需要做什么的
  • 推荐网站建设收费标准百度推广非企代理
  • 电子商务网站平台建设预算不包括网站建设方案书范文
  • abc免费建站网络营销技巧培训
  • 怎么看网站是不是php语言做的最新消息新闻