数据库参数备份
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; doecho "Processing namespace: $NAMESPACE"# 在每个命名空间中查找名称以 'mysql-' 开头的 Podfor pod in $(kubectl get pods -n "$NAMESPACE" -o=jsonpath='{.items[*].metadata.name}' | grep '^mysql-'); doecho "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/nulldone
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; doecho "Processing namespace: $NAMESPACE"# 在每个命名空间中查找名称以 'mongo-' 开头的 Podfor pod in $(kubectl get pods -n "$NAMESPACE" | grep '^mongo-' | awk '{print $1}'); doecho "Processing pod: $pod in namespace: $NAMESPACE"# 执行 mongos 命令并将输出保存到带有时间戳的文件# 假设每个Pod中只有一个容器,如果多个容器需要指定容器名称if echo "$pod" | grep -q 'mongos'; thenkubectl exec -it "$pod" -n "$NAMESPACE" -c mongod -- bash -c 'cat /etc/mongos.conf' > "/tmp/parameter_$TIMESTAMP/${pod}.csv" 2>/dev/nullelsekubectl exec -it "$pod" -n "$NAMESPACE" -c mongod -- bash -c 'cat /etc/mongod.conf' >> "/tmp/parameter_$TIMESTAMP/${pod}.csv" 2>/dev/nullfidone
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' 的 Podpods=$(kubectl get pods -n "$namespace" | grep '^oracle-' | awk '{print $1}')# 遍历所有 Oracle Podfor pod in $pods; doecho cluster=${pod%-*}cluster=${cluster::-1}echo "处理命名空间 $namespace 下的实例 $pod"# 获取数据库版本和SIDDATABASE_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 <<EOFSET 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/bashif [ -z "$1" ]; thenecho "未知参数,用法: $0 [Pod名称] [命名空间]"exit 1
fipod=$1
cluster=${pod%-*}
if [ -z "$2" ]; thennamespace="qfusion-admin"
elsenamespace=$2
fiecho "实例 $1 $2 的信息如下:"database=${cluster%-*}
if [ "$database" == "oracle" ]; then# 查看实例版本和SIDDATABASE_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 <<EOFSET 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 parameterEXIT;
EOF" > "$output_file"echo "输出已保存到 $output_file"elseecho "该数据库类型暂不支持"
fi
获取实例信息脚本
#!/bin/bashif [ -z "$1" ]; thenecho "未知参数,用法: $0 [Pod名称] [命名空间]"exit 1
fi
pod=$1
pod=${pod%-*}
if [ -z "$2" ]; thennamespace="qfusion-admin"
elsenamespace=$2
fidatabase=${pod%-*}
if [ "$database" == "oracle" ]; then# 查看实例SIDORACLE_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"
elseecho "该数据库类型暂不支持"
fi
相关文章:

数据库参数备份
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-…...
PG数据库 数据库时间字段 开始时间和结束时间,判断和查询条件的开始和截止时间存在交集,SQL如何编写
PG 数据库时间字段 开始时间和结束时间,判断和查询条件的开始和截止时间存在交集,SQL如何编写? 在 PostgreSQL 中,如果你想要查询那些时间段(由 开始时间 和 结束时间 定义)与给定的时间段有交集的记录&am…...

k8s服务内容滚动升级以及常用命令介绍
查看K8S集群所有的节点信息 kubectl get nodes 删除K8S集群中某个特定节点 kubectl delete nodes/10.0.0.123 获取K8S集群命名空间 kubectl get namespace 获取K8S所有命名空间的那些部署 kubectl get deployment --all-namespaces 创建命名空间 web界面上看到的效果,但是…...

机器学习: LightGBM模型(优化版)——高效且强大的树形模型
LightGBM(Light Gradient Boosting Machine)是一种基于梯度提升决策树(GBDT)的框架,由微软提出。它具有高效的训练速度、低内存占用、支持并行和GPU加速等特点,非常适合大规模数据的训练任务,尤…...

Wordpress常用配置,包括看板娘跨域等
一个Wordpress的博客已经搭建完成了,那么为了让它看起来更有人间烟火气一点,有一些常用的初始配置,这里整理一下。 修改页脚 页脚这里默认会显示Powered by Wordpress,还有一个原因是这里要加上备案信息。在主题里找到页脚&…...

Python学习从0到1 day27 Python 高阶技巧 ③ 设计模式 — 单例模式
此去经年,再难同游 —— 24.11.11 一、什么是设计模式 设计模式是一种编程套路,可以极大的方便程序的开发最常见、最经典的设计模式,就是我们所学习的面向对象了。 除了面向对象外,在编程中也有很多既定的套路可以方便开发,我们称之为设计模…...

