忍者ブログ
  ちゃんとカテゴリ分けされておりませんので、 記事をお探しならブログ内検索が便利です。 ご活用くださいませー+.(≧∀≦)゚+.゚
Admin*Write*Comment
[1]  [2]  [3]  [4]  [5]  [6]  [7

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。




perlのメンテナンスで最も苦しめられるのがCPANモジュールのバージョンです。
私の知識不足もあると思いますが、CPANモジュールはバージョンを指定してのインストールができません。
そのため、元から開発環境/本番環境と用意されていれば何ら苦労はしませんが、本番稼動しているものの開発環境がない場合。
開発環境を作成する必要が出てくるかもしれません。
 
その場合ネックなのが、本番環境と開発環境の差分です。
埋められるものは極力埋めるにしてもCPANがネックになることが多いのです。
今回はその中でもかなり苦しめられたLogHandlerについて対処方法を記述します。
 
LogHandlerは少なくとも0.68と0.72で書式が変更されています。
ドキュメントも残されていないため、どのバージョンでどのように変わったのか、正確に出すことができません。
ですので今回はバージョンが0.71以下の場合は0.68の書式で。
0.72以上であれば新書式でオブジェクトを生成するように、プログラム修正します。
 
--------------------
オブジェクト生成例
--------------------
# ログ出力の際の接頭詞情報の取得
my $hostname    = hostname;
my $pid         = $$;
my $progname    = $0;
 
# LogHandlerの基本プロパティ
my %logopts =(
    filename => "/path/to/logfile",
    #filename => \*STDOUT,  # 標準出力
    mode => 'append',
    newline => '1',
    maxlevel => '7',
    minlevel => '0',
    prefix => "$hostname $pid [<--LEVEL-->] $progname: "
);
 
# オブジェクトの作成
my $log;
if( $Log::Handler::VERSION >= 0.71 )  {
    delete $logopts{prefix};
    $log = Log::Handler->new();
    $log->add( file => \%logopts );
}
else {
    $log = Log::Handler->new(%logopts);
}
--------------------
 
もちろん0.71が新書式だというのであれば、適宜変更すれば良いと思います。
指定できるオプションももっとありますのでドキュメントを参照してください。
今回は接頭詞(prefix)の書式が新旧で異なるため、対応を施しています。
 

拍手

PR



ユーザ作成も最初に実施すると後から頻繁に行うものではないので、すぐに忘れてしまいます。
と言うことでメモです。

■接続ユーザ作成基本構文例
GRANT ALL ON *.* TO [UserName]@"[HostName]" IDENTIFIED BY "[PassWord]";

■実行できるSQL制限付き構文例
GRANT SELECT , INSERT , UPDATE , DELETE ON *.* TO [UserName]@"[HostName]" IDENTIFIED BY "[PassWord]";

■接続先DBを指定する場合
GRANT ALL ON [dbname].* TO [UserName]@"[HostName]" IDENTIFIED BY "[PassWord]";

■接続先DBとテーブルを指定する場合
GRANT ALL ON [dbname].[TableName] TO [UserName]@"[HostName]" IDENTIFIED BY "[PassWord]";

■ユーザを削除する場合
DROP USER [UserName]@"[HostName]";

■SQL投入後最後にユーザ管理テーブルを更新する
FLUSH PRIVILEGES;

ユーザは接続ホスト単位で作成されます。
そのため、ユーザは接続元ホストの数だけ存在することになります。
1. dbuser1@"localhost"
2. dbuser2@"localhost"
3. dbuser2@"192.168.0.2"
上記は3ユーザ存在していることになる。
ややこしいのはパスワードはユーザ名単位で管理されることです。
またアクセス出来るDBの権限はそれそれで別物になります。
気を付けたいのは、ユーザを削除するとき上記の場合で言えば、
dbuser2を削除するには2構文実施する必要があるのです。

それが面倒な場合はユーザ管理テーブルからどかっと削除してしまう方法もありますが、お勧めしません。
DELETE FROM mysql.user WHERE user='[UserName]' AND host='[HostName]';
FLUSH PRIVILEGES;

また、後から権限を追加する場合は新たにGRANT文を投げます。
変更する場合はユーザ@ホストが一致すれば更新になります。
パスワードに変更がなくても毎回指定しましょう。
忘れると空パスになり、非常に危険です。

ユーザを作成する、という意味ではMySQLではCREATE USER構文もあります。
ですが、権限を意識しないDBの設計はいかなる場合もないでしょうし、ユーザが存在しない場合作成と同意義になるGRANT文で統一するのが良いのではないでしょうか。
というのが私の意見です。

もちろんこの他にも多種多様なオプションが存在しますが、実用的ではないと思っているので記載しません。

拍手




以前にも投稿したのだけどざっくりしすぎていたのでちょっとだけ修正します。
※以前のは非公開にしまーす

MySQLのダンプ方法とリストア方法をいつも忘れるのでメモ。

■特定のテーブルをダンプする場合
mysqldump --skip-extended-insert [db name] [table name] -u[db user] -p > /path/to/filename

--skip-extended-insert
を指定することにより、INSERT文は冗長化します。

■特定のデータベースのテーブルを全てダンプする場合
mysqldump --skip-extended-insert [db name] -u[db user] -p > /path/to/filename
mysqldump --skip-extended-insert -B [db name] [db name] -u[db user] -p > /path/to/filename

■すべてのデータベースをダンプする場合
mysqldump --skip-extended-insert --all-databases -u[db user] -p > /path/to/filename

いろんなやり方があると思うけど、私はいつもINSERT文でリカバリ出来るように--skip-extended-insertオプションを指定します。
これは長いINSERT文ではロードが遅くなるのと引換に1行ずつコミットされるからです。
※ただし、AUTOCOMMITのON,OFFによる

業務などの実運用時のバックアップでは間違えてダンプを行ない現行のデータが損失してしまうのを防ぐため、
DROP構文は抜くように指定するのもいいと思います。
--skip-add-drop-table

もちろんオプションは多彩に用意されているのでこれだけではありません。
しかし、常にごちゃごちゃオプションを指定する必要があるわけではないと思いますので、ささっとダンプしたい方は参照してね。

ユーザ指定の「-u」とパスワード入力の「-p」は忘れやすいので気をつけよー
また、-pに続けて(スペースは入れない!)パスワードを直打ちすればインタラクティブなダンプを避けることができます。

拍手




sftpでサーバに接続を試みた時、FileZillaだと接続に失敗することがあります。
そしてなぜかWinSCPだと成功する場合があります。

今回はこの2クライアントのみで発生しましたが、もっと多くのクライアントでも同様のケースはあるかもしれません。

原因は
/etc/ssh/sshd_config
の中でsftpを使用するためのライブラリ(サブシステム)が読み込まれてないこと

#Subsystem sftp /usr/libexec/sftp-server

デフォルトでは有効になっているのですが、何らかの都合で管理者がコメントアウトしてしまうとsftpが使えないようです。
それならば、WinSCPでも同じ事象が起きそうですけど・・・

もちろん普通にSSHは出来ます。

クライアントによって事象が異なるのでかなり手を焼きましたが、困っている人がいたら参考にしてみてください。

拍手




テーブルダンプとは違い必要なデータだけをファイルに書き出す方法です。 MySQL5.1.xをターゲットにしていますが、おそらく5.x系なら出来ると思います。 それ以前のバージョンは互換性を確認できていません。
SELECT
  * 
INTO OUTFILE '/full_path/to/load_data.csv' 
  FIELDS TERMINATED BY ',' 
  OPTIONALLY ENCLOSED BY '"' 
  LINES TERMINATED BY "\n" 
  ESCAPED BY '\'
FROM
  tbl_example
WHERE
  id IN ( 
    SELECT
      id 
    FROM
      tbl_reration
    WHERE
      status = 'true' 
  ); 
SELECTとFROMの間に出力先の指定を行なっていきます。
FIELDS TERMINATED BY フィールドを何で区切るか。カンマを指定すればCSV。タブ(\t)ならTSVになる。
OPTIONALLY ENCLOSED BY フィールドを何でくくるか。フィールドにカンマがあった場合、データなのかフィールドの区切りなのかの区別が付けられる。 OPTIONALLYをつけると文字列型のデータのみに付与することが出来る。
LINES TERMINATED BY 1レコードを何で区切るか。通常は改行"\n"か"\r\n"が使われる。
ESCAPED BY 特殊文字をエスケープする場合、エスケープシーケンスを指定できる。

拍手




表題の通りの事象にお悩み中。
最悪ハングアップでお仕事になりませ~ん。・゚・(ノД`)・゚・。

と、悩んで相談したところ、「以前メールでやり方を周知しました。」
って一蹴されてテンションもひとしお。

うぐぅ。

とはいえ、メールを探しても見つからなかったので自力でサーチ。

http://pcbiginner.blog91.fc2.com/blog-entry-152.html
http://support.microsoft.com/kb/2575312/ja

なるほどねぇ。
うん、解決。

レジストリいじったのに再起動不要なんだ。
実はそこが一番驚いたりしたのです。

でわでわ


拍手




前回WEBサーバの動作が予期せぬ動きをしていたため緊急でApacheを落としました。
そのため現在下記アドレスは「サーバが見つかりません」、となっています。
 
web.mor-maid.info
wiki.mor-maid.info
 
詳しい調査の結果次第で再開しようと思っていましたが、今のところ原因は特定できませんでした。
したがって、今後この2アドレスのコンテンツについては再構築の方向で検討しています。
 
webはそもそもコンテンツらしいコンテンツがもとからなかったので良いのですが、
wikiについてはpukiwikiを利用しており、こちらのモジュールがガンブラーなどの影響が出ていないかの
確証が取れないため、やむをえず閉鎖する方向です。
 
 
今回改めてサーバ維持の難しさを実感したわけですが、諦めるわけにもいかないのでwebについてはいずれ復活させます。
 
ファイアーウォール側のパケットレベルでの徹底したガード。
WEBサーバのログ収取強化。
運用監視サーバのzabbix強化なども含め、第三者に迷惑をかけないよう徹底した再発防止策を立てた上で再稼働させます。
 
道のりは遠いけどがんばりまーす
以上
 

拍手




おそらくPHPに限ったことではないのだけど。
プログラムの中でバックグラウンドプロセスを生成したいケースはよくあること。
PHPが正式にCLIに対応した5系以降であれば、利用シーンはあると思います。

しかし、一度バックグラウンドへプロセスを投げてしまうと普段フォアグランドで作業する我々にはその処理を追いにくくなります。
特に、デバッグが不完全なプログラムで無限ループを生成してしまうと、ゾンビプロセスそのものです。
しかも通常のゾンビと違いリソースを食うのですから、ザ・ハウス・オブ・ザ・デッドのようです。

jobsコマンドで発見出来ないので、今ひとつ制御が難しいですが、
PHPで何が何だか分からなくなったら、killしてしまうのも良いかもしれませんね。

killall php

ただ、運用中のサーバだと・・・
正直通常バッチプロセスなのか、バックグラウンドで迷子になっているプロセスなのかわからないんですよね。。。
こうならないように自由にできる環境で十分に試験は行いたいものです^^


拍手




普段はオペをしている方がPHPを勉強したいと言って、カレンダーを作っていた。
サンプルにしているソースコードの解釈を手伝っていたのですが、自分で書いたらどうなるだろうと、今回チャレンジしてみました。
つまり、やらなきゃよかったシリーズですね♪

preタグが使えればいいのに・・・

拍手





こんな記事を見つけました。
http://goo.gl/WriHO

英語は得意じゃないから、意味が間違っているかもしれないけど。
要はPCと携帯に距離が生じるとロックが掛かるという仕組み。

bluetooth と連動させているみたい。

これって、windowsにも使えないのかな?
もし使えたら、セキュリティがとても高まると思うし、
起業でもISMSや、プライバシーマークの取得も用意になるとおもうの。

昨今、個人情報の取扱について物議が多いので。
こういう、ロックし忘れ防止が簡単に出来るのはいいことかもね。

案外ロックを外すのが面倒じゃなくて、
ロック自体を忘れている事のほうが多いんじゃないかなって個人的には思っています。



拍手



ブログ内検索
カレンダー
08 2017/09 10
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
カウンター
最新コメント
最新トラックバック
プロフィール
+ハンドル+
y_ayamori(purple)
+職業+
IT系エンジニア
+すまい+
さいたま
バーコード
ブログパーツ
アバター
Copyright © アナログを愛するデジタル生活館 All Rights Reserved.
photo by Kun material by Atelier Black/White Template by Kaie
忍者ブログ [PR]