5月から8月の英語勉強の結果は、まったくもってみっともない事になりました。
みっともなさすぎて、blogに書くことを止めようかと思いましたが、これすら止めてしまうと、自分の中で完全に終わってしまう気がするので、blogに学習結果を残していくことは、学習をしない月があったとしても、もうしばらく続けていきたいと思います。
5月
リスニングだけしていました。もっとも惰性で通勤中に聞き流していた程度です。
このあたりから完全にモチベーションが下がっていた状態でした。

DUO(CD) 6時間
6月
6月の前半くらいまでの間に、DUOを中心に計5~6時間ほど勉強したのですが、途中から完全に勉強放棄した状態になりました。
また、勉強時間すら記録しなかったため記録図はありません。
7,8月
6月後半から何もしませんでした。DUOすら一度も手に取らず、やる気が戻ることなく今日まで来てしまいました。
勉強しない状態がある程度続くとそれが常態化してしまうようで、最初のころは感じていた後ろめたさも薄れてしまい、この2ヶ月間はほとんど勉強することすら気にも留めていなかったと思います。
9月
9月からは『心機一転』と行きたいところなのですが、いま現在も相変わらずモチベーションは下がったままです。
このままだと挫折して終わりそうなので、勉強の仕方を工夫しなければと考えています。
pl/pgsqlで作成したfunctionのソースコードを確認する
今回は、久しぶりにPostgreSQLの内容になります。確認したPostgreSQLのバージョンは8.3.7です。
pl/pgsqlで作成したfunctionのソースコードを、実際にDB上に格納(コンパイル)されているfunctionのソースコードと、手元にあるテキストファイルのソースコードに差異があるのか確認する必要があり、以下の方法で調査しました。
PostgreSQLでは、コンパイルしたfunctionのソースコードはinfomation_schemaのroutinesビューで調べることができます。
また、確認するためにはfunctionにアクセスできるDBユーザー(所有者など)である必要があります。
select routine_definition
from information_schema.routines
where routine_name = 'ソースコードを知りたいfunctionの名前';
参照:
第 33章情報スキーマ 29.routines
自宅サーバー構築メモ(その10) muninでサーバー監視する(強化篇その1)
muninで監視する対象にWarning/Criticalとなる閾値を設定します。
今回はloadアベレージに設定を行いました。

