2013年1月30日水曜日

【MySQL】実行したQuery(SQL)をLog出力して監視する設定

mysql_logMySQLに発行するSQLを監視したかったので設定したときの覚書。

環境: CentOS 5.9 x86_64, MySQL 5.5.29

参考にしたのは下記Site

 

MySQL起動Scriptを編集。「--log」「--general-log」を追加
# vi /etc/rc.d/init.d/mysqld

$exec   --datadir="$datadir" --socket="$socketfile" \
        --pid-file="$mypidfile" \
        $MYOPTIONS \
        --basedir=/usr --user=mysql --general-log >/dev/null 2>&1 &

 

設定cnfを編集
# vi /etc/my.cnf

[mysqld]
# output query log
log=/var/log/mysql_query.log

 

ログファイルの作成
# touch /var/log/mysql_query.log
# chmod 640 /var/log/mysql_query.log
# chown mysql. /var/log/mysql_query.log

MySQL再起動
# /etc/rc.d/init.d/mysqld restart

監視開始
# tail -f /var/log/mysql_query.log

ほっておくとファイル容量が大きくなるので、普段はOFFにしておいた方がいいかも。

 

< 2013/01/31 Modified >
起動ログファイルに下記Warningが出力された。今は「--general-log」を使うらしい。
参考: MySQL :: MySQL 5.5 Reference Manual :: 5.2.1 Selecting General Query and Slow Query Log Output Destinations

[Warning] The syntax '--log' is deprecated and will be removed in a future release. Please use '--general-log'/'--general-log-file' instead.

 

< Related Posts >

2013年1月24日木曜日

【PHP】Server-SideでGoogle Analyticsを使ったTrackingをする

php_google-analyticsWordPressと連携するiOSアプリ、AndroidアプリをTitaniumを利用して作っている際にGoogle AnalyticsをServer-Sideで使う方法を調査したときの覚書。

Mobileアプリから直接Google Analyticsに情報を送信する方法が一般的。今回は

  • アプリ側の負荷軽減
  • サーバーと通信するアプリなので、サーバー側へのリクエストを解析できれば十分
  • iOSアプリとAndroidアプリ用に処理を分ける必要がない
  • 解析する情報を追加する場合もサーバー側を変更するだけで対応可能
  • Google Analyticsのデータ制限に引っかかった場合もサーバー側の処理を変更するだけで対応できる。
    参考:データ制限 - アナリティクス ヘルプ

と考えて、サーバーサイドで実装することにした。

検索してみるとphp-gaというLibraryを使うと比較的簡単に実装できそう。

ドキュメントは少ないけど、Usage Exampleとソースコードを読めば分かる。

設置の仕方はこんな感じ

// Load for Google Analytics module
include(dirname(dirname(__FILE__)) . '/php-ga/src/autoload.php');
use UnitedPrototype\GoogleAnalytics;

if (!$url = parse_url(site_url())) {
    return false;
}
// Initilize GA Tracker
$tracker = new GoogleAnalytics\Tracker(TENI_GOOGLE_ANALYTICS_FOR_APP, $url['host']);

// Assemble Visitor information
// (could also get unserialized from database)
$visitor = new GoogleAnalytics\Visitor();
$visitor->setIpAddress($_SERVER['REMOTE_ADDR']);
$visitor->setUserAgent($_SERVER['HTTP_USER_AGENT']);

・・・

useは関数内に記述出来ないので注意

下記SiteにあるようにSESSIONを使って自前で制御しないと「同じユーザー」と判断してくれないので注意。

 

 

Google Analyticsに「新しいプロパティ」を追加しようとしたら、最近はアプリ用のプロファイルがあるみたい。

image

まだベータ版。OfficialなSDKを使えば利用できるみたい。php-gaを使う場合は大人しく「ウェブサイト」にしておく。今後に期待。

 

< Related Posts >

2013年1月22日火曜日

PHP 5.4にUpgradeしたらphpThumbのThumbnail表示が失敗する

thumbnail_not-foundPHP 5.4とWordPressも3.5にUpgradeしたときに、サムネイルが表示されなくなったので調査。

環境: CentOS 5.8, nginx 1.2.6, PHP 5.4.10, WordPress 3.5, phpThumb 1.7.11

サムネイル表示はphpThumbを使っている。

phpThumb.class.phpの614行目の

@$ImageOutFunction($this->gdimg_output, '', $this->thumbnailQuality);

これを

@$ImageOutFunction($this->gdimg_output, null, $this->thumbnailQuality);

に変更する。

$ImageOutFunctionは「imagejpeg」を動的に生成して実行している。filenameは空文字でなくてnullを指定しないとダメみたい。

 

< Related Posts >

2013年1月21日月曜日

PHP 5.4にUpgradeしたら、memory_limitの設定でハマった

