今天跟大家一起分享几个运维命令,这些命令都是由普通的Linux命令组成的,可以任意组合封装成Shell脚本,也可以延伸思路封装其他命令,下面放干货抛砖引玉:
1.查看primary segment占用空间(不包括日志和备份文件)
命令:
gpssh -f /home/dgadmin/hostfile "du -h --exclude=*pg_log* --exclude=*db_dump* -s /dgdata/primary/dg*"
解释:
-f 参数后面接segment主机名文件,通常在集群初始化的时候已经创建,这里是hostfile文件
--exclude 参数代表排除的文件夹,这里不包括日志和备份文件,所以两个exclude选项分别对应了这两个目录
-s 参数后面接集群primary数据目录,这个通常在初始化集群文件中已经定义过,本文为dg01,dg02,所以使用dg*
示例:
# 排除所有的日志和备份文件
dgadmin@flash:/dgdata/primary/dg0/pg_log$ gpssh -f /home/dgadmin/hostfile "du -h --exclude=*pg_log* --exclude=*db_dump* -s /dgdata/primary/dg*"
[flash] 2.2G /dgdata/primary/dg0
[flash] 2.2G /dgdata/primary/dg1
# 只排除备份文件
dgadmin@flash:/dgdata/primary/dg0/pg_log$ gpssh -f /home/dgadmin/hostfile "du -h --exclude=*db_dump* -s /dgdata/primary/dg*"
[flash] 3.2G /dgdata/primary/dg0
[flash] 2.2G /dgdata/primary/dg1
2.查看primary日志占用空间
命令:
gpssh -f /home/dgadmin/hostfile "du –h -s /dgdata/primary/dg*/pg_log*"
解释:
-f 参数后面接segment主机名文件,通常在集群初始化的时候已经创建,这里是hostfile文件
-s 参数后面接集群primary日志数据目录,这个通常在初始化集群文件中已经定义过,本文为dg*/pg_log*
示例:
dgadmin@flash:~$ gpssh -f /home/dgadmin/hostfile "du -h -s /dgdata/primary/dg*/pg_log*"
[flash] 1001M /dgdata/primary/dg0/pg_log
[flash] 56K /dgdata/primary/dg1/pg_log
3.批量操作同一模式下的表
命令:
for tbl in `psql -qAt -c "select tablename from pg_tables where schemaname = 'public';" tpch1g` ; do psql -c "alter table $tbl owner to dgadmin" tpch1g ; done
解释:
for 语句中第一个psql查询出tpch1g数据库的public模式下的所有表名
do 语句中的psql接前面的结果,循环执行更新动作
示例:
# 将tpch1g数据库下public模式的所有表所属用户改为dgadmin
dgadmin@flash:~$ for tbl in `psql -qAt -c "select tablename from pg_tables where schemaname = 'public';" -d tpch1g` ; do psql -c "alter table $tbl owner to dgadmin" -d tpch1g ; done
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
# 将tpch1g数据库下tpch模式的表迁移到public下
dgadmin@flash:~$ for tbl in `psql -qAt -c "select tablename from pg_tables where schemaname='tpch';" -d tpch1g`; do psql -c "ALTER TABLE tpch.$tbl SET SCHEMA public;" -d tpch1g; done
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
4.查看集群所有数据库
命令:
psql -d postgres -q -c "\l" | sed -n 4,/\eof/p | grep -v rows | grep -v template0 | grep -v template1 | awk {'print $1}' | sed 's/^://g' | sed -e '/^$/d' | grep -v '|'
解释:
##本命令实际上就是执行了一下psql的\l命令,将除用户数据库以外的所有返回都删除了
示例:
dgadmin@flash:~$ psql -d postgres -q -c "\l" | sed -n 4,/\eof/p | grep -v rows | grep -v template0 | grep -v template1 | awk {'print $1}' | sed 's/^://g' | sed -e '/^$/d' | grep -v '|'
postgres
tpch1g
本文抛砖引玉,日常总结的一些脚本思路,希望更多的朋友分享GP的运维经验~~