以下のスクリプトを参照してください。
#!/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時に予約できないので、2つの解決策を考えてみました。今日の最初の日付のデータは2020年4月16日なので、今日の午前2時にスクリプトを実行すると、2020年4月15日のデータがインポートされます。
または
私はこのスクリプトを一日の終わりに、例えば午後11時58分になるようにスケジュールをつかみます。
これが最善の方法だと思いますか?午後11時58分にcronjobを教えてもらえますか?
前の日付のデータをインポートすることを検討している場合は、そのデータをインポートするように変更する必要があります。
感謝と安心の挨拶、サガーマンダル
答え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)資格情報を保存し、後であなたと同じスクリプトで使用します。