HGDB批量執行psql命令的指令碼

2021-08-03 05:08:59 字數 3621 閱讀 4420

存放指令碼的伺服器需要安裝hgdb客戶端

[root@localhost ~]# groupadd -g 5866 highgo

[root@localhost ~]# useradd -u 5866 -g highgo highgo; echo highgo | passwd -f --stdin highgo

[root@localhost ~]# mkdir -p /data/highgo/4.0

[root@localhost ~]# chown -r highgo:highgo /data/

[highgo@localhost 4.0]$ tar -zxvf hgdbbak.tar.gz

設定highgo使用者的環境變數

export lang=c

export hg_home=/data/highgo/4.0

export pguser=highgo

export pgport=5866

export pgdata=/data/highgo/4.0/data

export path=$hg_home/bin:$path:$home/bin

export ld_library_path=$hg_home/lib:$ld_library_path

建立乙個存放指令碼的目錄,要有highgo使用者的屬組許可權

[root@hgdb01 psql]# pwd

/opt/psql

[root@hgdb01 psql]# ll

total 0

drwxrwxr-x. 2 highgo highgo 91 jun 23 21:09 psql_alert

指令碼內容,需要建立以下4個檔案,都需要有highgo使用者的屬組許可權

[root@hgdb01 psql_alert]# pwd

/opt/psql/psql_alert

[root@hgdb01 psql_alert]# ll

total 16

-rwx------. 1 highgo highgo 692 jun 23 21:08 mode.txt

-rwx------. 1 highgo highgo 305 jun 14 14:26 psql.exp

-rwx------. 1 highgo highgo 684 jun 14 14:21 psql.sh

-rwx------. 1 highgo highgo 111 jun 23 21:09 psql.sql

mode.txt   填寫資料庫的連線資訊

[root@hgdb01 psql_alert]# cat mode.txt 

cluster 1

1 cldb_ip 192.168.16.110

1 db_name highgo

1 db_user highgo

1 db_pawd highgo

cluster 2

2 cldb_ip 192.168.16.111

2 db_name highgo

2 db_user highgo

2 db_pawd highgo

每個資料庫需要填寫5行資訊

cluster   指定資料庫的id號,從1開始,多個資料庫依次往下排序

cldb_ip  指定連線資料庫的ip位址

db_name  指定需要連線的資料庫名稱

db_user    指定連線資料庫的使用者名稱

db_pawd   指定連線資料庫的使用者密碼

psql -h cldb_ip -p 5866 -d db_name -u db_user -w   輸入密碼db_pawd

psql.sql檔案指定需要執行的sql語句

[root@hgdb01 psql_alert]# cat psql.sql 

create table tb1 (id int);

insert into tb1 values (1);

insert into tb1 values (2);

insert into tb1 values (3);

psql.sh  執行程式

[root@hgdb01 psql_alert]# cat psql.sh

#!/bin/bash

basepath=$(cd `dirname $0`; pwd)

log=$basepath/alert_hgdb.log

cid=$(cat $basepath/mode.txt |grep ^cluster | awk '')

for id in $cid

do date=`date "+%y_%m_%d %h:%m:%s"`

echo $date "info, alter hgdb $id / $cid start" >> $log

cldb_ip=$(cat $basepath/mode.txt |grep ^"$id cldb_ip" | awk '')

db_name=$(cat $basepath/mode.txt |grep ^"$id db_name" | awk '')

db_user=$(cat $basepath/mode.txt |grep ^"$id db_user" | awk '')

db_pawd=$(cat $basepath/mode.txt |grep ^"$id db_pawd" | awk '')

expect $basepath/psql.exp $cldb_ip $db_name $db_user $db_pawd $basepath

echo $date "info, alter hgdb $id / $cid done" >> $log

done

當mode.txt和psql.sql修改完成後,以highgo使用者執行psql.sh,就可以批量執行相同的sql命令

[root@hgdb01 psql_alert]# su - highgo

[highgo@hgdb01 psql_alert]$ /opt/psql/psql_alert/psql.sh

psql.exp輔助執行指令碼

[root@hgdb01 psql_alert]# cat psql.exp

#!/usr/bin/expect

set cldb_ip [lindex $argv 0]

set db_name [lindex $argv 1]

set db_user [lindex $argv 2]

set db_pawd [lindex $argv 3]

set basepath [lindex $argv 4]

spawn psql -h $cldb_ip -p 5866 -u $db_user -d $db_name -f $basepath/psql.sql

expect "password for user $db_user:"

send "$db_pawd\r"

interact

HGDB如何提公升批量匯入資料的速度

目錄 文件用途 詳細資訊 文件用途 本文件用於提供幾個提公升瀚高資料庫批量匯入資料速度的方向,需要根據實際情況具體分析及選擇。詳細資訊 關閉自動提交 在批量插入資料時,如果每條資料都被自動提交,當中途出現系統故障時,不僅不能保障本次批量插入的資料一致性,而且由於有多次提交操作的發生,整個插入效率也會...

Redis批量執行命令

只需要兩步驟!建議直接找台linux伺服器,使用linux自帶的文字編輯,避免window linux換行符不一致,還需要做換行的轉換。新建命令文件 vim batch.txt batch.txt中輸入批量命令 lpush batch queue 1 lpush batch queue 2 lpus...

polysh批量執行shell命令

wget tar zxvf polysh 0.4.tar.gz cd polysh 0.4 sudo python setup.py install usage usr bin polysh options hosts.control commands are prefixed by use hel...