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

来源:互联网 发布:淘宝买家卖家账户分开 编辑:程序博客网 时间:2024/06/05 06:54

一、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}'`
原创粉丝点击