shell指令碼實現mysql資料庫的增刪改查操作
一、shell指令碼實現mysql操作 通用的shell語句如下: mysql -h{PORT} -u{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 {fileTableName} ({fileName}’,{fileLineCount},’{fileHdlRst}’)”
2.2 檔案資料匯入資料庫 #檔案資料匯入資料表 #dataImportFile表示匯入檔名,IMPORTSTYLE表示匯入方式,DBNAME表示資料庫名,TABLENAME表示表名, #columnSplitSeparator表示列分隔符,常見為,或者|等;rowSplitSeparator為行分隔符 import_data_sql=“load data low_priority local infile ‘${dataImportFile}’ ${IMPORTSTYLE} into table {TABLENAME} fields terminated by ‘{rowSplitSeparator}’”
#通常行分隔符為\n,linux中表示回車+換行符 rowSplitSeparator="\n"
2.3 刪除資料庫表操作 #這裡是刪除時間在某個時間段內的記錄,實現資料庫表的定期清理功能 #這裡OTHERCONDITION可以在配置檔案裡面配置,新增額外的判斷條件 #limit是限制一次刪除的記錄條數 clean_data_sql=“delete from {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 {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 {TABLENAME} set paramVal equals ${paramVal}” >> ${logFile}
initDBinfo {HOSTNAME} -P{USERNAME} -p{update_param_sql}" --default-character-set=UTF8; >> ${logFile} 2>&1
2.5 查詢資料庫表操作 #查詢表中滿足條件的記錄條數 count_data_sql=“select count(1) from {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 {TABLENAME}”
#資料匯出開始日誌列印
current_time=date "+%Y-%m-%d %T"
echo “{export_data_file_name}] from {TABLENAME}” >> ${logFile}
#獲取資料庫連線資訊
initDBinfo KaTeX parse error: Expected 'EOF', got '#' at position 10: {DBNAME}
#̲連線資料庫並執行資料匯出操作
…{HOSTNAME} -P{USERNAME} -p{export_data_sql}" --default-character-set=UTF8 > {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 {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}'