shell脚本实现mysql数据库的增删改查操作
Posted 吴二喵
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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'`
以上是关于shell脚本实现mysql数据库的增删改查操作的主要内容,如果未能解决你的问题,请参考以下文章