■■ 郵便番号取り込みバッチ ■■ ・/root/job/yubin_import.sh に保存することを想定 ・/var/log/yubin/ディレクトリを事前に作成してください。 ###### 以下 yubin_import.sh ###### #!/bin/bash MAIL_TXT=/var/log/yubin/mail.log LOG_TXT=/var/log/yubin/batch.log YUBINSQL=/root/job/YUBIN_IMPORT.SQL DB_USER="USER" DB_PASS="PASS" DB_NAME="DBNAME" ADMIN_MAIL="****@****.****" # メール送信用のログをクリア rm -rf $MAIL_TXT # カレントディレクトリをtmpディレクトリに変更 cd /tmp # 日本郵便のサイトから全国の郵便番号データをダウンロード wget http://www.post.japanpost.jp/zipcode/dl/oogaki/lzh/ken_all.lzh # ファイル存在チェック if [ ! -f ken_all.lzh && ! -f ken_all.csv ]; then echo `date +%Y/%m/%d' '%H:%M:%S`' ken_all file not found' >> $LOG_TXT echo `date +%Y/%m/%d' '%H:%M:%S`' SKIP Import Yubin Data' >> $LOG_TXT exit fi # 圧縮ファイルを解凍 lha -x ken_all.lzh # ログ出力 echo `date +%Y/%m/%d' '%H:%M:%S`' START import Yubin Data' | tee -a $LOG_TXT >> $MAIL_TXT # CSVファイルの文字コード変換 iconv -f=sjis -t=utf8 < ken_all.csv > ken_all_utf8.csv # ファイルのパーミッションを変更 chmod 777 /tmp/ken_all_utf8.csv # MySQLデータベースにCSVファイルを取り込む mysql -u$DB_USER -p$DB_PASS $DB_NAME < $YUBINSQL # 作業ファイルを削除 rm -rf ken_all.csv rm -rf ken_all_utf8.csv rm -rf ken_all.lzh # 終了ログ echo `date +%Y/%m/%d' '%H:%M:%S`' END import Yubin Data' | tee -a $LOG_TXT >> $MAIL_TXT # 結果をメールで管理者に送信 iconv -f=utf8 -t=sjis $MAIL_TXT | mail -s "Success:YubinDataImportFinish" $ADMIN_MAIL exit ###### ここまで yubin_import.sh ###### ■■ CSV取り込みSQLの処理 ■■ /root/job/YUBIN_IMPORT.SQL に保存することを想定 ####### 以下 YUBIN_IMPORT.SQL ###### -- 一時テーブル初期化 TRUNCATE TABLE 一時テーブル名; LOAD DATA INFILE '/tmp/ken_all_utf8.csv' INTO TABLE 一時テーブル名 FIELDS TERMINATED BY ',' ENCLOSED BY '"'; -- 以下に一時テーブルからシステムで使用している郵便番号マスタ等に更新するSQLを記述する。 -- 一時テーブルクリア TRUNCATE TABLE 一時テーブル名; ####### ここまで YUBIN_IMPORT.SQL ###### ■■ 定時実行設定サンプル ■■ /etc/cron.d/yubinimport に記述することを想定 ###### Cron設定サンプル(毎月1日午前0時に起動 ###### 0 0 1 * * root /root/job/yubin_import.sh ■■ CSV取り込みに使用する一時テーブルサンプル ■■ ###### 一時テーブル作成DDL文サンプル ###### CREATE TABLE 一時テーブル名 ( JIS_CD VARCHAR(5), YUBIN_OLD VARCHAR(5), YUBIN VARCHAR(7), TODOFUKEN_KANA VARCHAR(100), SHIKUCHOSON_KANA VARCHAR(500), CHOIKI_KANA VARCHAR(500), TODOFUKEN VARCHAR(8), SHIKUCHOSON VARCHAR(200), CHOIKI VARCHAR(200), TMP1 VARCHAR(1), TMP2 VARCHAR(1), TMP3 VARCHAR(1), TMP4 VARCHAR(1), TMP5 VARCHAR(1), TMP6 VARCHAR(1) );