下記の記事で紹介したHEMSの測定データをファイルに落とし込む手順を説明します。
techrmc.hatenablog.com
Raspberry Piはプロトライピング用ですから長期間運用には適しておらず、測定データを喪失するリスクがあります。
また、測定データをCSVファイル等に出力すれば、さまざまなデータ分析を行うことができるようにもなります。
そこで、mySQL内の測定データをCSVファイルへ出力する手順を紹介します。
テーブルのCSVファイル出力
データベースsensordbのテーブルpowerのデータをmySQL内で/tmp/power.csvへファイル出力するコマンドは次の通りです。なお、ファイル出力は出力先(ここでは/tmp)への書き込み権限が必要なので注意してください。
MariaDB [(none)]> use sensordb;
MariaDB [sensordb]> select * from power into outfile '/tmp/power.csv' fields terminated by ',' optionally enclosed by '"' escaped by '' lines terminated by '\n';
fields terminated byはフィールドの区切り文字の指定です。デフォルトはtabとなっているため、カンマに変更します。
optionally enclosed byはフィールドのデータを囲む文字の指定です。上記ではダブルクォーテーションで囲んでいます。
今回の測定データにはエスケーブが必要な文字がないので、escaped byは特に指定していません。
lines terminated byは行の区切り文字で、上記では、'\n'としています。
テーブルのデータ削除
格納データが大きくなりすぎるとmySQLやRaspberry Piそのものの動作が不安定になる恐れがあります。
そこで、適当なタイミングでデータを削除してあげます。
テーブル内のデータを全て削除するには、mySQL内で次のコマンドを打ちます。
この時、自動的にインクリメント(auto_increment)されるrecordidはリセットされ、再び1から始まります。
MariaDB [sensordb]> truncate table power;
これまでは、測定データのCSVファイル出力やテーブルのデータ削除といった運用操作をmySQL内で行いました。
ここでは、mySQLに入らずにこれらの操作をコマンドラインで行うシェルスクリプトを作成します。
作成するシェルスクリプトの仕様は次の通りです。
- 出力ファイル名には、出力時の日時・時刻を表す文字列を埋め込みます。例えば、2025年5月4日14時34分にシェルスクリプトが起動された場合は、202505041434を埋め込みます。
- CSVファイルを出力した後で、テーブルpowerのデータを削除します。ただし、後から過去データを元に戻したくなった時のために、データ削除する前に、テーブルのデータをダンプします。
var=$(date +%Y%m%d%H%M)
csvfile='/tmp/'$var'power.csv'
dumpfile='/tmp/'$var'power.dump'
mysql -u root -p -D sensordb -e "select * from power into outfile '$csvfile' fields terminated by ',' optionally enclosed by '\"' escaped by '' lines terminated by '\\n';"
mysqldump --single-transaction -u root -p sensordb power > $dumpfile
mysql -u root -p -D sensordb -e "truncate table power;"
mysqlのコマンドラインオプション-e "..."のダブルクォーテーションの中では、" や \ は \ によるエスケープが必要です。
このシェルスクリプトをコマンドラインで実行すると、
- 202505041434power.csv
- 202505041434power.dump
の2つのファイルが/tmpに生成されます。
202505041434power.csvは、その時点でテーブルpowerに格納されていた測定データのCSVファイルです。
202505041434power.dumpは、その時点のテーブルpowerのダンプファイルで、シェルスクリプトで削除したテーブルpowerのデータを復旧したい時は、次のコマンドでリストアします。
mysql -u root -p < /tmp/202505041434power.dump