在同一个服务器中,一个数据库,我使用shell的循环备份多个库时,出现一个库可以备份一个库不能备份的情况,这种前提下应该该服务器下的所有库都能进行备份的
这是部分shell代码:
我看该用户权限都是有的:
应该还是权限问题,用mysql连一下确认是否权限问题
shell 中函数的定义语法很简单,只需要使用 function
关键字,且在该关键字后指定函数名,并使用一对 {}
将函数体包起来即可。
函数调用也很简单,只要直接使用函数名即可。
days2keep=()
for i in $(seq 0 1 4)
do
day2keep=`date -d "now -${i} days" +%d`
days2keep[i]=${day2keep}
done
# echo ${days2keep[*]}
function iterate_truncate(){
local table_pattern=tbl_chacc_comm_acct_oper_dtl
local tables=`mysql -h ${host} \
-P ${port} \
-D ${db} \
-u ${user} \
-p${pwd} \
-N \
-s \
-e "show tables like '${table_pattern}%';"`
for table in ${tables}
do
local tbl_day=${table:(-2)} # See page 121 from ABS for more information.
if [[ ${days2keep[@]/${tbl_day}/} == ${days2keep[@]} ]];
then
echo ${table}
fi
done
}
iterate_truncate
tbl_chacc_comm_acct_oper_dtl01
tbl_chacc_comm_acct_oper_dtl02
tbl_chacc_comm_acct_oper_dtl03
tbl_chacc_comm_acct_oper_dtl04
tbl_chacc_comm_acct_oper_dtl05
tbl_chacc_comm_acct_oper_dtl06
tbl_chacc_comm_acct_oper_dtl07
tbl_chacc_comm_acct_oper_dtl08
tbl_chacc_comm_acct_oper_dtl09
tbl_chacc_comm_acct_oper_dtl10
tbl_chacc_comm_acct_oper_dtl11
tbl_chacc_comm_acct_oper_dtl12
tbl_chacc_comm_acct_oper_dtl18
tbl_chacc_comm_acct_oper_dtl19
tbl_chacc_comm_acct_oper_dtl20
tbl_chacc_comm_acct_oper_dtl21
tbl_chacc_comm_acct_oper_dtl22
tbl_chacc_comm_acct_oper_dtl23
tbl_chacc_comm_acct_oper_dtl24
tbl_chacc_comm_acct_oper_dtl25
tbl_chacc_comm_acct_oper_dtl26
tbl_chacc_comm_acct_oper_dtl27
tbl_chacc_comm_acct_oper_dtl28
tbl_chacc_comm_acct_oper_dtl29
tbl_chacc_comm_acct_oper_dtl30
tbl_chacc_comm_acct_oper_dtl31
对于上述函数定义与调用的语法,有一点需要注意的是,在函数中定义的变量一般都使用 local
关键字进行限定,否则都默认为全局变量,即在函数中不使用 local
关键字限定的变量在函数外部和其他函数中也可以被引用,由此可能引起意料之外的问题。
函数传参采用位置变量的形式,如下所示:在调用函数 iterate_truncate
时如果使用 iterate_truncate tbl_chacc_comm_acct_oper_dtl
这样的语法,此时 tbl_chacc_comm_acct_oper_dtl
将会被视为函数参数,该参数在函数内部可以使用变量 $1
来引用。
days2keep=()
for i in $(seq 0 1 4)
do
day2keep=`date -d "now -${i} days" +%d`
days2keep[i]=${day2keep}
done
# echo ${days2keep[*]}
function iterate_truncate(){
local table_pattern=$1
local tables=`mysql -h ${host} \
-P ${port} \
-D ${db} \
-u ${user} \
-p${pwd} \
-N \
-s \
-e "show tables like '${table_pattern}%';"`
for table in ${tables}
do
local tbl_day=${table:(-2)} # See page 121 from ABS for more information.
if [[ ${days2keep[@]/${tbl_day}/} == ${days2keep[@]} ]];
then
echo ${table}
fi
done
}
iterate_truncate tbl_chacc_comm_acct_oper_dtl
tbl_chacc_comm_acct_oper_dtl01
tbl_chacc_comm_acct_oper_dtl02
tbl_chacc_comm_acct_oper_dtl03
tbl_chacc_comm_acct_oper_dtl04
tbl_chacc_comm_acct_oper_dtl05
tbl_chacc_comm_acct_oper_dtl06
tbl_chacc_comm_acct_oper_dtl07
tbl_chacc_comm_acct_oper_dtl08
tbl_chacc_comm_acct_oper_dtl09
tbl_chacc_comm_acct_oper_dtl10
tbl_chacc_comm_acct_oper_dtl11
tbl_chacc_comm_acct_oper_dtl12
tbl_chacc_comm_acct_oper_dtl18
tbl_chacc_comm_acct_oper_dtl19
tbl_chacc_comm_acct_oper_dtl20
tbl_chacc_comm_acct_oper_dtl21
tbl_chacc_comm_acct_oper_dtl22
tbl_chacc_comm_acct_oper_dtl23
tbl_chacc_comm_acct_oper_dtl24
tbl_chacc_comm_acct_oper_dtl25
tbl_chacc_comm_acct_oper_dtl26
tbl_chacc_comm_acct_oper_dtl27
tbl_chacc_comm_acct_oper_dtl28
tbl_chacc_comm_acct_oper_dtl29
tbl_chacc_comm_acct_oper_dtl30
tbl_chacc_comm_acct_oper_dtl31