
아래 스크립트를 참고해주세요.
#!/usr/bin/bash
#scirpt to connect with db
master_db_user=''
master_db_passwd=''
master_db_port='3306'
master_db_host=''
master_db_name='uppcldashboard'
Now=$(date +"%d-%m-%Y")
date=$(date +"%F")
#Preparing script
#SQL_Query='select * from test_table;'
#MySql Command to connect to a database
#mysql -u$master_db_user -p$master_db_passwd -D$master_db_name -e "select * from uppcl_amount_details into outfile '/created_files/uppcl.csv' fields terminated by ',' lines terminated by '\n';"
mysql -u$master_db_user -p$master_db_passwd -D$master_db_name -e "select *,IFNULL(ref_4,0),IFNULL(ref_3,0),IFNULL(ref_7,0),IFNULL(ref_8,0),date_format(posting_date,'%Y-%m-%d') from uppcl_amount_details where posting_date>=CURDATE() into outfile '/created_files/uppcl.csv' fields terminated by ',' lines terminated by '\n';"
mv /created_files/uppcl.csv /created_files/offline_collection$Now.csv
sed -i "1i id","Cashier_id","Cheque_no","collection_amount","collection_type","Posting_date","Discom","Division_Code","Division_Name","Head_cashier_id","ref_3","ref_4","ref_5","ref_6","ref_7","ref_8","Tran_Date","Status","Posting_Updated_Date" /created_files/offline_collection$Now.csv
echo "End of the Script"
좋습니다. 이 스크립트는 기본적으로 MySQL 서버에서 현재 날짜의 데이터를 가져오며, 이 스크립트가 현재 날짜의 데이터를 가져오도록 예약해야 합니다. 하지만 여기에 데이터가 연속적으로 들어오는 문제가 있어서 오전 2시까지 MySQL 서버에 데이터가 입력되기 때문에 오전 2시에 예약할 수 없습니다. 그래서 두 가지 해결 방법을 생각했습니다. 예를 들어 오늘의 이전 날짜 데이터는 2020년 4월 16일이므로 스크립트가 오늘 오전 2시에 실행되면 2020년 4월 15일 데이터를 가져옵니다.
또는
저는 이 스크립트를 하루가 끝날 때, 오후 11시 58분 또는 이와 유사한 방식으로 예약합니다.
귀하의 의견으로는 어느 것이 가장 좋은 방법인지 오후 11시 58분에 cronjob을 알려주실 수 있나요?
이전 날짜의 데이터를 가져오는 것을 고려한다면 이를 얻기 위해 변경이 이루어져야 합니다.
감사합니다, Sagar Mandal
답변1
귀하의 경우에는 쿼리가 시작된 시점에 관계없이 어느 날부터 기록을 얻을 수 있도록 쿼리를 확실히 제한하고 싶습니다. 그렇게 하면 오전 2시나 언제든지 시작할 수 있습니다. 이렇게 하면 스크립트가 실행되어야 했던 시점에 문제가 발생한 경우 나중에 수동으로 스크립트를 실행할 수 있습니다.
스크립트에서 where 조건을 다음과 같이 변경합니다.
where DATE(posting_date) = DATE(DATE_ADD(CURDATE(), INTERVAL -1 DAY))
이렇게 하면 어제 날짜가 있는 레코드만 얻을 수 있습니다.
bash 변수를 사용하여 수행하려면 MySql에 적합한 형식으로 현재 날짜를 가져옵니다.
date=$(date --rfc-3339=date)
의 출력은 $date
MySql에서 인식할 수 있는 형식입니다.
2020-04-16
그런 다음 다음과 같이 where 조건을 만듭니다.
where DATE(posting_date) = DATE(DATE_ADD('$date', INTERVAL -1 DAY))
을 변경하면 interval -1 day
원하는 날짜의 데이터를 얻을 수 있습니다.
그리고 하나 더. 스크립트에서 MySql에 사용자 이름과 비밀번호를 제공하지 마십시오. 그렇게 되면 비밀번호가 노출되고 조만간 후회하게 될 것입니다. 사용 mysql_config_editor
(https://dev.mysql.com/doc/refman/8.0/en/mysql-config-editor.html) 자격 증명을 저장하고 나중에 귀하와 같은 스크립트에서 사용합니다.