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

数据库参数备份

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

http://www.mrgr.cn/news/74964.html

相关文章:

  • 微搭低代码入门03函数
  • 【MySQL】MySQL函数之JSON_EXTRACT
  • 接口类和抽象类在设计模式中的一些应用
  • 数字化转型的路径、挑战和应用场景
  • SQL的基本CRUD操作
  • 为什么要使用Ansible实现Linux管理自动化?
  • 父子孙嵌套组件的生命周期
  • IntelliJ IDEA设置打开文件tab窗口多行展示
  • HTTP基础
  • 网站架构知识之nginx负载均衡(day027)
  • Upload-Labs-Linux1学习笔迹 (图文介绍)
  • 知识图谱6:neo4j查询语句
  • vue2在el-dialog打开的时候使该el-dialog中的某个输入框获得焦点方法总结
  • Python自动化小技巧24——实现自动化输出模板表格报告
  • A3超级计算机虚拟机,为大型语言模型LLM和AIGC提供强大算力支持
  • 工化企业内部能源能耗过大 落实能源管理
  • 【机器学习】特征工程、降维与超参数调优:提升机器学习模型表现的三大核心技术
  • 华为HCIP-openEuler考试内容大纲:备考必看!
  • 【c++丨STL】list的使用
  • 引入第三方jar包部署服务器后找不到jar处理方法
  • 连接实验室服务器并创建虚拟环境,从本地上传文件到linux服务器,使用requirement.txt安装环境需要的依赖的方法及下载缓慢的解决方法(Linux)
  • 【golang-技巧】- 定时任务 - cron
  • 启扬RK3588核心板,助力园区管理智能化升级
  • Linux基础—ssh和nfs
  • Java面向对象编程进阶之包装类
  • ue5入门教程:EventGraph