数据库参数备份
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条件之前,能够过滤掉最大数量记录的条件应优先写…...
Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...
Git常用命令完全指南:从入门到精通
Git常用命令完全指南:从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...
通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器
拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件: 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...
算术操作符与类型转换:从基础到精通
目录 前言:从基础到实践——探索运算符与类型转换的奥秘 算术操作符超级详解 算术操作符:、-、*、/、% 赋值操作符:和复合赋值 单⽬操作符:、--、、- 前言:从基础到实践——探索运算符与类型转换的奥秘 在先前的文…...
