MySQLをインストールしたはいいけれど,
今回は,
デモンストレーション環境について
この回ではMySQLのインストールについては触れません。
この回で利用している環境は,yum
コマンドで以下の通りインストールしてあります。依存関係でmysql
コマンドなども一緒にインストールされている前提でいます。
$ sudo rpm -i http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm $ sudo yum install mysql-community-server
データの投入のためにワンライナーを使ったりLOAD DATA INFILE
ステートメントの不思議な構文を使ったりしていますが,
また,
サンプルデータその1,ls
さて,ls
コマンドの出力結果をMySQLに入れてみます。
yum
コマンドでMySQLをインストールした環境なので,
mysql> CREATE DATABASE ls; mysql> CREATE TABLE ls.ls(name varchar(255) NOT NULL, size int unsigned NOT NULL, PRIMARY KEY(name)); $ ls -l /usr/bin/my* | awk '{print "INSERT INTO ls.ls VALUES ('\''"$NF"'\'', "$5");"}' | mysql -u root mysql> SELECT * FROM ls.ls;
ファイル名とファイルサイズを属性に持つテーブルにデータが入りました。WHERE name LIKE '%myisam%'
でMyISAM関連のユーティリティーがあるなあ,ORDER BY size DESC
でファイルサイズの大きな順番に並べてみるとか,
サンプルデータその2,vmstat
続いて,vmstat
コマンドの出力結果をMySQLに入れてみます。
デモンストレーション環境がCentOS 6.
mysql> CREATE DATABASE vmstat; mysql> CREATE TABLE vmstat.vmstat ( -> dt datetime NOT NULL, -> running int unsigned NOT NULL, -> blocking int unsigned NOT NULL, -> swapped int unsigned NOT NULL, -> free int unsigned NOT NULL, -> buffer int unsigned NOT NULL, -> cache int unsigned NOT NULL, -> swap_in int unsigned NOT NULL, -> swap_out int unsigned NOT NULL, -> block_in int unsigned NOT NULL, -> block_out int unsigned NOT NULL, -> interapt int unsigned NOT NULL, -> context_switch int unsigned NOT NULL, -> cpu_user tinyint unsigned NOT NULL, -> cpu_system tinyint unsigned NOT NULL, -> cpu_idle tinyint unsigned NOT NULL, -> cpu_iowait tinyint unsigned NOT NULL, -> cpu_steal tinyint unsigned NOT NULL, -> PRIMARY KEY(dt) -> );
ではデータを取ってみましょう。vmstat
コマンドの出力結果を更に長くなったワンライナーでゴニョゴニョしています
$ vmstat -n 1 10 | awk '$1 !~ /^[a-z]/{print "INSERT INTO vmstat.vmstat VALUES ('\''"strftime("%Y/%m/%d %H:%M:%S", systime())"'\'', "$1", "$2", "$3", "$4", "$5", "$6", "$7", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$16", "$17");"}' | mysql -u root
10秒待つとプロンプトが返ってきますCtrl+C
で止めてしまうとデータが投入される前にプロセスが終了してしまうので,
$ mysql -u root mysql> use vmstat mysql> SELECT * FROM vmstat LIMIT 1\G *************************** 1. row *************************** dt: 2015-09-07 13:51:21 running: 2 blocking: 0 swapped: 520252 free: 90520 buffer: 29632 cache: 139960 swap_in: 0 swap_out: 0 block_in: 18 block_out: 41 interapt: 16 context_switch: 12 cpu_user: 0 cpu_system: 0 cpu_idle: 100 cpu_iowait: 0 cpu_steal: 0 1 row in set (0.00 sec)
dt
カラムに記録された年月日時分秒がプライマリーキーで,
折角なので,GROUP BY
を使って分単位で読み込みと書き込みの量を見てみます。
mysql> SELECT DATE_FORMAT(dt, '%H:%i') AS time, SUM(block_in), SUM(block_out) FROM vmstat GROUP BY time; +-------+---------------+----------------+ | time | SUM(block_in) | SUM(block_out) | +-------+---------------+----------------+ | 13:51 | 18 | 89 | | 13:54 | 4550 | 153 | | 13:55 | 13758 | 6441349 | | 13:56 | 16464 | 15020068 | +-------+---------------+----------------+ 4 rows in set (0.01 sec)
ちゃんと取得できているようです。
vmstat
コマンドの出力結果はGROUP BY
を使用した集約関数でしょうか)