nginx_php-frpm_crashPHPを5.4にUpdateしたら、特定のページだけ処理が途中で止まる現象でハマったときの覚書。

環境: CentOS 5.8 x64, nginx 1.2.6, php-fpm 5.4.10, APC 3.1.13

各エラーログは下記。

# tail /var/log/php-fpm/error.log

[18-Jan-2013 14:11:09] WARNING: [pool www] child 19159 exited on signal 11 (SIGSEGV) after 4633.754542 seconds from start
[18-Jan-2013 14:11:09] NOTICE: [pool www] child 23016 started

# tail /var/log/nginx/error.log

2013/01/18 14:11:09 [error] 19408#0: *39283 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 49.96.40.53, server: hoge.jp, request: "POST /hoge.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "hoge.jp", referrer: https://hoge.jp/

# tail /var/log/messages

Jan 18 13:49:59 www kernel: php-fpm[21311] general protection rip:5a6a1c rsp:7fffebd20c60 error:0

これらのログが言っていることは
「予期せぬエラーでphp-fpmが停止しました」
ということ。

社内の開発環境ではこの現象が起きない。。。

何かの設定の違いかなとphp.iniを眺めていて、php.iniの
memory_limit = 256M
に対して、APCは
apc.shm_size=512M
になっていたので、

memory_limit = 512M
に変更してみると。。。

直ったっぽい。

単純にメモリが足りてなかったのか、memory_limit >= apc.shm_sizeの関係でなければならないのかは謎。

※PHP 5.3では起きなかった。

 

< 2013/02/19 Modified >
メモリ関連の設定が甘かったみたい。下記記事を参考にプロセス数など設定し直す必要がありそう。

 

< Related Posts >

2013年1月17日木曜日

i386とx86_64の環境で競合が発生。i386のModuleを削除

conflict_i386_x86_64yum updateするときに下記Errorが発生。

Transaction Check Error:
  file /usr/share/man/man1/curl.1.gz from install of curl-7.21.7-5.el5.remi.2.x86_64 conflicts with file from package curl-7.15.5-15.el5.i386

i386とx86_64のモジュールで競合が発生しているみたい。

環境: CentOS 5.8 x64, nginx 1.2.6, php 5.4.10

i386系のLibraryを削除するとupdateできるようになった
# yum remove glibc.i686
# yum update

かなりの数のLibraryが削除されるので事前に別環境で確認した方がいい。

 

参考Site

 

< Related Posts >

2013年1月16日水曜日

WordPressのTop PageがRedirect Loopし続ける

wordpress_redirect_loopなぜか突然WordPressのトップページだけが下記Errorで表示できない。

This webpage has a redirect loop (301)

環境: nginx 1.2.6, php-fpm 5.4.10, WordPress 3.5

fastcgiのCacheを削除したら正常に表示できるようになった。

# rm -rf /var/cache/nginx/fastcgi_temp/cache/*

Redirect Loopした瞬間をキャッシュしてしまったみたい。

表示できないくなった時間帯にDNSの変更してたみたいだけど、これが原因かは謎。

 

< Related Posts >

2013年1月10日木曜日

Singaporeの銀行(DBS)から日本の銀行(MUFG)に送金

dbs_mufj円安なのでDBS iBankingから東京三菱UFJ(MUFG)に送金してみたときの覚書。

海外送金はDBS iBankingにLoginして左の
Funds Transfer(Overseas) → Add Payee and Send Money Overseas
から。

「Recipient」で「NEW RECIPIENT」を選択して受取人情報、送金する銀行情報を入れていく。

Recipient's Name:
受取人の名前。送金する口座名義人のローマ字入力

Recipients Address:
送金する口座に登録してある住所

SWIFT Code:
金融機関識別コード。日本の金融機関のSWIFTコード一覧 - Wikipedia
11桁で入力する必要があるので、東京三菱UFJの場合は「BOTKJPJTXXX」

Clearing Code:
未入力でok

Recipient's Account Number:
支店番号と口座番号。ハイフンなしの連番で大丈夫だった。

Which account to pay from?:
自分のDBSの口座を選択

Currency:
「JPY Japanese Yen」

Amount:
「JPY Japanese Yen」を選択したなら日本円で入力

Agent Bank Charges:
「Charge to you」 → 手数料は送金側の負担(受取側に手数料が発生しない)。
MUFGに電話して確認したときは受け取る際に手数料で4000円ぐらい取られると言われたけど、実際DBS側に手数料S$30(約2000円)払っただけで済んだ。

Payment Details of Recipient(if any):
未入力でok

 

「submit」すると登録した携帯にSMSでOTP(One Time Password)が送らてくるので、それを入力して完了。だいたい2営業日で入金が完了する。

もしOTP用に携帯を登録してない場合は近くの(Singaporeの)ATMで登録可能。詳しくはこちら。

 

< Related Posts >

Related Posts Plugin for WordPress, Blogger...

Blog Archives