Unity 网格模型及优化
一个模型中可以包含很多网格,一个模型可以由多个网格组成。在Unity3D中一个网格可以由多个子网格(Sub-Mesh)组成。 在渲染引擎的时候,每个子网格都要匹配一个材质球来做渲染,实际上一个子网格本身就是一个个普通的模型࿰…...
离线 快速搭建 docker docker-compose k8s 环境
所需资源 sealos_5.0.1_linux_arm64.tar.gzkubernetes.tar等docker-compose-linux-aarch64 离线安装sealos,用于安装k8sdocker 首先安装sealos工具 tar zxvf sealos_5.0.1_linux_arm64.tar.gz sealos && chmod x sealos && mv sealos /usr/bin*…...

Excel根据条件动态索引单元格范围
假如我是一个老板,下面有数不胜数的员工,我要检查他们每周的工作产出,列一个排行榜,提高员工积极性,毕竟多劳多得嘛。 每天去手动统计,未免显得不太聪明,我们可以利用公式来解决这个问题。 我们…...

【计算机网络五】HTTP协议!网站运行的奥秘!
目录 HTTP协议 1.HTTP是什么? 2.Fiddler抓包查看HTTP协议格式 3.HTTP请求 4.HTTP响应 HTTP协议 1.HTTP是什么? HTTP ( 全称为 " 超文本传输协议 ") 诞生与 1991 年 . 目前已经发展为最主流使用的一种应用层协议 . HTTP 的前几个版本…...
开源模型应用落地-qwen模型小试-Qwen2.5-7B-Instruct-tool usage入门-Qwen-Agent深入学习(四)
一、前言 Qwen-Agent 是一个利用开源语言模型Qwen的工具使用、规划和记忆功能的框架。其模块化设计允许开发人员创建具有特定功能的定制代理,为各种应用程序提供了坚实的基础。同时,开发者可以利用 Qwen-Agent 的原子组件构建智能代理,以理解和响应用户查询。 本篇将换一种方…...

stream学习
Stream流 定义 Steam流,用于操作集合或者数组中的数据,大量结合了Lamda表达式的语法风格,代码简洁。 重点: 流只能收集一次 获取Stream流 Stream流要与数据源建立连接。 1.list 直接调用steam()即可 // list List<Stri…...

【数据结构】实验二 单链表的基本操作
一、实验目的 掌握线性表的链式存储结构的表示和实现方法。 掌握链表基本操作的算法实现,以及对相应算法的性能分析。 二、实验内容 1)根据输入的一系列整数,以0标志结束,用头插法建立单链表,并输出单链表中各元素…...
SQL 分组查询中的非聚合列要求及实例解析
在 SQL 查询中,当我们对数据进行分组时,通常会用到 GROUP BY 子句。SQL 标准要求:所有非聚合列(即没有使用聚合函数的列)都必须出现在 GROUP BY 子句中,或者是聚合函数的结果。这篇文章通过一个实例来说明这…...
Unity中实现战斗帧同步的高级技术
一、帧同步的基本原理 帧同步(Frame Synchronization)在网络游戏中指的是在每一帧上保证所有玩家所看到的游戏状态一致,而不是每个玩家单独计算自己的状态。实现帧同步通常需要每个客户端仅发送用户输入到服务器,并由服务器进行全…...
Qt 正则表达式提取文件中的 USB 设备 ID
Qt 正则表达式提取文件中的 USB 设备 ID flyfish 文档内容 Bus: 001 Device: 001 Description: 1d6b:0002 Linux Foundation 2.0 root hub Bus: 002 Device: 003 Description: 0e0f:0002 , Inc. USB Hub Bus: 002 Device: 002 Description: 0e0f:0003 , Inc. Mouse Bus: 002…...
使用 Python 和 OpenCV 实现摄像头人脸检测并截图
概述 在现代应用中,人脸检测是一项非常重要的技术,广泛应用于安全监控、身份验证等领域。本文将详细介绍如何使用 Python 和 OpenCV 库实现摄像头人脸检测并截图,并通过具体的代码示例来展示整个过程。 环境准备 在开始编写代码之前&#…...

【二叉搜素树】——LeetCode二叉树问题集锦:6个实用题目和解题思路
文章目录 计算布尔二叉树的值求根节点到叶节点的数字之和二叉树剪枝验证二叉搜索树二叉搜索树中第K小的元素二叉树的所有路径 计算布尔二叉树的值 解题思路: 这是一个二叉树的布尔评估问题。树的每个节点包含一个值,其中叶子节点值为 0 或 1࿰…...
【计算机视觉】FusionGAN
1. FusionGAN论文阅读 abreheret/FusionGAN: Pytorch implementation of "Generating a Fusion Image: One’s Identity and Another’s Shape" 1.1. WHY 在现实世界中,将对象或人物转换为期望的形状是一种常用技术,但现有的图像翻译方法在处理身份和形状时存在…...
问:SQL优化,七条实践总结?
SQL语句优化是数据库性能调优的重要部分,通过合理的优化可以显著提升查询速度和系统性能。文章总结几种常见SQL语句优化方法。 1. 优化Where子句的顺序 原则:表之间的连接条件应写在其他Where条件之前,能够过滤掉最大数量记录的条件应优先写…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...

工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...

LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...

高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...

Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...