数据库参数备份

MySQL

#!/bin/bash
# 获取当前日期和时间的时间戳
TIMESTAMP=$(date +"%Y%m%d-%H%M%S")

# 0、创建目录
mkdir /tmp/parameter_$TIMESTAMP/

# 1、获取所有命名空间
echo "1、获取所有命名空间"
NAMESPACES=$(kubectl get ns | grep qfusion- | grep -v qfusion-cloudshell | awk '{print $1}')
CONTAINER=mysql

# 2、遍历所有命名空间,获取MySQL实例的参数
echo "2、遍历所有命名空间,获取MySQL实例的参数"
for NAMESPACE in $NAMESPACES; do
  echo "Processing namespace: $NAMESPACE"
  # 在每个命名空间中查找名称以 'mysql-' 开头的 Pod
  for pod in $(kubectl get pods -n "$NAMESPACE" -o=jsonpath='{.items[*].metadata.name}' | grep '^mysql-'); do
    echo "Processing pod: $pod in namespace: $NAMESPACE"
    # 执行 mysql 命令并将输出保存到带有时间戳的文件
    kubectl exec -it "$pod" -n "$NAMESPACE" -c "$CONTAINER" -- bash -c 'mysql -uroot -p${MYSQL_ROOT_PASSWORD} -e "show variables \G;"' > "/tmp/parameter_$TIMESTAMP/${pod}_${TIMESTAMP}.csv" 2>/dev/null
  done
done

