MySQL

2015/10/15 23:00:57
こんばんわ!

Noranekoです。


思うところがあり、MySQLをチューニングしてみました。

システムにもよりますが、今まで数千件のデータを一件ずつグルグル回してinsertしてたのですが、

ちょっと時間もかかるようになってきたので、一括insertに変更しました。


SQLなんかも特に難しい書き方はせず、

『,』

で繋げていくだけです。
INSERT INTO
(id, clm0, clm1, clm2)
VALUES
(0, 'hoge0', 'hoge1', 'hoge2'),
(1, 'hoge10', 'hoge11', 'hoge12'),
(2, 'hoge20', 'hoge21', 'hoge22')

これが基本。

で、最後のカンマを取りたいのでphpを使って、
$sql = substr($sql, 0, -1);
$res = $dbCon->query($sql);

として、流しましょう!!

よしよし、これでぐっすり寝れる。











寝れませんでした!




Duplicateエラーでこけてました。

しかも一気に流すので、ひとつもINSERTできていませんでした^q^


当然やね!



なので、最初のSQLにある魔法の言葉を加えます。

INSERT IGNORE INTO
(id, clm0, clm1, clm2)
VALUES
(0, 'hoge0', 'hoge1', 'hoge2'),
(1, 'hoge10', 'hoge11', 'hoge12'),
(2, 'hoge20', 'hoge21', 'hoge22')


どこが変わったかよくわかりませんね。




IGNORE



これを追加しました。



無事INSERTできて、ぐっすり眠れる日が来ました。
















しかし、ある日見慣れぬエラーが!!!








次回、






『迫りくる脅威、この愛は届くのか?』





をお送り致します。








と、次回に持ち越しても良かったんですが、備忘録にならないので続けます!



それで、その時遭遇したエラーと言うのが、








『MySQL server has gone away』





義務教育6年間+αの英語教育を習った私は驚愕しました。





『has gone away』



この言葉の重み!!

直訳すると




『逝ってしまわれた』





ですよ!!

しかも、present perfectです!!


うおおおおおおDB逝ったあああああ!


と思いましたが、MySQLWorkbenchは繋がってSQLも打てる状態でした。


なんなんだこのエラーメッセージは...


ORACLEしかり何故こうもDBのエラーメッセージはうんこなのか?


わかりやすいエラーを表示すると死ぬの?馬鹿なの?


ということでググル先輩に聞いてみたところ、タイムアウトとかいろんな要因がでてきます。


が、私の場合心当たりがあるので、そこを調べてみたところビンゴでした。


その前に下記のSQLを流してみましょう
SHOW VARIABLES LIKE 'max_allowed_packet'

>1048576

となるはずです。

これは一回のSQLで流せるのが1,048,576Byte

つまり1MBですよ!

と言う意味です。

案の定、数千件のINSERT文のバイト長を調べたところちょっと超えていました。

一応カラム長とかから、大雑把に計算してその件数を決めていたのですが、

本当にわずかに超えていました。

おしかったね!

ちなみにバイト長を調べるには、

echo(strlen($sql));

とすればわかります。

なので件数を半分にしました。



これでぐっすり眠れるようになりました!


おしまい。




~こんなアプリ出してます~

authored by Noraneko | Comment(0) | Web

Google Maps JavaScript APIとか

2015/10/14 18:39:37
数日前までIE6で『ねこのニジマス』の地図表示できてたのに、

表示できなくなってるぅぅぅううううう^q^


Noranekoさんです。



本家のマップが改悪されて、検索結果の左ペインがうざくなったり、

POIをクリックした時に地図の中央に来なくなったので、URLから緯度経度が取れなくなったり

ほんと余計なことするなよ…

無駄な情報を出したいなら、最初の時みたいに左ペイン固定にしとけよ…



と言うわけで、Google Maps JavaScript APIを使用したカスタマイズをちょっとだけ説明します。

今回、地図をオレ色にしたいと思って、SNAZZY MAPSからAvocado Worldを拝借して、

更に自分好みにカスタマイズしました。

