一、shell脚本实现mysql操作
通用的shell语句如下:
mysql -hHOSTNAMEP{PORT} -uUSERNAMEp{PASSWORD} -e “${sql}” --default-character-set=UTF8
1
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 ‘columnSplitSeparatorlinesterminatedby{rowSplitSeparator}’”

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

2.3 删除数据库表操作
#这里是删除时间在某个时间段内的记录,实现数据库表的定期清理功能
#这里OTHERCONDITION可以在配置文件里面配置,添加额外的判断条件
#limit是限制一次删除的记录条数
clean_data_sql=“delete from DBNAME.{TABLENAME} where KaTeX parse error: Can't use function '\"' in math mode at position 22: …OLUMN} between \̲"̲{CLEAN_START_TIME}” and “${CLEAN_END_TIME}” and ${OTHERCONDITION} limit ${CLEAN_NUM}"

2.4 修改数据库表操作
#数据库更新操作,修改参数值
update_param_sql=“update DBNAME.{TABLENAME} set param_val=”KaTeX parse error: Can't use function '\"' in math mode at position 11: {paramVal}\̲"̲ where param_ke…{paramKey}" "
current_time=date "+%Y-%m-%d %T"
echo “${current_time} Start to update table DBNAME.{TABLENAME} set paramVal equals ${paramVal}” >> ${logFile}
initDBinfo DBNAMEmysqlh{HOSTNAME} -PPORTu{USERNAME} -pPASSWORDNse"{update_param_sql}" --default-character-set=UTF8; >> ${logFile} 2>&1

2.5 查询数据库表操作
#查询表中满足条件的记录条数
count_data_sql=“select count(1) from DBNAME.{TABLENAME} where KaTeX parse error: Can't use function '\"' in math mode at position 22: …OLUMN} 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 “currenttimeStarttoexportdata[{export_data_file_name}] from DBNAME.{TABLENAME}” >> ${logFile}
#获取数据库连接信息
initDBinfo KaTeX parse error: Expected 'EOF', got '#' at position 10: {DBNAME}#̲连接数据库并执行数据导出操作…{HOSTNAME} -PPORTu{USERNAME} -pPASSWORDNse"{export_data_sql}" --default-character-set=UTF8 > exportdatafilepath/{export_data_file_name}; >> KaTeX parse error: Expected 'EOF', got '&' at position 13: {logFile} 2>&̲1#数据导出结束日志打印c…{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}'

10-07 14:15