shell脚本实现mysql数据库的增删改查操作

一、shell脚本实现mysql操作

通用的shell语句如下:

mysql -h${HOSTNAME}  -P${PORT}  -u${USERNAME} -p${PASSWORD} -e "${sql}" --default-character-set=UTF8 

1、HOSTNAME是主机名,通常是数据库的ip

2、PORT是端口号

3、USERNAME是用户名

4、PASSWORD是密码

5、通过写sql里面的语句可以执行相应的数据库操作,常用的是数据库的增删改查操作。

6、default-character-set是编码方式

我们通常也不会把数据库的连接信息直接写在程序中,而是写在配置文件中,如命名database.conf文件:

# 数据库 服务IP 服务端口 数据库用户 数据库密码

student 127.0.0.1 6614 root 1234

然后利用initDBinfo函数来获取数据库信息:

function initDBinfo(){

HOSTNAME=`cat ${dbconfPath} | grep ${1} | awk '{print $2}'`
PORT=`cat ${dbconfPath} | grep ${1} | awk '{print $3}'`
USERNAME=`cat ${dbconfPath} | grep ${1} | awk '{print $4}'`
PASSWORD=`cat ${dbconfPath} | grep ${1} | awk '{print $5}'`

}

二、shell脚本实现数据库表的增删改查

2.1 数据库表的新增记录

#这里是实现文件入库记录插入到数据表中
#文件大小,以M为单位
fileSize=`ls -l ${dataImportFile} | awk '{print int($5/1024)}'`
#文件行数
fileLineCount=`cat ${dataImportFile}|wc -l`
#文件接收时间
fileRecvTim=`stat ${dataImportFile}| grep Modify | awk '{print $2,$3}' | cut -d"." -f1`
#数据库名
fileDBName="fileDB"
#表名
fileTableName="file_recv_info"
#字段列表
fileTableColumns="file_nam,file_size,file_line_ctn,file_recv_tim,file_hdl_rst"
#插入数据库操作
insert_file_record_sql="insert into ${fileDBName}.${fileTableName} (${fileTableColumns}) values ('${fileName}',${fileSize},${fileLineCount},'${fileRecvTim}','${fileHdlRst}')"

2.2 文件数据导入数据库

#文件数据导入数据表
#dataImportFile表示导入文件名,IMPORTSTYLE表示导入方式,DBNAME表示数据库名,TABLENAME表示表名,
#columnSplitSeparator表示列分隔符,常见为,或者|等;rowSplitSeparator为行分隔符
import_data_sql="load data low_priority local infile '${dataImportFile}' ${IMPORTSTYLE} into table ${DBNAME}.${TABLENAME}
 fields terminated by '${columnSplitSeparator}' lines terminated by '${rowSplitSeparator}'"

 #通常行分隔符为\n,linux中表示回车+换行符
 rowSplitSeparator="\n"

2.3 删除数据库表操作

#这里是删除时间在某个时间段内的记录,实现数据库表的定期清理功能
#这里OTHERCONDITION可以在配置文件里面配置,添加额外的判断条件
#limit是限制一次删除的记录条数
clean_data_sql="delete from ${DBNAME}.${TABLENAME} where ${TIMECOLUMN} between \"${CLEAN_START_TIME}\" and \"${CLEAN_END_TIME}\" and ${OTHERCONDITION} limit ${CLEAN_NUM}"

2.4 修改数据库表操作

#数据库更新操作,修改参数值
update_param_sql="update ${DBNAME}.${TABLENAME} set param_val=\"${paramVal}\" where param_key=\"${paramKey}\" "
current_time=`date "+%Y-%m-%d %T"`
echo "${current_time} Start to update table ${DBNAME}.${TABLENAME} set paramVal equals ${paramVal}" >> ${logFile}
initDBinfo ${DBNAME}
mysql -h${HOSTNAME}  -P${PORT}  -u${USERNAME} -p${PASSWORD} -Nse "${update_param_sql}" --default-character-set=UTF8; >> ${logFile} 2>&1

2.5 查询数据库表操作

#查询表中满足条件的记录条数
count_data_sql="select count(1) from ${DBNAME}.${TABLENAME} where ${TIMECOLUMN} between \"${CLEAN_START_TIME}\" and \"${CLEAN_END_TIME}\" and ${OTHERCONDITION}"

2.6 数据库表数据导出到文件操作

#sql语句
export_data_sql="select concat(${COLUMN}) from ${DBNAME}.${TABLENAME}"
#数据导出开始日志打印
current_time=`date "+%Y-%m-%d %T"`
echo "${current_time} Start to export data [${export_data_file_name}] from ${DBNAME}.${TABLENAME}" >> ${logFile}
#获取数据库连接信息
initDBinfo ${DBNAME}
#连接数据库并执行数据导出操作
mysql -h${HOSTNAME}  -P${PORT}  -u${USERNAME} -p${PASSWORD} -Nse "${export_data_sql}" --default-character-set=UTF8 > ${export_data_file_path}/${export_data_file_name}; >> ${logFile} 2>&1
#数据导出结束日志打印
current_time=`date "+%Y-%m-%d %T"`
#echo "${current_time} Finished export data [${export_data_file_name}] from ${DBNAME}.${TABLENAME}" >> ${logFile}

其中数据库表信息也可以放在配置文件中

#导出文件名 数据库表 表名 是否分库分表 时间字段 表字段(导出数据以|分隔)
A.txt test student N tim ref_id,"|",IFNULL(stu_id,""),"|",IFNULL(nam,""),"|",IFNULL(age,""),"|",IFNULL(heigth,"")

#数据库名称
DBNAME=`cat ${confPath} | grep ${dataExportFile} | awk '{print $2}'`
#数据库中表的名称
TABLENAME=`cat ${confPath} | grep ${dataExportFile} | awk '{print $3}'`
#表是否分库分表:Y表示分库分表;N表示未分库分表; F表示未分库分表且全量导出
ISSHARDTABLE=`cat ${confPath} | grep ${dataExportFile} | awk '{print $4}'`
#时间字段
TIMECOLUMN=`cat ${confPath} | grep ${dataExportFile} | awk '{print $5}'`
#要导出的字段
COLUMN=`cat ${confPath} | grep ${dataExportFile} | awk '{print $6}'`
  • 0
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值