1. 程式人生 > >shell指令碼實現mysql資料庫的增刪改查操作

shell指令碼實現mysql資料庫的增刪改查操作

一、shell指令碼實現mysql操作 通用的shell語句如下: mysql -hHOSTNAMEP{HOSTNAME} -P{PORT} -uUSERNAMEp{USERNAME} -p{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 f

ileDBName.{fileDBName}.{fileTableName} (fileTableColumns)values({fileTableColumns}) values ('{fileName}’,fileSize,{fileSize},{fileLineCount},’fileRecvTim,{fileRecvTim}','{fileHdlRst}’)”

2.2 檔案資料匯入資料庫 #檔案資料匯入資料表 #dataImportFile表示匯入檔名,IMPORTSTYLE表示匯入方式,DBNAME表示資料庫名,TABLENAME表示表名, #columnSplitSeparator表示列分隔符,常見為,或者|等;rowSplitSeparator為行分隔符 import_data_sql=“load data low_priority local infile ‘${dataImportFile}’ ${IMPORTSTYLE} into table DBNAME.{DBNAME}.{TABLENAME} fields terminated by ‘columnSplitSeparatorlinesterminatedby{columnSplitSeparator}' lines terminated by '{rowSplitSeparator}’”

#通常行分隔符為\n,linux中表示回車+換行符 rowSplitSeparator="\n"

2.3 刪除資料庫表操作 #這裡是刪除時間在某個時間段內的記錄,實現資料庫表的定期清理功能 #這裡OTHERCONDITION可以在配置檔案裡面配置,新增額外的判斷條件 #limit是限制一次刪除的記錄條數 clean_data_sql=“delete from DBNAME.{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.{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.{DBNAME}.{TABLENAME} set paramVal equals ${paramVal}” >> ${logFile} initDBinfo DBNAMEmysqlh{DBNAME} mysql -h{HOSTNAME} -PPORTu{PORT} -u{USERNAME} -pPASSWORDNse"{PASSWORD} -Nse "{update_param_sql}" --default-character-set=UTF8; >> ${logFile} 2>&1

2.5 查詢資料庫表操作 #查詢表中滿足條件的記錄條數 count_data_sql=“select count(1) from DBNAME.{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.{DBNAME}.{TABLENAME}” #資料匯出開始日誌列印 current_time=date "+%Y-%m-%d %T" echo “currenttimeStarttoexportdata[{current_time} Start to export data [{export_data_file_name}] from DBNAME.{DBNAME}.{TABLENAME}” >> ${logFile} #獲取資料庫連線資訊 initDBinfo KaTeX parse error: Expected 'EOF', got '#' at position 10: {DBNAME} #̲連線資料庫並執行資料匯出操作 …{HOSTNAME} -PPORTu{PORT} -u{USERNAME} -pPASSWORDNse"{PASSWORD} -Nse "{export_data_sql}" --default-character-set=UTF8 > exportdatafilepath/{export_data_file_path}/{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.{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}'