画面下に表示されているフィールドのWarn/Crit欄がそれぞれ、Warn=Warningの閾値、Crit=Criticalの閾値です。デフォルトでは設定されていませんので空欄です。
この閾値はmunin.confで指定します。
記述方法は
[プラグイン名].[Internal name].[warning|critial] 閾値
です。
loadアベレージの場合は、下記のようになります。
load.load.warning 閾値
load.load.critical 閾値
munin.confの編集
記述は監視対象ノードのセクションにします。
[ホスト名]
address 192.168.1.10
load.load.warning 4
load.load.critical 8
暫くすると、指定した閾値がページに反映されます。
warningで指定した値を超えると、グラフの枠が黄色で表示されます。
criticalで指定した値を超えると、グラフの枠が赤色で表示されます。
強化篇その2へ続く
自宅サーバー構築メモ(その9) muninでサーバー監視する(困った篇)
muninインストール直後から発生していたことなのですが、下図のグラフ(netstat,IO Service time)の縦軸の表記がおかしいのです。
図のとおり数値が指数表記になっています。(もしかしたら指数表記が正しいのかもしれませんが。)
図.netstat
図.IO Service time
気になるので、netstatプラグインから調査を行いました。
netstatプラグインが出力する値を確認する
プラグインが出力する値は、munin-runコマンドで確認することができます。
# cd /etc/munin/plugins
# munin-run netstat
active.value 5036
passive.value 39332
failed.value 1704
resets.value 1638
established.value 1
プラグインが出力する値に、おかしな点はないようです。
rrdtoolのデータファイルを確認する
次に、rrdtoolのデータファイルの内容を確認してみました。
rrdファイルの内容を確認するにはrrdtoolコマンドを使用します。
# rrdtool info ./ml115g5.blogdns.net-netstat-established-d.rrd
filename = "./ml115g5.blogdns.net-netstat-established-d.rrd"
rrd_version = "0003"
step = 300
last_update = 1274186127
ds[42].type = "DERIVE"
ds[42].minimal_heartbeat = 600
ds[42].min = 0.0000000000e+00
ds[42].max = 5.0000000000e+04
ds[42].last_ds = "3"
ds[42].value = 0.0000000000e+00
ds[42].unknown_sec = 0
rra[0].cf = "AVERAGE"
rra[0].rows = 576
rra[0].cur_row = 202
rra[0].pdp_per_row = 1
rra[0].xff = 5.0000000000e-01
rra[0].cdp_prep[0].value = NaN
rra[0].cdp_prep[0].unknown_datapoints = 0
rra[1].cf = "MIN"
rra[1].rows = 576
rra[1].cur_row = 518
rra[1].pdp_per_row = 1
rra[1].xff = 5.0000000000e-01
rra[1].cdp_prep[0].value = NaN
rra[1].cdp_prep[0].unknown_datapoints = 0
rra[2].cf = "MAX"
rra[2].rows = 576
rra[2].cur_row = 185
rra[2].pdp_per_row = 1
rra[2].xff = 5.0000000000e-01
rra[2].cdp_prep[0].value = NaN
rra[2].cdp_prep[0].unknown_datapoints = 0
rra[3].cf = "AVERAGE"
rra[3].rows = 432
rra[3].cur_row = 250
rra[3].pdp_per_row = 6
rra[3].xff = 5.0000000000e-01
rra[3].cdp_prep[0].value = 0.0000000000e+00
rra[3].cdp_prep[0].unknown_datapoints = 0
rra[4].cf = "MIN"
rra[4].rows = 432
rra[4].cur_row = 7
rra[4].pdp_per_row = 6
rra[4].xff = 5.0000000000e-01
rra[4].cdp_prep[0].value = 0.0000000000e+00
rra[4].cdp_prep[0].unknown_datapoints = 0
rra[5].cf = "MAX"
rra[5].rows = 432
rra[5].cur_row = 35
rra[5].pdp_per_row = 6
rra[5].xff = 5.0000000000e-01
rra[5].cdp_prep[0].value = 0.0000000000e+00
rra[5].cdp_prep[0].unknown_datapoints = 0
rra[6].cf = "AVERAGE"
rra[6].rows = 540
rra[6].cur_row = 519
rra[6].pdp_per_row = 24
rra[6].xff = 5.0000000000e-01
rra[6].cdp_prep[0].value = 3.3333333333e-03
rra[6].cdp_prep[0].unknown_datapoints = 0
rra[7].cf = "MIN"
rra[7].rows = 540
rra[7].cur_row = 470
rra[7].pdp_per_row = 24
rra[7].xff = 5.0000000000e-01
rra[7].cdp_prep[0].value = 0.0000000000e+00
rra[7].cdp_prep[0].unknown_datapoints = 0
rra[8].cf = "MAX"
rra[8].rows = 540
rra[8].cur_row = 236
rra[8].pdp_per_row = 24
rra[8].xff = 5.0000000000e-01
rra[8].cdp_prep[0].value = 3.0310258864e-03
rra[8].cdp_prep[0].unknown_datapoints = 0
rra[9].cf = "AVERAGE"
rra[9].rows = 450
rra[9].cur_row = 350
rra[9].pdp_per_row = 288
rra[9].xff = 5.0000000000e-01
rra[9].cdp_prep[0].value = 3.3333333333e-03
rra[9].cdp_prep[0].unknown_datapoints = 0
rra[10].cf = "MIN"
rra[10].rows = 450
rra[10].cur_row = 206
rra[10].pdp_per_row = 288
rra[10].xff = 5.0000000000e-01
rra[10].cdp_prep[0].value = 0.0000000000e+00
rra[10].cdp_prep[0].unknown_datapoints = 0
rra[11].cf = "MAX"
rra[11].rows = 450
rra[11].cur_row = 402
rra[11].pdp_per_row = 288
rra[11].xff = 5.0000000000e-01
rra[11].cdp_prep[0].value = 3.0310258864e-03
rra[11].cdp_prep[0].unknown_datapoints = 0
rrdファイルに格納されている値が指数表記になっていました。
rrdファイルを更新する処理がおかしいのかとおもったのですが、他の正常なグラフのrrdファイルを
確認したところ、他のrrdファイルも指数表記で値を保存しているので、これは問題ないようです。
netstatプラグインを確認する
次に、netstatプラグインを確認しました。
/etc/munin/plugins/netstat
if [ "$1" = "config" ]; then
echo 'graph_title Netstat'
echo 'graph_args --base 1000 --logarithmic'
echo 'graph_vlabel active connections'
echo 'graph_category network'
echo 'graph_period second'
echo 'graph_info This graph shows the TCP activity of all the network interfaces combined.'
~途中省略~
fi
正常なグラフのプラグインと比較しながら眺めていると、気になる点が1箇所(赤文字の行)ありました。
他のプラグインは下記のようになっています。
echo 'graph_args --base 1000 -l 0'
そこで、netstatプラグインの該当個所を上記のように修正してから、念のためnetstatのrrdファイルを削除し、munin-nodeを再起動しました。
5分ほどまってから確認してみると、縦軸の表記が下図のようになりました。
図.netstat
IO Service timeプラグインも同様の記述になっていたので、同様の修正を行いました。
図.IO Service time
とりあえず、縦軸の表記が正しくなったように思います。
ただ、この対応でよかったのか確証がありません。もしかすると自宅での検証用サーバーというモニターする数値が(実環境に比べて)きわめて小さく、且つ変動が少ないという環境によるものかもしれませんし、指数表記が正しい状態なのかもしれません。
このあたりは時間ができたら調べてみたいとおもいます。
*googleなどで、munin netstatというキーワードで検索するとmuninの監視ページ自体が何件もヒットします。
そのうち、munin 1.3.x、munin 1.4.xだと大体同じ現象が起きています。
munin 1.2.xだと問題無い様です。
自宅サーバー構築メモ(その7) tritonn(MySQL)をインストール(その5)
mysqld_safe
マニュアルによると"mysqld_safe"とは、mysqldデーモンのラッパスクリプトということです。
mysqldがバイナリの実行プログラムであるのに対し、mysqld_safeはmysqldを起動するための
スクリプトファイルです。
mysqld_safeは [mysqld]、[server]、[mysqld_safe]、[safe_mysqld]セクションからオプションを読み取ります。
参照:
4.3.1. mysqld_safe - MySQL サーバ スタートアップ スクリプト
mysqlの起動スクリプト。これがmysqld_safeスクリプトを実行する。
# ls -laF /etc/init.d/mysql
-rwxr-xr-x 1 root root 11948 Nov 26 18:40 /etc/init.d/mysql*
mysql関連のプロセス。mysqld_safeがmysqldを実行する。
# ps -ef | grep mysql | grep -v grep
root 24430 1 0 06:44 ? 00:00:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --pid-file=/var/lib/mysql/ml115g5.pid
mysql 24462 24430 0 06:44 ? 00:00:03 /usr/sbin/mysqld --basedir=/ --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql/ml115g5.pid --skip-external-locking --port=3306 --socket=/var/lib/mysql/mysql.sock
mysqld_safeはスクリプトファイル。
# file /usr/bin/mysqld_safe
/usr/bin/mysqld_safe: Bourne shell script text executable
mysqldはバイナリの実行プログラム。
# file /usr/sbin/mysqld
/usr/sbin/mysqld: ELF 64-bit LSB executable, AMD x86-64, version 1 (SYSV), for GNU/Linux 2.4.0, dynamically linked (uses shared libs), for GNU/Linux 2.4.0, stripped
環境変数
一部のオプションはOSの環境変数で指定することができます。
mysqlのプロンプトの書式を設定する環境変数MYSQL_PS1がありますが、以下の設定は同じ結果になります。
環境変数に設定
export MYSQL_PS1='\u@\h [\d]>'
my.cnfで設定
[mysql]
prompt = \u@\h [\d]>
参照:
3.3.3. オプション指定のための環境変数の使用
参照:
2.14. 環境変数
その6へ続く
自宅サーバー構築メモ(その7) tritonn(MySQL)をインストール(その4)
mysqld
mysqldプログラムは[mysqld]、[server]セクションに記述したオプションを読み取ります。
[mysqld]セクションに記述できるオプションは、mysqldに--verbose --helpを指定して実行するか、mysqladminにvariablesを指定して実行することで知ることができます。
*出力されるオプションの量が多いので大分端折っています。
#mysqld --verbose --help
mysqld Ver 5.0.87-modified-log for unknown-linux-gnu on x86_64 (MySQL Community Server (GPL) (portions (c) Tritonn Project))
Copyright (C) 2000 MySQL AB, by Monty and others
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL license
Starts the MySQL database server
Usage: mysqld [OPTIONS]
Default options are read from the following files in the given order:
/etc/my.cnf ~/.my.cnf
The following groups are read: mysql_cluster mysqld server mysqld-5.0
The following options may be given as the first argument:
--print-defaults Print the program argument list and exit
--no-defaults Don't read default options from any options file
--defaults-file=# Only read default options from the given file #
--defaults-extra-file=# Read this file after the global files are read
~途中省略~
Variables (--variable-name=value)
and boolean options {FALSE|TRUE} Value (after reading options)
--------------------------------- -----------------------------
character-set-client-handshake TRUE
character-set-filesystem binary
character-set-server utf8
character-sets-dir /usr/share/mysql/charsets/
collation-server utf8_general_ci
datadir /var/lib/mysql/
default-character-set utf8
default-collation utf8_general_ci
default-time-zone (No default value)
innodb TRUE
innodb_checksums TRUE
innodb_data_home_dir /var/lib/mysql/
innodb_adaptive_hash_index TRUE
innodb_doublewrite TRUE
innodb_fast_shutdown 0
innodb_file_per_table TRUE
innodb_flush_log_at_trx_commit 1
innodb_flush_method (No default value)
innodb_locks_unsafe_for_binlog FALSE
innodb_log_arch_dir /var/lib/mysql/
innodb_log_group_home_dir /var/lib/mysql/
innodb_max_dirty_pages_pct 90
innodb_max_purge_lag 0
innodb_rollback_on_timeout FALSE
innodb_status_file FALSE
innodb_support_xa TRUE
innodb_table_locks TRUE
innodb_use_legacy_cardinality_algorithm TRUE
senna-2ind FALSE
senna-index-type (No default value)
senna-log (No default value)
senna-log-level (No default value)
innodb_additional_mem_pool_size 20971520
innodb_autoextend_increment 8
innodb_buffer_pool_awe_mem_mb 0
innodb_buffer_pool_size 536870912
innodb_commit_concurrency 0
innodb_concurrency_tickets 500
innodb_file_io_threads 4
innodb_force_recovery 0
innodb_lock_wait_timeout 50
innodb_log_buffer_size 8388608
innodb_log_file_size 134217728
innodb_log_files_in_group 3
innodb_mirrored_log_groups 1
innodb_open_files 300
innodb_sync_spin_loops 20
innodb_thread_concurrency 8
innodb_thread_sleep_delay 10000
To see what values a running MySQL server is using, type
'mysqladmin variables' instead of 'mysqld --verbose --help'.
*青字の個所はtritonn固有のオプションです。
参照:
4.2.2. コマンド オプション
文字コードの指定
クライアントとサーバーで文字コードをutf8に統一するための記述として
[client]
default-character-set=utf8
[mysqld]
default-character-set=utf8
というのを良く見かけますが、このdefault-character-setとは別にcharacter-set-serverがあります。
この2つは機能的にほぼ同じようで、default-character-setの代わりにcharacter-set-server=utf8としても同じように文字コードを指定することができます。
では、character-set-serverは何なのかということですが、マニュアルに以下のようにありました。
--default-character-set=charset_name (DEPRECATED)
デフォルトのキャラクタ セットを設定するときに、 charset_name を使用する。このオプションは --character-set-server をうけて、廃止予定である。
同じように照合順を指定するdefault-collationも廃止予定です。
--default-collation=collation_name
デフォルトの照合順序を設定するときに collation_name を使用する。このオプションは --collation-server をうけて、廃止予定である。
ということなので、今後は下記のように記述するほうが良いと思います。
[client]
default-character-set=utf8
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
それから、character-set-serverはsetコマンドで動的に変更することができます。
(*↓ハイフンではなくアンダースコアです。)
mysql>set character_set_server=utf8;
Query OK, 0 rows affected (0.00 sec)
使用できる文字コード、照合順を調べる
--文字コード
show character set;
--照合順
show collation;
その5へ続く
自宅サーバー構築メモ(その7) tritonn(MySQL)をインストール(その3)
今回の内容は、tritonn(MySQL)のインストールと直接関係は無いのですが、my.cnfの
編集を行う際に調べたことを書きたいと思います。
*(注意)インストールしたmysql(tritonn)は5.0.87ですが、この記事を書くにあたって参考にしたmysqlのマニュアルは5.1のものです。
my.cnfのセクション
my.cnfには、[client]や[mysqld]などの記述がありますが、これがセクションです。
[]内の文字列は、セクションに書くオプションを適用したいプログラムの名前や、グループを記述します。
[mysqld]セクションに書くオプションは、mysqldプログラムから読み取られます。
[client]セクションは、clientというプログラムではなくmysqlやmysqldumpなどのクライアントプログラム全般から読み取られる共通のセクションになります。
参照:
3.3.2. オプションファイルの使用
mysql
mysqlプログラムは、my.cnfの[client]及び[mysql]セクションに記述されたオプションを読み取ります。
[mysql]セクションに記述できるオプションは、mysqlに--helpを指定して実行することで知ることができます。
# mysql --help
mysql Ver 14.12 Distrib 5.0.87, for unknown-linux-gnu (x86_64) using readline 5.1
Copyright (C) 2000-2008 MySQL AB
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL license
~途中省略~
Default options are read from the following files in the given order:
/etc/my.cnf ~/.my.cnf
The following groups are read: mysql client
The following options may be given as the first argument:
--print-defaults Print the program argument list and exit
--no-defaults Don't read default options from any options file
--defaults-file=# Only read default options from the given file #
--defaults-extra-file=# Read this file after the global files are read
Variables (--variable-name=value)
and boolean options {FALSE|TRUE} Value (after reading options)
--------------------------------- -----------------------------
auto-rehash FALSE
character-sets-dir (No default value)
default-character-set utf8
comments FALSE
compress FALSE
database (No default value)
delimiter ;
vertical FALSE
force FALSE
named-commands FALSE
ignore-spaces FALSE
local-infile FALSE
no-beep FALSE
host (No default value)
html FALSE
xml FALSE
line-numbers TRUE
unbuffered FALSE
column-names TRUE
sigint-ignore FALSE
port 3306
prompt mysql>
quick FALSE
raw FALSE
reconnect TRUE
socket /var/lib/mysql/mysql.sock
table FALSE
debug-info FALSE
user (No default value)
safe-updates FALSE
i-am-a-dummy FALSE
connect_timeout 0
max_allowed_packet 16777216
net_buffer_length 16384
select_limit 1000
max_join_size 1000000
secure-auth FALSE
show-warnings FALSE
参照:
7.7.1. mysql オプション
その4へ続く