テーブルが破損した場合
クエリの中断などでテーブルが破損した場合
Can't find file tbl_name .MYI (Errcode: nnn ) のような
エラーが表示される。
【例】
DB:db_xxx
修復が必要なテーブル:table_zzz
●修復方法1
コマンドラインからMySQLへログイン。
mysql -u root -p;
使用しているDBを指定。
use db_xxx
*1
テーブルの修復。
repair table table_zzz;
●修復方法2
対象のMYIファイルが存在するDBのディレクトリに移動する。
cd /var/lib/mysql/db_xxx/
テーブルの修復。
myisamchk -r table_zzz
別のネットワークの端末からscpでファイルをコピーするバッチ処理
別のネットワーク端末からファイルをコピーする処理を自動化したい。
そういう時は、本当はセキュリティを考慮して
公開鍵認証を使ってscpでファイルをコピーするのが一番良いやり方。
その辺りは↓とか参考にすると良いのかな?
ssh scp sftp の正しい自動実行方法
これは公開鍵認証を使えない時の最終手段。
filecopy.expというファイルを作る。
中身は↓こんな感じ。
#!/usr/bin/expect set timeout 5 spawn /usr/bin/scp -q user@xxx.xxx.xxx.xxx:file.txt /directory1/directory2/. expect "Password:" send "password\n" interact
expectは「この文字列が表示されたら」なので
scpを実行した時にパスワードを聞かれたら
sendで指定したパスワードを入力する、ということになる。
ファイルを用意したら
$ expect filecopy.exp
で、実行すればOK。
file.txtは/directory1/directory2/にコピーされる。
背景画像の指定
↓のコードではFireFoxで背景画像が正しく表示されない。
<head>
<title>******</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"></meta>
<style type="text/css">
<!--
body {
background-image: url(image/Background.jpg);
background-repeat: no-repeat;
background-position: right bottom;
}
-->
</style>
</head>
↓のように記述する。
<head>
<title>******</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"></meta>
<style type="text/css">
<!--
body {
background: #ffffff url(image/Background.jpg) no-repeat fixed right bottom;
}
-->
</style>
</head>
FirebugのXPathの解釈とPerlのXPathの解釈が違う???
気象庁のwebサイトから予報の内容を取得しようとしてハマった。
天気予報のページからは取得できたので
週間予報のページからの取得もやってみようと思ったら
何故か上手くいかない…何でだ?(;´Д`)
書いてみたコードは↓これ。
#!/usr/local/bin/perl
use URI;
use Web::Scraper;
binmode(STDOUT,":encoding(cp932)");
my $WeatherInfo = scraper {
process "/html/body/div[2]/div[2]/div[5]/p/table/tbody/tr/th[2]", day => 'TEXT';
process "/html/body/div[2]/div[2]/div[5]/p/table/tbody/tr[2]/td/img", weather => '@alt';
};
my $res = $WeatherInfo->scrape(URI->new("http://www.jma.go.jp/jp/week/319.html"));
print $res->{day}."\n";
print $res->{weather}."\n";
XPathをFirebugで取得して指定してるんだが…
HTMLを見ても合っていそうなのに結果は空白…。*1
暫くパスをいじっているうちに原因が判明。
Firebugで取得したXPathは
/html/body/div[2]/div[2]/div[5]/p/table/tbody/tr/th[2]
HTMLの通りだ。
しかし。
/html/body/div[2]/div[2]/div[5]/p/table/tr/th[2]
「tbody」の部分を削ってみるとデータが取得できた。
Σ( ̄□ ̄;) FirebugとPerlのXPathの解釈は違うのか?!
どっちが合ってるのかは私には分かりませんが…*2
さらに驚いたのは
/html/body/div[2]/div[2]/div[5]/p/table/tbody/tr[2]/td/img
↑こっち。
/html/body/div[2]/div[2]/div[5]/p/table/tr[2]/td/img
直したのに表示されたデータは空白。
「tbody」を削ってもデータを取得できないのだ。
原因は「tr[2]」の部分。
/html/body/div[2]/div[2]/div[5]/p/table/tr[3]/td/img
添え字の2を3に直したらデータを取得できた。
見た目でもHTMLでも2で合っている筈なのに。
原因は
tr[1]とtr[2]の間にあるformタグ。
tr[2]で取得できるはずのデータはtr[3]の扱いになり
tr[2]と指定して取得されるのはformタグの中身ということになる。
formタグの下は何もないので取得データは空白となる。
これはひどい(>_<)
最終的にコードは↓になりました。
#!/usr/local/bin/perl
use URI;
use Web::Scraper;
binmode(STDOUT,":encoding(cp932)");
my $WeatherInfo = scraper {
process "/html/body/div[2]/div[2]/div[5]/p/table/tr/th[2]", day => 'TEXT';
process "/html/body/div[2]/div[2]/div[5]/p/table/tr[3]/td/img", weather => '@alt';
};
my $res = $WeatherInfo->scrape(URI->new("http://www.jma.go.jp/jp/week/319.html"));
print $res->{day}."\n";
print $res->{weather}."\n";
実行結果。
27火 晴れ