ソースを見てもらうと
var option = {
 zoom: 8,
 center: new google.maps.LatLng(36.343103, 138.863238),
 mapTypeId: google.maps.MapTypeId.ROADMAP,
 styles:[{"featureType":"landscape", bla bla bal... }]
};

という地図の初期化のstylesの部分がデザインになります。

Avocado Worldでは、
{"color":"#abce83"}

という風に色指定をしています。

これにすると、山や海などが一色でベタ塗されてしまいます。

なので、ここを
{hue:"#abce83"},
{saturation:20},
{lightness:-20}

として、指定した色に近くなるように調整しました。

Photoshopを使って、HSBを合わせて見たりしたんですが、上手くいかなかったので、

数値をいじりながら指定した色に近づけたのが上記の値です。

あと、日本の高速道路と国道(?)が同一で塗られてしまっている問題があったので、
{"featureType":"road.highway","elementType":"geometry.stroke"}{"featureType":"road.highway","elementType":"geometry.fill"}{"featureType":"road.highway.controlled_access","elementType":"geometry.fill"}

これを指定するといい感じで道路の色分けが出来ます。

この道路種別がよくわからなくて、県道とかも途中から塗られてなかったり仕様が謎です。

また、配列を扱う際は、
var hogeArray = new google.maps.MVCArray();

を使うことにより、
hogeArray.forEach(function(hoge, idx) {
 alert(hoge);
});

とforEachを使って要素を簡単に出すことが可能です。

ですが、自分みたいにマーカに対して一対の情報ウィンドウがある場合、

どちらか片方だけ配列に入れておけば事は足ります。

情報ウィンドウが地図の子供としてあるのですが、


『1つのマーカに対して1つの情報ウィンドウを持つ』


と言った使い方をしている人の方が、多いのではないのでしょうか?








???『なんかそういうデータあるんですか?』



???『あなたの感想ですよね?』






ええ、私の勝手な感想です^ω^

つまり何が言いたいかと言うと、


『1つのマーカに対して、1つの情報ウィンドウを持つマーカオブジェクトを作れ』


ということです。

お前が作れって話ですね。

めんどくさいです。

配列2個持ちます。

1つのマーカーに対して、1つの情報ウィンドウを持つマーカオブジェクトを

実装させた方は、是非ご一報下さい!




~こんなアプリ出してます~

authored by Noraneko | Comment(0) | Web

ねこのニジマス

2015/10/06 21:12:04
朝晩冷え込むようになってきました!

Noranekoです。


というわけで、自分の趣味でもある釣りのポータルサイトを構築してみました。


ねこのニジマス


です。


幾つかは自分も行ったことがあるエリアなので、簡単なレビューも入れて行こうと思っております。

なんかGoogle Maps APIも若干変わってたり、ジオコーディングが使えたりと

使い方のわかる人にとっては、いろんなことができるようになってますね。

自分の使っているやつは無料なので、25,000リクエスト数/日となってます。

つまり25,001番目にトップを開くと地図が表示されないってことですね!

ということで、ニジマス釣りをやる方や興味がある方は、見てみて下さいませ~☆




~こんなアプリ出してます~

authored by Noraneko | Comment(0) | Web

アクセスログ

2015/03/05 14:42:09
もう3月やんんんん!!!!



消費税増税に備えて、ねこに小判のアップデートとかそろそろ着手しなきゃ。


てことで、今までThe Webalizerを重宝してましたが、デイリー情報が欲しくなったので自作してみました。

基本的に、アクセスログを集計する際には
/var/log/httpd/access_log-yyyymmdd

のファイルを使いますが、phpとかで集計しようとするとアクセス権がござらん!

なので最初に
chown -R apache:apache httpd

として、アクセスできるようにしましょう。


これで90%完成です。



あとは分解して、DBに入れておしゃれにするだけです。

簡単ですね^^






で、出来上がったものがこちら!






まずは年間




次に月間



グラフをクリックするとデイリー詳細に飛ぶようにしてます。

詳細には、

アクセスファイルTOP50、アクセスドメインTOP50、リファラーTOP50を表示してて、



