MySQL
csharp
#!/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
csharp
#!/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
csharp
#!/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
单个实例参数备份
csharp
#!/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
获取实例信息脚本
csharp
#!/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