# 3、查看是否打印成功
echo "3、查看是否打印成功"
echo ""
ls -l /tmp/parameter_$TIMESTAMP/
head -n 2 /tmp/parameter_$TIMESTAMP/*.csv

在这里插入图片描述

MongoDB

#!/bin/bash
# 获取当前日期和时间的时间戳
TIMESTAMP=$(date +"%Y%m%d-%H%M%S")


# 0、创建带有时间戳的目录
mkdir /tmp/parameter_$TIMESTAMP/

# 1、获取所有命名空间
echo "1、获取所有命名空间"
#NAMESPACES=$(kubectl get ns -o=jsonpath='{.items[*].metadata.name}')
NAMESPACES=$(kubectl get ns | grep qfusion- | grep -v qfusion-cloudshell | awk '{print $1}')
CONTAINER=mongod

# 2、遍历所有命名空间,获取MongoDB实例的参数
echo "2、遍历所有命名空间,获取MongoDB实例的参数"
for NAMESPACE in $NAMESPACES; do
  echo "Processing namespace: $NAMESPACE"
  # 在每个命名空间中查找名称以 'mongo-' 开头的 Pod
  for pod in $(kubectl get pods -n "$NAMESPACE"  | grep '^mongo-' | awk '{print $1}'); do
    echo "Processing pod: $pod in namespace: $NAMESPACE"
    # 执行 mongos 命令并将输出保存到带有时间戳的文件
    # 假设每个Pod中只有一个容器,如果多个容器需要指定容器名称
    if echo "$pod" | grep -q 'mongos'; then
      kubectl exec -it "$pod" -n "$NAMESPACE" -c mongod -- bash -c 'cat /etc/mongos.conf' > "/tmp/parameter_$TIMESTAMP/${pod}.csv" 2>/dev/null
    else
      kubectl exec -it "$pod" -n "$NAMESPACE" -c mongod -- bash -c 'cat /etc/mongod.conf' >> "/tmp/parameter_$TIMESTAMP/${pod}.csv" 2>/dev/null
    fi
  done
done

# 3、查看是否打印成功
echo "3、查看是否打印成功"
echo ""
#ls -l /tmp/parameter_$TIMESTAMP/

grep max /tmp/parameter_$TIMESTAMP/*.csv

在这里插入图片描述

Oracle

#!/bin/bash

# 获取所有命名空间
NAMESPACES=$(kubectl get ns | grep qfusion- | grep -v qfusion-cloudshell | awk '{print $1}')

# 遍历所有命名空间
for namespace in $NAMESPACES; do
    # 获取命名空间下所有名称中包含 'oracle' 的 Pod
    pods=$(kubectl get pods -n "$namespace"  | grep '^oracle-' | awk '{print $1}')

    # 遍历所有 Oracle Pod
    for pod in $pods; do
        echo 
        cluster=${pod%-*}
        cluster=${cluster::-1}
        echo "处理命名空间 $namespace 下的实例 $pod"
        
        # 获取数据库版本和SID
        DATABASE_VERSION=$(kubectl get pod -n $namespace $pod -o jsonpath='{.spec.containers[0].env[?(@.name=="DATABASE_VERSION")].value}')
        ORACLE_SID=$(kubectl get pod -n $namespace $pod -o jsonpath='{.spec.containers[0].env[?(@.name=="ORACLE_SID")].value}')

        # 获取实例sys密码
        secret_name="${cluster}0-root" # 确保这是正确的Secret名称
        pwd=$(kubectl get secret -n $namespace $secret_name -o jsonpath='{.data.password}' | base64 --decode)

        # 获取实例IP信息
        # 这里假设你有一个名为 <pod>-vip 的服务,你需要根据你的实际服务名称来替换
        ipaddr=$(kubectl get lb -n $namespace | grep $cluster | awk '{print $2}')
        port=$(kubectl get lb -n $namespace | grep $cluster | awk '{print $3}')

        # 获取当前时间戳
        timestamp=$(date +%Y%m%d_%H%M%S)
        output_file="parameters_${pod}_${namespace}_${timestamp}.txt"
        echo "将输出保存到文件: $output_file"

        # 执行 SQL*Plus 命令并重定向输出到文件
        su - oracle -c "sqlplus sys/$pwd@$ipaddr:$port/$ORACLE_SID as sysdba <<EOF
        SET PAGESIZE 999;
        SET LINESIZE 999;
        SET FEEDBACK OFF;
        SET HEADING OFF;
        SET TRIMSPOOL ON;
        SET LONG 9999;
        SET LONGCHUNKSIZE 9999;
        SET TRIMSPOOL ON;
        SET SERVEROUTPUT ON;
        SET TRIM ON;
        SET TAB OFF;
        SET FEEDBACK OFF;
        SET HEADING OFF;

        COLUMN NAME FORMAT A30;
        COLUMN TYPE FORMAT A20;
        COLUMN VALUE FORMAT A100;

        SELECT name, type, value FROM v\\\$parameter;
        EXIT;
EOF" > "$output_file"

        echo "输出已保存到 $output_file"
    done
done

在这里插入图片描述

单个实例参数备份

#!/bin/bash

if [ -z "$1" ]; then
    echo "未知参数,用法: $0 [Pod名称] [命名空间]"
    exit 1
fi

pod=$1
cluster=${pod%-*}
if [ -z "$2" ]; then
    namespace="qfusion-admin"
else
    namespace=$2
fi

echo "实例 $1 $2 的信息如下:"

database=${cluster%-*}
if [ "$database" == "oracle" ]; then

    # 查看实例版本和SID
    DATABASE_VERSION=$(kubectl get pod -n $namespace $pod -o jsonpath='{.spec.containers[0].env[?(@.name=="DATABASE_VERSION")].value}')
    echo "实例版本 $DATABASE_VERSION"

    ORACLE_SID=$(kubectl get pod -n $namespace $pod -o jsonpath='{.spec.containers[0].env[?(@.name=="ORACLE_SID")].value}')
    echo "实例SID $ORACLE_SID"

    # 查看实例sys密码
    secret_name="${cluster}-root" # 确保这是正确的Secret名称
    pwd=$(kubectl get secret -n $namespace $secret_name -o jsonpath='{.data.password}' | base64 --decode)
    echo "密码 $pwd"

    # 查看实例IP信息
    ipaddr=$(kubectl get lb -n $namespace | grep $cluster | awk '{print $2}')
    port=$(kubectl get lb -n $namespace | grep $cluster | awk '{print $3}')
    echo "实例VIP $ipaddr:$port"

    # 输出连接串
    echo "连接串 sqlplus sys/$pwd@$ipaddr:$port/$ORACLE_SID as sysdba"

    # 执行 SQL*Plus 命令并重定向输出到文件
    timestamp=$(date +%Y%m%d_%H%M%S)
    output_file="parameters_${pod}_${timestamp}.txt"
    echo "将输出保存到文件: $output_file"
    su - oracle -c "sqlplus sys/$pwd@$ipaddr:$port/$ORACLE_SID as sysdba <<EOF
    SET PAGESIZE 999;
    SET LINESIZE 999;
    SET FEEDBACK OFF;
    SET HEADING OFF;
    SET TRIMSPOOL ON;
    SET LONG 9999;
    SET LONGCHUNKSIZE 9999;
    SET TRIMSPOOL ON;
    SET SERVEROUTPUT ON;
    SET TRIM ON;
    SET TAB OFF;
    SET FEEDBACK OFF;
    SET HEADING OFF;

    COLUMN NAME FORMAT A30;
    COLUMN TYPE FORMAT A20;
    COLUMN VALUE FORMAT A100;

    SELECT name, type, value FROM v\\\$parameter;
    show parameter
    EXIT;
EOF" > "$output_file"

    echo "输出已保存到 $output_file"

else
    echo "该数据库类型暂不支持"
fi

获取实例信息脚本

#!/bin/bash

if [ -z "$1" ]; then
    echo "未知参数,用法: $0 [Pod名称] [命名空间]"
    exit 1
fi
pod=$1
pod=${pod%-*}
if [ -z "$2" ]; then
    namespace="qfusion-admin"
else
    namespace=$2
fi

database=${pod%-*}
if [ "$database" == "oracle" ]; then

    # 查看实例SID
    ORACLE_SID=$(kubectl get pod -n $namespace $pod-0 -o jsonpath='{.spec.containers[0].env[?(@.name=="ORACLE_SID")].value}')
    echo "实例SID $ORACLE_SID"

    # 查看实例sys密码
    secret_name="$pod-root" # 确保这是正确的Secret名称
    pwd=$(kubectl get secret -n $namespace $secret_name -o jsonpath='{.data.password}' | base64 --decode)
    echo "密码  $pwd"

    # 查看实例IP信息
    ipaddr=`kubectl get lb -n $namespace | grep $pod | awk '{print$2}'`
    port=`kubectl get lb -n $namespace | grep $pod | awk '{print$3}'`
    echo "实例vip $ipaddr:$port"

    # 输出连接串
    echo "sqlplus sys/$pwd@$ipaddr:$port/$ORACLE_SID as sysdba"
else
    echo "该数据库类型暂不支持"
fi

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/916314.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Kconfig 知道的!与不知道的?

1 Kconfig 的重要性 Kconfig 是 Linux 内核配置系统的重要工具&#xff0c;它通过定义和管理配置选项&#xff0c;使开发者能够灵活地调整内核模块。无论是精简内核以适配嵌入式系统&#xff0c;还是为桌面应用扩展功能&#xff0c;Kconfig 都在其中扮演着关键角色。本文将带领…

CCI3.0-HQ:用于预训练大型语言模型的高质量大规模中文数据集

摘要 我们介绍了 CCI3.0-HQ&#xff0c;它是中文语料库互联网 3.0&#xff08;CCI3.0&#xff09;的一个高质量500GB子集&#xff0c;采用新颖的两阶段混合过滤管道开发&#xff0c;显著提高了数据质量。为了评估其有效性&#xff0c;我们在不同数据集的100B tokens上从头开始…

rhcsa笔记二

普通文件的创建 touch命令的使用 touch 文件名 &#xff08;文件路径&#xff09; linux不是用后缀区分文件类型的&#xff0c;而是用ll出现的第一个字符区分文件类型的 -&#xff1a;普通文件 d:目录文件 [rootserver ~]# stat /etc/hostname 文件&#xff1a;/etc/hos…

微澜:用 OceanBase 搭建基于知识图谱的实时资讯流的应用实践

本文作者&#xff1a; 北京深鉴智源科技有限公司架构师 郑荣凯 本文整理自北京深鉴智源科技有限公司架构师郑荣凯&#xff0c;在《深入浅出 OceanBase 第四期》的分享。 知识图谱是一项综合性的系统工程&#xff0c;需要在在各种应用场景中向用户展示经过分页的一度关系。 微…

探索Python文档自动化的奥秘:`python-docx`库全解析

文章目录 探索Python文档自动化的奥秘&#xff1a;python-docx库全解析1. 背景&#xff1a;为何选择python-docx&#xff1f;2. python-docx是什么&#xff1f;3. 如何安装python-docx&#xff1f;4. 简单库函数使用方法创建文档添加段落添加标题添加表格插入图片 5. 应用场景自…

测试实项中的偶必现难测bug--一键登录失败

问题描述:安卓和ios有出现部分一键登录失败的场景,由于场景比较极端,衍生了很多不好评估的情况。 产生原因分析: 目前有解决过多次这种行为的问题,每次的产生原因都有所不同,这边根据我个人测试和收集复现的情况列举一些我碰到的: 1、由于我们调用的是友盟的一键登录的…

Vue的基础使用

一、为什么要学习Vue 1.前端必备技能 2.岗位多&#xff0c;绝大互联网公司都在使用Vue 3.提高开发效率 4.高薪必备技能&#xff08;Vue2Vue3&#xff09; 二、什么是Vue 概念&#xff1a;Vue (读音 /vjuː/&#xff0c;类似于 view) 是一套 构建用户界面 的 渐进式 框架…

vue3使用VueQuill插入自定义按钮

在 Vue 3 项目中使用 VueQuill 编辑器时&#xff0c;我们可以自定义内容来满足特定的需求。本文将介绍如何在 VueQuill 中插入自定义内容&#xff0c;比如插入特定的标签或样式元素。 Quill官方中文文档 1. 项目设置和依赖安装 如果你还没有创建 Vue 3 项目&#xff0c;可以…

【springboot使用sqlite数据库】Java后台同时使用mysql、sqlite

环境&#xff1a;根据业务的需要&#xff0c;老版程序使用的数据库是sqlite&#xff0c;版本升级成前后台分离模式&#xff0c;因此需要兼容mysql与sqlite数据库同时使用。 pom.xml设置&#xff1a; application.yml文件配置&#xff1a; mapper.java文件&#xff1a; service.…

多智能体深度确定性策略梯度(MADDPG)算法复现教程

复现软硬件: Ubunru20.04,Python 3.8.10, torch 2.4.1, gym 0.10.5,VScode 论文: http://arxiv.org/pdf/1706.02275 环境: GitHub - openai/multiagent-particle-envs: Code for a multi-agent particle environment used in the paper "Multi-Agent Actor-…

51c大模型~合集42

我自己的原文哦~ https://blog.51cto.com/whaosoft/11859244 #猎户座 「草莓」即将上线&#xff0c;OpenAI新旗舰大模型曝光&#xff0c;代号「猎户座」 ChatGPT 要进化了&#xff1f; 本月初&#xff0c;OpenAI 创始人、CEO 山姆・奥特曼突然在 X 上发了一张照片&#xff0…

探索Copier:Python项目模板的革命者

文章目录 **探索Copier&#xff1a;Python项目模板的革命者**1. 背景介绍&#xff1a;为何Copier成为新宠&#xff1f;2. Copier是什么&#xff1f;3. 如何安装Copier&#xff1f;4. 简单库函数使用方法4.1 创建模板4.2 从Git URL创建项目4.3 使用快捷方式4.4 动态替换文本4.5 …

系统掌握大语言模型提示词 - 从理论到实践

以下是我目前的一些主要个人标签&#xff1a; 6 年多头部大厂软件开发经验&#xff1b;1 年多 AI 业务应用经验&#xff0c;拥有丰富的业务提示词调优经验和模型微调经验。信仰 AGI&#xff0c;已经将 AI 通过自定义 Chatbot /搭建 Agent 融合到我的工作流中。头部大厂技术大学…

前端学习资源合集,附链接

前言 本文是前端开发初学资源 初步 1. 三件套htmlcssjavascript 前端Web开发HTML5CSS3移动web视频教程&#xff0c;前端web入门首选黑马程序员_哔哩哔哩_bilibili 黑马程序员前端JavaScript入门到精通全套视频教程&#xff0c;javascript核心进阶ES6语法、API、js高级等基…

全同态加密基于多项式环计算的图解

全同态加密方案提供了一种惊人的能力 —— 能够在不知道数据具体内容的情况下对数据进行计算。这使得你可以在保持潜在敏感源数据私密的同时&#xff0c;得出问题的答案。 这篇文章的整体结构包括多项式环相关的数学介绍&#xff0c;基于多项式环的加密和解密是如何工作的&…

【Window主机访问Ubuntu从机——Xrdp配置与使用】

使用Xrdp在Window环境下远程桌面访问Ubuntu主机 文章目录 Ubuntu安装图形化界面Ubuntu安装Xrdp通过网线连接两台主机Window主机有线连接配置Ubuntu从机设置测试有线连接 Window主机打开远程桌面功能参考文章总结 Ubuntu安装图形化界面 sudo apt update sudo apt upgrade sudo …

stable-diffusion-3 ,每天免费试用

https://huggingface.co/spaces/stabilityai/stable-diffusion-3-mediumhttps://huggingface.co/spaces/stabilityai/stable-diffusion-3-medium官方space&#xff0c;童叟无欺&#xff0c;科学试用。 an image of a girl with white hair, in the style of ross tran, light …

datastage在升级版本到11.7之后,部分在11.3上正常执行的SP报错SQLSTATE = 22007: 本机错误代码 = -180

在升级版本到11.7之后&#xff0c;部分在11.3上正常执行的SP开始报错&#xff0c;报的SQL错误是时间参数问题&#xff0c;但是一样的SP可以直接call sp执行&#xff0c;也可以手动调用作业执行&#xff0c;只有设置定时调度时作业会报错&#xff0c; CALLXXX.XXX(1,CURRENT TIM…

xcode-select: error: tool ‘xcodebuild‘ requires Xcode, but active developer

打开 .sh 文件所在的终端窗口&#xff0c;执行终端命令&#xff1a;sh 文件名.sh&#xff0c;出现如下错误&#xff1a; 解决办法&#xff1a;

如何修改npm包

前言 开发中遇到一个问题&#xff0c;配置 Element Plus 自定义主题时&#xff0c;添加了 ElementPlusResolver({ importStyle: "sass" }) 后&#xff0c;控制台出现报错&#xff0c;这是因为 Dart Sass 2.0 不再支持使用 !global 来声明新变量&#xff0c;虽然当前…