ちゃんとカテゴリ分けされておりませんので、
記事をお探しならブログ内検索が便利です。
ご活用くださいませー+.(≧∀≦)゚+.゚
ブログ内検索
カレンダー
10 | 2024/11 | 12 |
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 |
カテゴリー
最新コメント
[11/22 รูปพวงหรีดแสดงความเสียใจ]
[11/22 ดอกไม้ งานศพ]
[11/22 ช่อดอกไม้ตามสั่ง]
[11/22 ร้านดอกไม้บรรยากาศอบอุ่น]
[11/21 Robertret]
最新記事
(08/22)
(02/19)
(01/16)
(12/29)
(12/28)
最新トラックバック
プロフィール
+ハンドル+
y_ayamori(purple)
+職業+
IT系エンジニア
+すまい+
さいたま
y_ayamori(purple)
+職業+
IT系エンジニア
+すまい+
さいたま
私はVimが好きなのでテキストエディタにVimを使用しています。
しかしこのVim、直感的に操作することができないため、非常にとっつきにくいですね><
でも慣れるととても便利なんです。
と、いうことでVimの魅力を伝えていきたいな、ってことを始めてみます。
Vimの基本的な使い方についてはこのへんを見て下さい。
http://www15.ocn.ne.jp/~tusr/vim/vim_text0.html
でもこれではどうして便利なのか、全く伝わらないので100回くらいに分けてしょーかいしよー
がんばろー
しかしこのVim、直感的に操作することができないため、非常にとっつきにくいですね><
でも慣れるととても便利なんです。
と、いうことでVimの魅力を伝えていきたいな、ってことを始めてみます。
Vimの基本的な使い方についてはこのへんを見て下さい。
http://www15.ocn.ne.jp/~tusr/vim/vim_text0.html
でもこれではどうして便利なのか、全く伝わらないので100回くらいに分けてしょーかいしよー
がんばろー
PR
PHPでログに変数の中身に何が入ったのか、記録したい場合がありますよね。
これが単純なStringなら問題ないけど、配列だった場合、
調べたところPerl だと Data::Dumper()で簡単にできるのですが、PHPでは関数で用意されていないようです。
そこでob_start()関数を使ってちょっとテクると同様のことが実現できました。
よく使うと思うのでclass化か、functionとして持っておくと便利かも?
自分自身をDumpするとか・・・なかなかひどいスクリプトですけどね(^^ゞ
例としていい配列が思い浮かばなかったのよー ><
参考サイト
[PHP]var_dump関数の出力結果をファイルに保存する
これが単純なStringなら問題ないけど、配列だった場合、
Arrayとだけ出てしまい、ログとして使い物になりません。
調べたところPerl だと Data::Dumper()で簡単にできるのですが、PHPでは関数で用意されていないようです。
そこでob_start()関数を使ってちょっとテクると同様のことが実現できました。
ob_start(); var_dump($arr); $ret =ob_get_contents(); ob_end_clean();
よく使うと思うのでclass化か、functionとして持っておくと便利かも?
class Util { function getDumpInVariable($arr) { ob_start(); var_dump($arr); $ret =ob_get_contents(); ob_end_clean(); return $ret; } } $write_file = "/path/to/file"; $util = new Util(); $arr = file($argv[0], FILE_IGNORE_NEW_LINES); $res = $util->getDumpInVariable($arr); $fp = fopen($write_file, "w"); fwrite($fp, $res); fclose($fp); readfile($write_file);
自分自身をDumpするとか・・・なかなかひどいスクリプトですけどね(^^ゞ
例としていい配列が思い浮かばなかったのよー ><
参考サイト
[PHP]var_dump関数の出力結果をファイルに保存する
タイトルのとおりなのですが、QFixGrepを使用したGrepが便利なのです。
もちろんこれはVim使いにしか当てはまらないのですが・・・
Vimはその操作性こそ独特ですが、慣れてしまえば最強のツールです。
まぁ、とにかくVim使い、もしくは使い始めた方などは使ってみてはいかがでしょうか?
参考サイト
QFixGrep - プレビュー&絞り込み検索付きvim用grepプラグイン
もちろんこれはVim使いにしか当てはまらないのですが・・・
Vimはその操作性こそ独特ですが、慣れてしまえば最強のツールです。
まぁ、とにかくVim使い、もしくは使い始めた方などは使ってみてはいかがでしょうか?
参考サイト
QFixGrep - プレビュー&絞り込み検索付きvim用grepプラグイン
私の勉強不足だと思うのですが、Excelって普通にセル関数だとisNumericってできないですよね?
じゃぁ、セルに入力された項目の内、どれが数字型かって判定したい時はどうしましょう?
とりあえずこんなコトしてみました・・・
判定したいセルに対し、四則計算を行うのです。
入力されたセルが数字型であれば計算が成功しますし、違えば「#VALUE!」になります。
あとはこの「is numeric?」に対しオートフィルタをかければ数字型だけ拾えるかなー?
かな~り、強引だし、スマートじゃないけど、簡単にできるのでー (^^ゞ
もっといい方法があれば教えてー><
ってってって・・・
なかなか数字と文字列が混在し、かつ、数字だけ抜きたい局面なんて訪れないんですけどね☆
じゃぁ、セルに入力された項目の内、どれが数字型かって判定したい時はどうしましょう?
とりあえずこんなコトしてみました・・・
判定したいセルに対し、四則計算を行うのです。
入力されたセルが数字型であれば計算が成功しますし、違えば「#VALUE!」になります。
あとはこの「is numeric?」に対しオートフィルタをかければ数字型だけ拾えるかなー?
かな~り、強引だし、スマートじゃないけど、簡単にできるのでー (^^ゞ
もっといい方法があれば教えてー><
ってってって・・・
なかなか数字と文字列が混在し、かつ、数字だけ抜きたい局面なんて訪れないんですけどね☆
Linuxのターミナル上でSSHを利用して他のサーバに初めて接続すると、
これ、「yes」コマンドも通用しないのでとても煩わしいのですね。
でもこのinteractiveな操作も設定次第だということがわかりました。
そしてその設定はssh_configに書かなくてもオプションで指定できるんですねー
詳細はmanpageや仕様をー、ってそれを見て理解できる人ならこんな所に来てないってね☆
参考サイト
【ssh】未知のホスト鍵に対して、いちいちyes/noを訊かれないようにするオプション
The authenticity of host '***.****.*** (nnn.nnn.nnn.nnn)' can't be established. RSA key fingerprint is d2:54:f5:85:5c:74:ea:0f:db:42:fa:f3:88:1e:08:fa. Are you sure you want to continue connecting (yes/no)?のように確認メッセージが表示されます。
これ、「yes」コマンドも通用しないのでとても煩わしいのですね。
でもこのinteractiveな操作も設定次第だということがわかりました。
そしてその設定はssh_configに書かなくてもオプションで指定できるんですねー
使用するオプション: -oStrictHostKeyChecking=no 例 ssh -oStrictHostKeyChecking=no user@hostname
詳細はmanpageや仕様をー、ってそれを見て理解できる人ならこんな所に来てないってね☆
参考サイト
【ssh】未知のホスト鍵に対して、いちいちyes/noを訊かれないようにするオプション
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)の書式が新旧で異なるため、対応を施しています。
ユーザ作成も最初に実施すると後から頻繁に行うものではないので、すぐに忘れてしまいます。
と言うことでメモです。
■接続ユーザ作成基本構文例
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文で統一するのが良いのではないでしょうか。
というのが私の意見です。
もちろんこの他にも多種多様なオプションが存在しますが、実用的ではないと思っているので記載しません。
と言うことでメモです。
■接続ユーザ作成基本構文例
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に続けて(スペースは入れない!)パスワードを直打ちすればインタラクティブなダンプを避けることができます。
※以前のは非公開にしまーす
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を使用するためのライブラリ(サブシステム)が読み込まれてないこと
デフォルトでは有効になっているのですが、何らかの都合で管理者がコメントアウトしてしまうとsftpが使えないようです。
それならば、WinSCPでも同じ事象が起きそうですけど・・・
もちろん普通にSSHは出来ます。
クライアントによって事象が異なるのでかなり手を焼きましたが、困っている人がいたら参考にしてみてください。
そしてなぜか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 | 特殊文字をエスケープする場合、エスケープシーケンスを指定できる。 |