こんな感じになります。

通常のページでは月間の詳細も表示しています。


グラフはhighchartsを使ってみました。

先程の月間からのクリックイベントの入れ方は、
series: {
 cursor: 'pointer',
  point: {
   events: {
    click: function () {
     var loc = "hoge.html";
     window.open(loc, "new");
    }
   }
  }
 }


こんな感じです。

デイリー詳細を別ウィンドウで見たかったので、window.openしてます。



ほんとはjava scriptの中にデータをカンマで作るのが嫌で、他のを使っていたんですが、

そっちはデザイン部分がかなりいけてないので、結局highchartsになりました。






そんなこんなでデイリーも取れて満足してます!

ソースは出しませんが、どうしてもって言うならzipにしてもいいんだからねっ!




~こんなアプリ出してます~

authored by Noraneko | Comment(0) | Web

CentOS7始めました Vol.3

2014/12/02 11:34:35
アベノミクスの恩恵受けすぎワロタwww

Noranekoです^ω^




アプリは絶不調ですが、投資の方が絶好調☆彡


Studio neko投資方法は、






『宵越しの銭はいらねぇ、利益を倍プッシュだ!』












...


......


ふえぇぇ...ジェントルドンナ...




ということで、前回から時間が空きましたが、今回はMTAについて語りましょう。


MTA(Message Transfer Agent)つまりメールサーバですね。



結論から申し上げると、




ぐーぐる






を使うのが楽です!

スペルミスとか、その辺のブログサイト見て間違った値を設定したりと

毎回思うけど、これは結構大変な作業ですね。

なので未来の自分の為に、今回は手順書も作成しました。



んで、CentOS7なんですが、標準MTAがPostfixになっています。

自分もだいぶ前からPostfixに慣れ親しんでいたので良いと思います。


設定の際にIPとか調べようとしたんですが、まさかifconfigまでないとか...
ifconfig
↓
ip a

netstat
↓
ss


短くなることは良いことです!


Postfixが標準になってるなら、Dovecotも入れとけよと思うんですが入ってませんね。

Dovecotのロゴはアウトドアグッズの会社っぽくて良いですね。

こんなん




SASL認証とかで必要な物とかも一緒にインスコしておきましょう!
// dovecotインストール
# yum install dovecot
// SASLインストール
# yum install cyrus-sasl
# yum install cyrus-sasl-md5
# yum install cyrus-sasl-plain

cyrus-sasl-md5がなくて認証がはじかれてました。

どなたかのブログに書いてあって助かりました。


後重要なのはポートの解放
// SMTP 
# firewall-cmd --add-service=smtp --permanent
// Submission
# firewall-cmd --add-port=587 --permanent
// POP3S 
# firewall-cmd --add-service=pop3s --permanent
// 再起動
# systemctl restart firewalld


serviceの名前があるやつとないやつがあって、Submissionはなかったので、

上記のようにポートを指定して開けます。



あとはまってたのが、






SELinux








つかこれ、みんな切ってるでしょ?


インスコした後に最初にこれ切ってるでしょ?



httpdとかDBに関してはこいつは特に悪さしてなかったので放置してたんですが、

Postfixでとうとう悪さをしてきたので、切りました!!
# setenforce 0
# vi /etc/sysconfig/selinux
SELINUX=permissive
# reboot

こんな感じで無効に。




最後にメールの送受信ができなかった時は、
# tail /var/log/maillog 


とにらめっこしながら、原因を追究するしかありません。。。。

SASLのエラーでは、

warning sasl authentication failure internal error ***

SELinuxでのエラーは、

fatal open /etc/postfix/main.cf permission denied

と出てました。


ほんとオラクルのエラーみたいにわかりやすくていいですね!

F*CK :)




P.S.

前回からのCentOS7についての記事ですが、

最小構成インストール時の初期設定の値を表記してます。




~こんなアプリ出してます~

authored by Noraneko | Comment(0) | Web
1 2 3 
BLOG内検索
<< 2017/08 >>
Sun Mon Tue Wed Thu Fri Sat
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 31