2011年10月18日火曜日

fmt:formatDate が効かない?

JSTL の fmt タグでフォーマットが無視される場合のメモ - hoge256ブログ
fmt:formatDateはリクエストヘッダにaccept-languageが設定されていない場合フォーマットしてくれない - こせきの技術日記 - 技術日記

上記ページの通り。

・目的
<fmt:formatDate value="${day}" pattern="yyyy-mm-dd"/> みたいにフォーマットを指定して出力したい

・現象
ブラウザから見るとフォーマットされた状態で出力されるが、
curl コマンドでリクエストをすると、フォーマットされない状態(Sun Aug 28 10:05:13 JST 2011 の形)で出力されてしまう。

・原因
ロケール情報が設定されていないため。
Accept-Language が送られていれば良いので、ブラウザ経由では問題なかった。

・対応
<fmt:setLocale value="ja-JP" />
でロケール情報を設定すれば回避できる。

2011年4月11日月曜日

スレーブサーバのデータをファイルコピーで入れてレプリケーションを設定する(mysql)。

■なんでこんなことしたの?
・slave02 のレプリケーションが止まってたのに
 取込前にマスターのバイナリログが消えたから。

■構成
・マスター:master01
・スレーブ:slave01
・これから作るスレーブ:slave02

■前提
・slave01 は既に存在していてレプリケーション構築済み。
・slave02 は mysql インストール済み。データはすべて消えても良い。
・master01 は止めてはいけないが slave01・slave02 は止めてよい。

■手順
・slave01 を止めて、データファイルを取得
・slave02 のデータファイルを置き換える(余計なファイルもあるので一部消す)
・slave02 のレプリケーションに関わる設定を変更する

# コピー先(新しくスレーブにするサーバ) で準備
ssh username@slave02
# slave02 で mysql 停止
mysql -uroot -p
show slave status\G
stop slave;
quit

/etc/init.d/mysql stop
ps aux | grep mysql # プロセスが存在しないことを確認

# slave02 で /var/lib/mysql をリネーム
mv /var/lib/mysql /var/lib/mysql_backupdata

# コピー元(既にスレーブになっているサーバ) でファイル取得
# master01-slave01 のレプリケーションを停止
ssh username@slave01
mysql -uroot -p
show slave status\G
stop slave;
show slave status\G
# slave01 の show slave status\G の内容を記録
echo "show slave status\G" | mysql -uroot -p > slave01_show_slave_status.txt
# slave01 で mysql を停止
hostname # 念のため確認(マスター止めてしまわないように)
/etc/init.d/mysql stop
ps aux | grep mysql
# slave01 の /var/lib/mysql を tar.gz で固める
tar cvzf ~/slave01_mysql_data.tar.gz /var/lib/mysql
# slave01 で mysql を起動
/etc/init.d/mysql start
# master01-slave01 でレプリケーションを再開
# やる前に動作確認すること。
ssh username@slave01
mysql -uroot -p
show slave status\G
stop slave;
show slave status\G
# slave01 で固めたファイルを slave02 に転送
scp ~/slave01_mysql_data.tar.gz username@slave02:/home/username/slave01_mysql_data.tar.gz

# 再びコピー先で作業
ssh username@slave02
# slave02 でそのファイルを展開して、コピーする
tar xvfz ~/slave01_mysql_data.tar.gz
# slave02 で下記に該当するファイルを削除
  ・.info ファイル
  ・.index ファイル
  ・バイナリログ (サーバ名-bin.数字)
  ・リレーログ (サーバ名-relay-bin.数字)
# slave02 で mysql を起動
/etc/init.d/mysql start
# slave02 で change master を実行
# 設定値には、slave01 で取っておいた show slave status の値を用いる。
mysql -uroot -p
CHANGE MASTER TO
MASTER_HOST='master01のIPアドレス'
, MASTER_USER='レプリケーション用ユーザ名'
, MASTER_PORT='3306'
, MASTER_PASSWORD = 'レプリケーション用パスワード'
, MASTER_LOG_FILE='slave01 の Relay_Master_Log_Fileの値'
, MASTER_LOG_POS='slave01 の Exec_Master_Log_Posの値'
# slave02 で start slave する
start slave;

# おわり。

2011年2月23日水曜日

jQuery で画像タグに指定された URL を取得する方法

jQuery を使っていて、
<img src="img/hoge.jpg" id="hogeImage"> のような
相対パスで画像 URL を指定しているimg タグがあった場合、

・$('#hogeImage').eq(0).attr('src')
・$('#hogeImage').get(0).src

この2つでは、取れる値が異なります。

jQuery の attr メソッドを使うと、タグの src 属性に書かれているままの値(この場合だと相対パス)を取得できます。
→ img/hoge.jpg
後者のように HTMLImageElement の src プロパティを見るとフルパスが取得できます。
→ http://example.com/img/hoge.jpg (http://example.com/hoge.html がそのページの URL だとしたら)

2011年2月3日木曜日

MySQL でユーザの追加と削除

削除は、権限削除 → ユーザそのものの削除 という手順を踏まないといけないらしい。
作成時のように一発でできないのは少々面倒…

ユーザの確認
SELECT User, Host FROM mysql.user;

ユーザの権限確認
SHOW GRANTS FOR 'ユーザ名'@'ホスト';

ユーザの作成(+権限追加)
GRANT SELECT, INSERT, UPDATE, DELETE (など、必要な権限を列挙) ON `データベース名`.テーブル名 FROM 'ユーザ名'@'ホスト' IDENTIFIED BY 'パスワード';

ユーザの削除(+権限削除)
REVOKE SELECT, INSERT, UPDATE, DELETE (など、設定されている権限を列挙) ON `データベース名`.テーブル名 FROM 'ユーザ名'@'ホスト';
DELETE FROM mysql.user WHERE user='ユーザ名' AND host='ホスト';
FLUSH PRIVILEGES;

# DELETE の代わりに、DROP USER 'ユーザ名' でも削除できるらしい。


参考
MySQLクイック・リファレンス

2010年11月29日月曜日

mysql で時々使うけどおぼえられないものメモ。

ロック回避してダンプ
mysqldump -uユーザ名 -p --skip-lock-tables DB名 テーブル名 > ファイル名

指定した条件のレコードだけダンプ(テーブルの作成情報はなし)
mysqldump -uユーザ名 -p -t "--where=カラム名='文字列'" DB名 テーブル名 > ファイル名

CSV 出力 (これで Errcode: 13 になる場合アクセス権限が無い)
select * into outfile '/tmp/ファイル名.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' from テーブル名;

windows xp で手動でサービス登録
mysqld-nt --install-manual service_name

2010年10月21日木曜日

PHP の設定の short_open_tag

ひとりで PHP 書いてるとか、
PHP のタグは必ず「<?php」を開始タグとして使いましょうって決まってるとか、
そういう状態なら short_open_tag は Off で良いけれども。

誰かが書いたソースを持ってきたら、クラスが見つからないとのエラー。
よく見たら、開始タグが「<?」…

php.ini に short_open_tag = On を書いたら動くようになった(既にあった Off は消した)。
めでたし。