[go: up one dir, main page]
More Web Proxy on the site http://driver.im/

GA

ラベル no labeled の投稿を表示しています。 すべての投稿を表示
ラベル no labeled の投稿を表示しています。 すべての投稿を表示

2024/09/10

今更 素のCentOS7.9でGoを新しくせずにdlvを入れたい

古いところに新しいGoとか入れずにdlvだけ使いたかった。


$ cat /etc/centos-release

CentOS Linux release 7.9.2009 (Core)

$ rpm -q golang
golang-1.18.4-1.el7.x86_64

$ go version

go version go1.18.4 linux/amd64

delve/Documentation/installation at master · go-delve/delve の手順におとなしく従うとgoのバージョンが古いって怒られるので

$ git clone https://github.com/go-delve/delve
Cloning into 'delve'...
remote: Enumerating objects: 28504, done.
remote: Counting objects: 100% (175/175), done.
remote: Compressing objects: 100% (111/111), done.
remote: Total 28504 (delta 83), reused 143 (delta 61), pack-reused 28329 (from 1)
Receiving objects: 100% (28504/28504), 31.27 MiB | 16.54 MiB/s, done.
Resolving deltas: 100% (19460/19460), done.
Checking connectivity... done.

$ cd delve/

$ go install github.com/go-delve/delve/cmd/dlv
# github.com/go-delve/delve/pkg/proc/gdbserial
pkg/proc/gdbserial/rr.go:247:35: undefined: strings.CutPrefix
pkg/proc/gdbserial/rr.go:248:33: undefined: strings.CutPrefix
note: module requires Go 1.21

golang-1.18-4がリリースされたころdlvのタグを探して

$ git checkout v1.20.0
Note: checking out 'v1.20.0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b <new-branch-name>

HEAD is now at f07be48... *: CHANGELOG and bump to version 1.20.0 (#3209)

$ go install github.com/go-delve/delve/cmd/dlv

エラーは出ない。

$ env | grep GO
GOPATH=/home/yoku0825/go

$ ll /home/yoku0825/go/bin/dlv
-rwxr-xr-x 1 yoku0825 yoku0825 17370208 Sep 10 14:21 /home/yoku0825/go/bin/dlv

入った。

2019/12/24

CentOS 8.0にしたらいくつかのURLに error:141A318A:SSL routines:tls_process_ske_dhe:dh key too small でアクセスできなくなった

TL;DR
$ sudo update-crypto-policies --set LEGACY

CentOS 7.xのVMを壊してしまったのでCentOS 8.xのものにお引越ししていたら
$ curl -I https://www8.cao.go.jp
curl: (35) error:141A318A:SSL routines:tls_process_ske_dhe:dh key too small
こんな風になっていくつかアクセスできないURLが。
こちらをがたぶんそのまんまで、CentOS 8.0で入ってくるのが openssl 1.1.1 だから鍵長が短いのをリジェクトしているっぽい。内閣府さん…(www.cao.go.jpの方はいけるんだけどwww8.cao.go.jpの方がダメだった…)
$ rpm -q openssl
openssl-1.1.1-8.el8.x86_64
どうやってさまよってたどり着いたのか全く覚えていないけど、
を眺めていたら crypt-policies というのが設定できるらしく、これをLEGACYにすれば1024ビットのDHパラメーターでも許してくれるらしい。
$ sudo update-crypto-policies --set LEGACY
Setting system policy to LEGACY
Note: System-wide crypto policies are applied on application start-up.
It is recommended to restart the system for the change of policies
to fully take place.

$ curl -I https://www8.cao.go.jp
HTTP/1.1 200 OK
Date: Tue, 24 Dec 2019 06:45:17 GMT
Server: Apache
X-Frame-Options: SAMEORIGIN
Last-Modified: Tue, 20 Nov 2018 08:06:15 GMT
ETag: "1f10-57b141b87cbc0"
Accept-Ranges: bytes
Content-Length: 7952
Cache-Control: no-store
Expires: Tue, 24 Dec 2019 06:45:17 GMT
Pragma: no-cache
Content-Type: text/html
いったー。
自己責任でどうぞ。

2019/11/19

MyNA 望年LT大会2019に参加してきました

昨年に引き続き SCSK さんのご支援で nomuno さんでの開催。美味しいごはんとお酒をありがとうございましたm(_ _)m

終わってしまってからでなんなんですが「どんな雰囲気なの?」「フツーのLT大会と違うの?」みたいなのを(事前に)何回か聞かれたので紹介します。
  • 飲みながらしゃべりたい人がしゃべりたいことをしゃべります
    • そういう意味では MySQL Casual Talks にも近いですがLT枠onlyでした(ただし厳密に5分きっかりなスタイルではない)
  • 椅子に座って全員同じ方向を向いて始まるというスタイルでは ない です
    • 立食パーティーをしながら、一角ではLTやってるという感じ
    • 興味があれば聞いてもいいし、お酒を嗜みながら他の人と談笑するもいいし
      • これは珍しいスタイルかも知れません
  • 赤坂です
    • だいじなことなのでもう一度言います、赤坂です(少なくとも2018と2019は赤坂でした)

私はここ最近 ~(といってもそろそろ熱が冷め始めてきていて困っている)~ MySQL Shellを使って、5分で(間に合わなかった) InnoDB Clusterのサンドボックスを構築するのにチャレンジしました。
( ´-`).oO(記事を書いた当時はWSL1で、昨日の時点ではWSL2を使っていて、かかる時間の想定に若干のブレが(いいわけ
個人的には keny_lala さんの「MySQLの気持ちになって答えるクイズ」が面白かったです! スライド公開期待 :)
しかし後で聞いてみたら「一応LTは準備してきてた(けど発表{しな|できな}かった)」みたいな人が多くて、そういう話こそ聞きたかった感もあり、そういうイベントしたいなって思った赤坂の夜でした!
あと、作って以来渡そう渡そうと思っていた マイナくんのウインドブレーカー をようやく堤井さんに渡せたので俺の2019年は無事に終わりそうです。
来年もよろしくお願いしますm(_ _)m

2018/03/30

wslbridgeを使ってCygtermからWSLを扱うときに ALT + Dとかがアレになるやつの対策

/etc/bash.bashrc に↓を書き加えてもう二度とCygwin bashをまともに起動しないことにした。

exec /cygdrive/c/Users/yoku0825/wslbridge-0.2.4-cygwin64/wslbridge.exe -C ~

2016/12/02

ペパボの中の人ではありませんがペパボとの2016年を振り返って

このエントリーは  pepabo Advent Calendar 2016 の2日目です。
ちなみに GMOペパボ の人間ではありません。

俺は2016/12/02現在 GMOペパボのものすごく近くの会社 に勤めているので、去年の 論理削除Casua Talks #1 (おや…? #1から1年たつのに#2がないぞ…?) でしゃべらせてもらったのを切っ掛けに、今年は2回、まとまった時間を作ってもらってペパボに(内部の勉強会で)遊びにいきました。






1回目の勉強会の 5.7 + 雑な方は「へぇー、その機能、2年くらい前に言ってたよね。2年くらい前に見たわ」的なマサカリで俺が死ぬんじゃないかとドキドキしていたんですが、

すっげえ楽しそうに話してて、「この人、ほんと MySQL のこと好きなんだなー」と思って。
今回 MySQL 5.7 導入しようとしたときにも顔が浮かんだし。つまり背中を押してもらえたということだ。


この記事を読んだ時にすごくうれしかったです。今もたまに読み返しています。



2回目のGaleraの方は資料無し、ホワイトボードにごりごり思いついたことを書くスタイルでやらせてもらいました。というか参加してくれた方みんなフツーのMySQLのレプリケーション詳しくてすんごい話がしやすかった。Dockerでサクッと上げたPXCに「つまりRBRなのでこういうことすると死にます、というか自殺してフル同期かかります」って言ってサクッと落としてみるとか。


Galera Cluster勉強会@ペパボ – inamuu.com

楽しんでいただけたようで何よりです。



物理的に近く に位置しているものの、「ペパボの人ってすげーなー」「あんちぽさんよくやるなー」「ペパボの常様が常様の中で一番好きだわー」とか思っていただけのパンピーなので、遊びに行かせてもらってすごく楽しかったです。

あんちぽさん と「俺の知ってるMySQLのことは何でも伝えられるので、ウチのWEBサーバー周りの人にバーターで色々教えてください」なんて話をして、来年はもっと行き来ができればいいなと思っています。







以上、GMOペパボの福利厚生からでした。来年もまたよろしくお願いします ;)

2016/11/18

WindowsでもRabbitとRabbiterを使いたい

初めて成功したので忘れないうちにメモ。

0. CygwinのRubyにパスが通ってると、rabbitを起動した時にCygwinのRubyを掴もうとすることがあってダメぽになることがある。

1. RubyInstallerでRubyをインストール。取り敢えず2.3.1で上手く動いた。 Downloads

2. 対応したDevKitをダウンロードして適当な場所に展開(取り敢えず C:\Ruby23-x64\DevKit に展開して上手くいってる) Development Kit · oneclick/rubyinstaller Wiki によると "Download it, run it to extract it somewhere (permanent)." らしい。消しちゃダメなのか。

> ruby dk.rb init
> ruby dk.rb install


2-1. `ruby dk.rb install` で "Invalid configuration or no Rubies listed. Please fix 'config.yml'" と言われる。ruby.exeの場所が見付けられていないので、config.ymlを修正してもう一度。

3. これでやっと `gem install rabbit rabbiter` できるかと思いきや、SSLのエラーを食らう。

ERROR:  Could not find a valid gem 'rabbit' (>= 0), here is why:
          Unable to download data from https://rubygems.org/ - SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (https://api.rubygems.org/specs.4.8.gz)
ERROR:  Could not find a valid gem 'rabbiter' (>= 0), here is why:
          Unable to download data from https://rubygems.org/ - SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (https://api.rubygems.org/specs.4.8.gz)

bundle install がこけるようになった の "rubygems-updateをインストールする" で解決した。 bundle install がこけるようになった(改訂版) には "rubygems 2.4にはバグがあってこの方法はとってはいけない" みたいなことも書いてあるけれど、2016年10月現在の rubygems-update の最新版は2.6.7だったのでもういいかなと思ってやってみた。
取りあえず問題は出ていない。

> gem install --local rubygems-update-2.6.8.gem
> update_rubygems

4. ようやくRabbitとRabbiterが入った。後は楽しむだけ!

> gem install rabbit
> gem install rabbiter


( ´-`).oO(ところで、rabbitのsample.rdとかsample.mdとかを動かそうとするとrabbitがハングするの俺だけ…?

2016/04/26

epelからyumでCactiをインストールするとcacti.sqlがない

久々にCactiをインストールしようとしたらハマった。
ハマったところは Cactiをインストール via yum - CentOS@さくらVPSで構築するサーバ管理・運用メモ を見て解決したんだけれど(ビバインターネット)2016年にもなってまだcacti.sql入ってないの馬鹿なの? とか思ってたらなんか変な動作してる。


なんだこれ。

# cat /etc/centos-release
CentOS release 6.6 (Final)

# yum install -y epel-release

# yum install -y cacti
..

# rpm -ql cacti | grep cacti.sql
/usr/share/doc/cacti-0.8.8b/cacti.sql

# ll /usr/share/doc/cacti-0.8.8b/cacti.sql
ls: cannot access /usr/share/doc/cacti-0.8.8b/cacti.sql: No such file or directory

# rpm -Vv cacti | grep cacti.sql
.........  d /usr/share/doc/cacti-0.8.8b/cacti.sql

epelからyumで突っ込むとcacti.sqlは無い。
でもrpm -Vでもmissingとも言われない。


# yum install -y epel-release yum-utils

# yumdownloader cacti

# yum install -y crontabs httpd mysql net-snmp net-snmp-utils php php-mysql php-snmp rrdtool perl
# rpm -i cacti-0.8.8b-7.el6.noarch.rpm

# rpm -ql cacti | grep cacti.sql
/usr/share/doc/cacti-0.8.8b/cacti.sql

# ll /usr/share/doc/cacti-0.8.8b/cacti.sql
-rw-r--r-- 1 root root 178349 Aug  7  2013 /usr/share/doc/cacti-0.8.8b/cacti.sql

# rpm -Vv cacti | grep cacti.sql
.........  d /usr/share/doc/cacti-0.8.8b/cacti.sql

yumdownloaderからのrpmでインストールするとフツーにあった(コンテナーは新しく立ち上げ直した)
えー、なにこれ。


# yum install -y epel-release yum-utils

# yumdownloader cacti
# yum install -y ./cacti-0.8.8b-7.el6.noarch.rpm

# rpm -ql cacti | grep cacti.sql
/usr/share/doc/cacti-0.8.8b/cacti.sql

# ll /usr/share/doc/cacti-0.8.8b/cacti.sql
ls: cannot access /usr/share/doc/cacti-0.8.8b/cacti.sql: No such file or directory

# rpm -Vv cacti | grep cacti.sql
.........  d /usr/share/doc/cacti-0.8.8b/cacti.sql

yumdownloaderからのyumコマンドだと消えるので、yumコマンドが悪さをしてるのはそうなんだろうけど。。
ナニコレ。

CentOS 6.6とCentOS 7.2(の吊るしのDockerイメージ)で確認。


【2016/04/26 13:42】

教えてもらいました! ビバインターネット!





# yum install -y epel-release

# diff -C1 /etc/yum.conf{.orig,}
*** /etc/yum.conf.orig  2016-04-26 04:44:45.807999999 +0000
--- /etc/yum.conf       2016-04-26 04:44:55.390999997 +0000
***************
*** 12,14 ****
  distroverpkg=centos-release
! tsflags=nodocs

--- 12,14 ----
  distroverpkg=centos-release
! #tsflags=nodocs

# yum install -y cacti

# rpm -ql cacti | grep cacti.sql
/usr/share/doc/cacti-0.8.8b/cacti.sql

# ll /usr/share/doc/cacti-0.8.8b/cacti.sql
-rw-r--r-- 1 root root 178349 Aug  7  2013 /usr/share/doc/cacti-0.8.8b/cacti.sql

やった!! ありがとうございます!!

2016/04/01

舞奈たんとは何なのか

4/1ですが大真面目なはなし(?)


俺が最初に言い出したのは多分この時。



日本MySQLユーザ会  略称MyNA(まいな)と日本MySQLユーザ会MariaDB分科会 略称MariNA(まりな)、擬人化されてないのおかしくね? みたいなネタでした(誰だったか忘れたけれど誰かが言ってたのをネタにしたと記憶している)


【2016/04/27 12:42】
代表えもんだったようです。







それ以降は割としょっちゅう言ってた気がします。




あれから2年が経ち…カッとしてクラウドワークスで発注しました。
今でもなんであんなにムキになって舞奈たんを擬人化したかったのか良くわかりません。
なお、舞奈たんは「マイナくん(仮)」の擬人化であってMySQLの擬人化ではないので、緑色です。

最初は 第2回 MySQL・PostgreSQLユーザーグループ(MyNA・JPUG)合同DB勉強会 に間に合うようなスケジュールを考えていたんですが(「MySQLといかMyNAのPostgreSQLというかJPUGに対する優位点? 萌えキャラがいることですよ!」って言いたかった)、依頼してたデザイナーさんと連絡が取れなくなるなどクラウドソーシングの闇をいくつか見たあとで、最終的に キヨイチ さんに受注していただきました(*-人-)





( ´-`).oO(現在もう候補画像は見られませんが、当時1案と呼ばれていたものが僅差で勝ちました。というわけでこれが舞奈たん。




この手のネタは人によって好き嫌い分かれそうですが、まあかつて↓こんなことやってた人たちなので大丈夫だろうとか思ってましたし思ってます。

萌え萌えなMySQL互換オープンソースデータベース「MoSQL」 - GIGAZINE


もともと、俺が会社目的でも個人目的でもスライドなりステッカーなりサイトなり好きなように使えるように発注したものなので、ライセンスはとてもゆるい です。
値段ぶんくらいは使い倒したいと思っているのでみなさんも協力してくだしあ。

ちなみに「どこからその予算出てるの?」と聞かれることが何度かありましたが、俺のお小遣いです


何が言いたいかと言うと今月のクレジットカードの引き落としがくぁwせdrftgyふじこlp


【2016/06/29 10:56】

うん、「また」なんだ。済まない。
(妻にバレるまでは)謝って許してもらおうとも思っていない。





ファイルとライセンスはこちら!

https://github.com/yoku0825/MyNA/tree/master/unofficial_myna_girl2


【2020/08/24 18:44】



30過ぎても反省しないとこうなる。
ファイルとライセンスはこちら!

2015/12/31

2015年のMySQL 5.7騒動を振り返って

ポエムです。
もう1時間半ちょっとで年も明けますが、今年も色々な方にお世話になりました。ありがとうございました。


2015年は振り返るまでもなくMySQL 5.7漬けでした。
というか、去年はまだMySQL 5.7漬けじゃなかったんですね。そのことにむしろびっくり。もっと長い間 disり 調べ続けていたような気がします。

2015/03のPercona Liveに合わせてリリースされた(と思う) MySQL 5.7 最大のリリース、MySQL 5.7.6-m16 に始まり、あっという間にリリースされた MySQL 5.7.7-rc 、フィーチャーフリーズされずに出てきた MySQL 5.7.8-rc (RC2) 、それどころかフィーチャーフリーズされないまま、RC2からGAで機能追加がされているという MySQL 5.7.9-GA 。。

ちなみにMariaDB 10.0が 10.0.9(RC2) でフィーチャーフリーズせずに新機能を追加した時に「馬鹿なwwww」とか思った記憶があるんですが、見事にMySQLにブーメランになって返ってきましたね。アイタタタタ。

そしてMySQL史上類を見ない膨大な量のリリースノート。htmlタグ込みとはいえ、5.7.6だけじゃなくて他のも十分すごい。


$ curl -s http://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-1.html | wc
   2631   13546  158162

$ curl -s http://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-2.html | wc
   5028   26154  307853

$ curl -s http://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-3.html | wc
   2392   11339  139404

$ curl -s http://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-4.html | wc
   3056   14810  184922

$ curl -s http://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-5.html | wc
   4322   22095  261145

$ curl -s http://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-6.html | wc
   4760   24208  302234

$ curl -s http://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-7.html | wc
   1471    6774   91604

$ curl -s http://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-8.html | wc
   4178   21629  268333

$ curl -s http://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-9.html | wc
   3054   14926  186386

$ curl -s http://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-10.html | wc
   1278    5749   78511

こうしてみると確かに5.7.7は確かにRCだけど5.7.6から1か月くらいで出たし、印象薄いな。。
ともあれ、無事(大きな事故もなく?)GAとしてリリースされたMySQL 5.7、2年越しで(節目節目でとはいえ)更新を追っかけ続けて、結構疲れました。しばらくはこの1年間の貯蓄ででつつましく導入&運用していきたい感じ。

slideshare を見ても、4月MyNAのInnoDB FTSを皮切りにMySQL 5.7を(リライトも再演もやったので、結構な回数になった)積極的にやってきたんだなーって感じになりました。

やってきたんだなーっていうか、やりすぎたなーと思っています(二重の意味で)
"MySQL 5.7"で"罠"がサジェストされるとは。正直すまんかった。

「5.7はn倍速い」
「5.7は新機能がいっぱい」
うん、それは知ってる。でも気を付けなきゃユーザーが痛い目見るものもあるよね? それも紹介してよ。

そんなコンセプトでGAまで活動を続けた結果。


MySQL :: 資料ダウンロード > MySQL 最新情報セミナー2015秋 > MySQL 5.7 新旧パラメタ比較

「どこかの誰かさんがMySQL 5.7のパラメーターは罠い罠い言い続けた結果」
「お客様からも"5.7は罠なの?"とお問い合わせをいただくようになり」
「こんなものを用意した」

(∩´∀`)∩ワーイ

これが俺の今年の一番の成果であることは間違いありません。
これを「○racle公式の資料」として掲載するために、某氏とか某氏とか結構骨を折ってもらったんじゃないかという気もします。ありがとうございました。


あ、この資料、2015/12/31 22:16 JST時点の版だとlog_error_verbosityのデフォルト値が間違ってるので注意してくださいね :-P

それではまた来年もよろしくお願いします。
来年は何してるんだろうなー。

2015/12/10

sqlplusのお供、rlwrapのオプションについて調べてみた

この記事は JPOUG Advent Calendar 2015 の10日目の記事です。

残念ながら私は全くOracleというDBMSが使えません。どれくらい使えないかというと、

SQL> SHOW DATABASES;
SP2-0158: unknown SHOW option "DATABASES"

( ゚д゚)ノ せんせー、このDBMSダメなやつです!

というくらい使えません。PostgreSQLだったらまだコマンドラインクライアントをゴニョって`SHOW DATABASES`で一覧を出すくらいのことは出来たんですが、sqlplusだとそういう訳にも行きませんね、このクローズドソース野郎!!1

という訳で、sqlplus使い御用達(と聞いている) rlwrap の話をしようと思います。わたしは groonga (コマンドラインクライアントの方)でrlwrapをよく使いますが、初めてオプションを調べてみたので記録しておきます。

有名な話だったらごめんなさい。


まずは単に起動。

$ rlwrap sqlplus

SQL*Plus: Release 11.2.0.4.0 Production on Mon Dec 7 18:52:56 2015

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Enter user-name: supersuper
Enter password: **********


とまあこの通りパスワード部分はreadlineを通らず、"*"でマークされました。
Enter叩いた瞬間に"*"も消えました。sqlplus、こんな動作なのか。

そしてそこで有名なやつとして-aオプションを足してみると

$ rlwrap -a sqlplus

SQL*Plus: Release 11.2.0.4.0 Production on Mon Dec 7 18:59:45 2015

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Enter user-name: supersuper
Enter password: top_s3cret


如何にもありそうな感じで、剥き出しでパスワードが表示される。本来、パスワードっぽいものを遠慮してreadlineに流さずにやってるのを、全部readlineに通してそのあとNL契機でsqlplusに渡してるんですね、たぶん。"*"の時と同じくエンター叩いた瞬間に消えますが、SQLのプロンプトで↑キーを押すと


SQL> top_s3cret

履歴に出た━━━━(゚∀゚)━━━━!!
readlineに渡るとhistory_fileにも書くからか。そうか、確かにそうだけど面白い。


$ rlwrap -a"Enter password:" sqlplus

SQL*Plus: Release 11.2.0.4.0 Production on Mon Dec 7 19:02:19 2015

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Enter user-name: supersuper
Enter password: **********

-aオプションの直後(スペース文字を入れると、「スペース入れるな!」って怒られた)に指定した文字列が来た時は、パスワードだと見做してreadlineを通さなくなる、様子。
ちなみに"Enter password:"の状態で-aオプション *無し* の時でも *↑↓キーによる履歴呼び出しが可能* なので、一度パスワードが記録されると何となく雰囲気でログインできるかも知れない。


$ rlwrap -p"YELLOW" sqlplus

SQL*Plus: Release 11.2.0.4.0 Production on Mon Dec 7 19:15:38 2015

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Enter user-name: supersuper
Enter password:

う、テキストべた張りだと感動が伝わらないと思いますが、プロンプトが全て黄色太文字になってます。
"yellow"だと太文字ではない様子。"RED"だと赤太文字、"red"だと赤細文字でした。へーすごい。MySQLでいうところの--pagerにカラーコード仕込む感じですね。でもこっちの方が英語で指定できていいなぁ。ってかmysqlコマンドラインクライアントもrlwrap経由で起動させてやれば 日々の覚書: MySQL 5.6以降のmysqlコマンドラインクライアントでプロンプトに色を付けるcmakeオプション なんてのも必要なくなりそう。うむ。


$ rlwrap -z"pipeto" sqlplus
..
SQL> SELECT * FROM ..; | less -S -r

そして極め付け。SQLの結果をそのまま別のプロセスにパイプで渡せるpipetoフィルター。mysqlにはpagerコマンドがあるので気楽にlessに食わせられるけれど、sqlplusにはお手軽なのがないらしい。

`-z"pipeto"`オプションを付けると、出力をパイプに向けられる。
( *出力を* 向けるので、パイプの手前までで出力が開始されてないとダメ。つまりSQLなら *セミコロンまで打ち込んでからパイプを付ける* 

ところでこれ、MySQLは文字列結合に"||"演算子を使わないから良いとして、Oracleはよく使いそう(偏見)なので、上手くやってくれ…

SQL> SELECT 'a' || 'b'; | wc

sh: -c: line 0: 期待してない token `|' のあたりにシンタックスエラー
sh: -c: line 0: `| 'b'; | wc'

  2

る訳がなかった。そりゃ別にsqlplus用のユーティリティーってわけじゃあるまいし。
幸いにしてフィルターの類はPerlで書かれているらしいので、ちょっと探してみる。


$ rpm -ql rlwrap
/usr/bin/rlwrap
/usr/share/doc/rlwrap-0.41
/usr/share/doc/rlwrap-0.41/AUTHORS
/usr/share/doc/rlwrap-0.41/COPYING
/usr/share/doc/rlwrap-0.41/NEWS
/usr/share/doc/rlwrap-0.41/README
/usr/share/man/man1/rlwrap.1.gz
/usr/share/man/man3/RlwrapFilter.3pm.gz
/usr/share/rlwrap
/usr/share/rlwrap/completions
/usr/share/rlwrap/completions/coqtop
/usr/share/rlwrap/completions/testclient
/usr/share/rlwrap/filters
/usr/share/rlwrap/filters/README
/usr/share/rlwrap/filters/RlwrapFilter.3pm
/usr/share/rlwrap/filters/RlwrapFilter.pm
/usr/share/rlwrap/filters/censor_passwords
/usr/share/rlwrap/filters/count_in_prompt
/usr/share/rlwrap/filters/ftp_filter
/usr/share/rlwrap/filters/history_format
/usr/share/rlwrap/filters/listing
/usr/share/rlwrap/filters/logger
/usr/share/rlwrap/filters/null
/usr/share/rlwrap/filters/paint_prompt
/usr/share/rlwrap/filters/pipeline
/usr/share/rlwrap/filters/pipeto
/usr/share/rlwrap/filters/scrub_prompt
/usr/share/rlwrap/filters/simple_macro
/usr/share/rlwrap/filters/template
/usr/share/rlwrap/filters/unbackspace

$ vim /usr/share/rlwrap/filters/pipeto
..
 50 sub input {
 51   my $input;
 52   $raw_input = $_;
 53   ($input, undef, $pipeline) =  /([^|]*)(\|(.*))?/;
 54   return $input;
 55 }
..

ここで切り分けているぽい。最初のパイプの手前までが元のコマンド、パイプの後ろがフィルターになってる。
そこでこんなパッチにしてみました。


*** /usr/share/rlwrap/filters/pipeto.orig       2010-01-03 21:42:16.000000000 +0900
--- /usr/share/rlwrap/filters/pipeto    2015-12-08 10:58:54.817411488 +0900
***************
*** 53 ****
!   ($input, undef, $pipeline) =  /([^|]*)(\|(.*))?/;
--- 53,54 ----
!   ($input, $pipeline) =  /(.+)?\s+\|\s+(.*)?/;
!   $input= $_ unless $input;

" | "(空白、パイプ、空白。空白は1つ以上の任意の個数でOK)をパイプと認識させるように変更。


SQL> SELECT 'a' || 'b' FROM dual /* パイプを通る */; | less
'A
--
ab

SQL> SELECT 'a' || 'b' FROM dual /* パイプを通らない */; |less
  2 

パイプを通らない場合、"|less"までをsqlplusが解釈しようとするのでちゃんと出力されませんね(これは-z"pipeto"を取ってもそんな動きだった)


ざっとマニュアルを読んで面白そうだったものの紹介でした!
(個人的にはパスワードプロンプトで↑↓使えたのが面白かった)

2015/07/01

新ConoHaのMariaDBを試してみた

TL;DR

* Amazon RDS for MySQL的なものを探しているなら、これじゃないです。
* 単にユーザーとして観測できる範囲で調べて推測しているだけなので、違ったらごめんなさい。


ConoHaでマネージドデータベースサービスを始めたらしいので試してみた。MariaDB 10.0系ですってよ奥様。

チュートリアル的なものは本家のものを。

データベースサーバーを使う - このべん(ConoHa)


で、これはどうやら共用サーバーのようです。
WEBコンソール中の「データベースを作成する」は

mysql> CREATE DATABASE database_name CHARSET utf8;

に、

「データベースユーザーを追加する」は

mysql> CREATE USER user_name@hostname IDENTIFIED BY 'password_string';

に、

「ユーザーがアクセスできるデータベースを設定する」は

mysql> GRANT ALL ON database_name.* TO user_name@hostname

にマッピングされているようです。


mysql> SHOW GRANTS;
+-----------------------------------------------------------------------------------------------------------------------+
| Grants for username@xxx.xxx.xxx.xxx                                                                                   |
+-----------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'username'@'xxx.xxx.xxx.xxx' IDENTIFIED BY PASSWORD '*E021B6BBA043401E045906A6646199BFADD9A0B1' |
+-----------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

こんなかんじで。

あ、共用サーバーっぽいの関係上、全世界に3306番ポート解放ってことになると思うので、ユーザー名(特に接続元ホスト指定)とパスワードはかなり重要です。たぶん。


取り敢えずデータベース権限だけでグローバル権限は一切無いので、

* レプリケーション関連の機能は一切使えない
* SET GLOBALで設定する必要がある変数は一切いじれない
* INSTALL PLUGINもちろんできない

WordPressユーザー想定してる感じなんですかね。
なので俺はたぶんお呼びでないし、それならWordPressテンプレート(というのがConoHaにはある)でいいんじゃね? って感じがするけれど。。

有料オプションでバックアップがあるんだけど、これってどうやって取ってるんだろう。XtraDBがある以上オンラインで取るならMyDumperかxbかmysqldumpか、整合性を保つためには一度スキーマの中全部をロックしてやらないといけないんだけど、その辺どうなってるのかも気になる。PITRもできるの? MariaDBが落ちたらちゃんとDNS切り替わるの? とか、クォータもなかなか共用サーバーでやろうとすると奥が深い(information_schemaからデータを引くと誤差とか誤差じゃない何かがあったり、REVOKEやFLUSH PRIVILEDGESでは即時反映されなかったり)ので、どうやってんのかなぁとか。


権限は限られていますが、取り敢えずSHOW GLOBAL VARIABLESの中でめぼしいパラメーターを拾い読み。


*************************** 15. row ***************************
Variable_name: aria_recover
        Value: NORMAL
*************************** 16. row ***************************
Variable_name: aria_repair_threads
        Value: 1
*************************** 323. row ***************************
Variable_name: myisam_recover_options
        Value: DEFAULT
*************************** 324. row ***************************
Variable_name: myisam_repair_threads
        Value: 1

MyISAMとAriaのリペアオプションが有効になってる。

( ´-`).oO(あれ、これクラッシュ後にリペアしてる真っ最中のロックってどうなるんだっけ。。


*************************** 25. row ***************************
Variable_name: back_log
        Value: 150

共有サーバーなので大き目なのかな。


*************************** 26. row ***************************
Variable_name: basedir
        Value: /usr
*************************** 45. row ***************************
Variable_name: character_sets_dir
        Value: /usr/share/mysql/charsets/
*************************** 52. row ***************************
Variable_name: datadir
        Value: /var/lib/mysql/



rpmでインストールしたかな?


*************************** 34. row ***************************
Variable_name: binlog_format
        Value: MIXED
*************************** 277. row ***************************
Variable_name: log_bin
        Value: ON

ふむ。一応ONだけど、もちろんREPLICATION SLAVE権限もREPLICATION CLIENT権限も使えない。内部でバックアップ取ってるのかな。


*************************** 131. row ***************************
Variable_name: innodb_buffer_pool_size
        Value: 10737418240
*************************** 142. row ***************************
Variable_name: innodb_concurrency_tickets
        Value: 5000
*************************** 144. row ***************************
Variable_name: innodb_data_file_path
        Value: ibdata1:12M:autoextend
*************************** 154. row ***************************
Variable_name: innodb_file_per_table
        Value: ON
*************************** 157. row ***************************
Variable_name: innodb_flush_method
        Value:
*************************** 175. row ***************************
Variable_name: innodb_io_capacity
        Value: 200
*************************** 176. row ***************************
Variable_name: innodb_io_capacity_max
        Value: 2000
*************************** 189. row ***************************
Variable_name: innodb_log_file_size
        Value: 268435456
*************************** 190. row ***************************
Variable_name: innodb_log_files_in_group
        Value: 2

innodb_concurrency_ticketsはデフォルトより大きくしてある。
InnoDBのコンテキストスイッチ的なものを制御する変数で、OLTPっぽい細かいI/O向けのシステムには小さく, OLAPみたいな大きくI/Oを食うシステムには大き目にするっていうのがあるんだけど、これはOLAPっぽく使うだろうと中の人が想定したんだろうか。

HDDの玉で仮想環境(かどうかは知らないけど)とかだとinnodb_flush_methodを未指定(Linux上ではfsync相当)でinnodb_io_capacityは無理にいじらないのは当たりだと思う。


*************************** 143. row ***************************
Variable_name: innodb_corrupt_table_action
        Value: assert

これはXtraDBのオプション なんだけど、吊るしのまま。


*************************** 151. row ***************************
Variable_name: innodb_file_format
        Value: Antelope

Super権限がないのでこの値は変えられないし、ということはROW_FORMAT= DynamicやCompressedはここでは使えないってことだ。。


*************************** 296. row ***************************
Variable_name: max_connect_errors
        Value: 999999999
*************************** 297. row ***************************
Variable_name: max_connections
        Value: 10000

(・∀・)ゞ

TCPポートを叩くだけ叩いてヘルスチェックにしちゃうやつだと、max_connect_errorsを大きくしておかないとそのうちホストごと接続拒否られるというアレか。
この形式だと、mysqldごと落ちてくれるやつはちゃんと切り替わるんだけど、mysqldがストールした場合って切り離してくれないことが多いのよね。

そして、max_connections= 10000が本当に押し寄せたらストールしちゃうんじゃないか感はある。


*************************** 311. row ***************************
Variable_name: max_tmp_tables
        Value: 32

何人で共有するかわからないけれど、max_connections 10000に対してちょっと少なすぎるんじゃ。。
とか思ったら、これセッション変数だった。失礼。


*************************** 312. row ***************************
Variable_name: max_user_connections
        Value: 30

max_user_connectionsが30になっているので、1ユーザーあたりの接続可能コネクションは30まで。

MySQL :: MySQL 5.6 Reference Manual :: 5.1.4 Server System Variables


$ perl -MDBI -e 'my @tmp; while (push(@tmp, DBI->connect("dbi:mysql:db_name:host_name", "user_name", "password"))) { print ++$n, "\n"; }'
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
DBI connect('db_name:host_name','user_name',...) failed: User user_name already has more than 'max_user_connections' active connections at -e line 1



*************************** 280. row ***************************
Variable_name: log_output
        Value: FILE
*************************** 286. row ***************************
Variable_name: log_warnings
        Value: 1
*************************** 287. row ***************************
Variable_name: long_query_time
        Value: 10.000000

*************************** 435. row ***************************
Variable_name: slow_query_log
        Value: ON

出力されてはいるぽいけど、ユーザーからアクセスする方法はなさげ。


*************************** 385. row ***************************
Variable_name: query_cache_size
        Value: 0
*************************** 387. row ***************************
Variable_name: query_cache_type
        Value: ON

クエリーキャッシュは無効化されてる。
グローバルロックに巻き込まれる心配はなかった :)


*************************** 451. row ***************************
Variable_name: ssl_ca
        Value: /etc/my.cnf.d/ssl/ast.tyo1.database-hosting.conoha.io-ca.crt
*************************** 452. row ***************************
Variable_name: ssl_capath
        Value:
*************************** 453. row ***************************
Variable_name: ssl_cert
        Value: /etc/my.cnf.d/ssl/ast.tyo1.database-hosting.conoha.io-server.crt
*************************** 454. row ***************************
Variable_name: ssl_cipher
        Value:
*************************** 455. row ***************************
Variable_name: ssl_crl
        Value:
*************************** 456. row ***************************
Variable_name: ssl_crlpath
        Value:
*************************** 457. row ***************************
Variable_name: ssl_key
        Value: /etc/my.cnf.d/ssl/ast.tyo1.database-hosting.conoha.io-server.key


一応SSL接続は有効化されてるけど、公開鍵もらえないとSSLで接続できない。。


*************************** 465. row ***************************
Variable_name: system_time_zone
        Value: UTC

( ゚д゚) えっ(ホントにNOW()がUTCで返ってきた)


*************************** 467. row ***************************
Variable_name: table_open_cache
        Value: 400

( ´-`).oO(innodb_stats_on_metadsataがOFFでも、テーブルキャッシュからあふれるとそのたび統計情報の更新がトリガーされちゃうから、このサイズキツくないかなぁ。。


*************************** 470. row ***************************
Variable_name: thread_handling
        Value: one-thread-per-connection

スレッドプール無効。
(もったいない。。)


*************************** 474. row ***************************
Variable_name: thread_pool_size
        Value: 4

thread_pool_sizeの暗黙のデフォルトはプロセッサー数なので、4vCPUってことかな。。


mysql> SELECT plugin_name, plugin_type, plugin_status FROM all_plugins WHERE plugin_status <> 'ACTIVE';
+-------------------------------+--------------------+---------------+
| plugin_name                   | plugin_type        | plugin_status |
+-------------------------------+--------------------+---------------+
| FEEDBACK                      | INFORMATION SCHEMA | DISABLED      |
| QUERY_CACHE_INFO              | INFORMATION SCHEMA | NOT INSTALLED |
| rpl_semi_sync_slave           | REPLICATION        | NOT INSTALLED |
| QUERY_RESPONSE_TIME           | INFORMATION SCHEMA | NOT INSTALLED |
| QUERY_RESPONSE_TIME_AUDIT     | AUDIT              | NOT INSTALLED |
| rpl_semi_sync_master          | REPLICATION        | NOT INSTALLED |
| Mroonga                       | STORAGE ENGINE     | NOT INSTALLED |
| Mroonga_stats                 | INFORMATION SCHEMA | NOT INSTALLED |
| TokuDB                        | STORAGE ENGINE     | NOT INSTALLED |
| TokuDB_trx                    | INFORMATION SCHEMA | NOT INSTALLED |
| TokuDB_lock_waits             | INFORMATION SCHEMA | NOT INSTALLED |
| TokuDB_locks                  | INFORMATION SCHEMA | NOT INSTALLED |
| TokuDB_file_map               | INFORMATION SCHEMA | NOT INSTALLED |
| TokuDB_fractal_tree_info      | INFORMATION SCHEMA | NOT INSTALLED |
| TokuDB_fractal_tree_block_map | INFORMATION SCHEMA | NOT INSTALLED |
| pam                           | AUTHENTICATION     | NOT INSTALLED |
| METADATA_LOCK_INFO            | INFORMATION SCHEMA | NOT INSTALLED |
| InnoDB                        | STORAGE ENGINE     | NOT INSTALLED |
| INNODB_TRX                    | INFORMATION SCHEMA | NOT INSTALLED |
| INNODB_LOCKS                  | INFORMATION SCHEMA | NOT INSTALLED |
| INNODB_LOCK_WAITS             | INFORMATION SCHEMA | NOT INSTALLED |
| INNODB_CMP                    | INFORMATION SCHEMA | NOT INSTALLED |
| INNODB_CMP_RESET              | INFORMATION SCHEMA | NOT INSTALLED |
| INNODB_CMPMEM                 | INFORMATION SCHEMA | NOT INSTALLED |
| INNODB_CMPMEM_RESET           | INFORMATION SCHEMA | NOT INSTALLED |
| INNODB_CMP_PER_INDEX          | INFORMATION SCHEMA | NOT INSTALLED |
| INNODB_CMP_PER_INDEX_RESET    | INFORMATION SCHEMA | NOT INSTALLED |
| INNODB_BUFFER_PAGE            | INFORMATION SCHEMA | NOT INSTALLED |
| INNODB_BUFFER_PAGE_LRU        | INFORMATION SCHEMA | NOT INSTALLED |
| INNODB_BUFFER_POOL_STATS      | INFORMATION SCHEMA | NOT INSTALLED |
| INNODB_METRICS                | INFORMATION SCHEMA | NOT INSTALLED |
| INNODB_FT_DEFAULT_STOPWORD    | INFORMATION SCHEMA | NOT INSTALLED |
| INNODB_FT_DELETED             | INFORMATION SCHEMA | NOT INSTALLED |
| INNODB_FT_BEING_DELETED       | INFORMATION SCHEMA | NOT INSTALLED |
| INNODB_FT_CONFIG              | INFORMATION SCHEMA | NOT INSTALLED |
| INNODB_FT_INDEX_CACHE         | INFORMATION SCHEMA | NOT INSTALLED |
| INNODB_FT_INDEX_TABLE         | INFORMATION SCHEMA | NOT INSTALLED |
| INNODB_SYS_TABLES             | INFORMATION SCHEMA | NOT INSTALLED |
| INNODB_SYS_TABLESTATS         | INFORMATION SCHEMA | NOT INSTALLED |
| INNODB_SYS_INDEXES            | INFORMATION SCHEMA | NOT INSTALLED |
| INNODB_SYS_COLUMNS            | INFORMATION SCHEMA | NOT INSTALLED |
| INNODB_SYS_FIELDS             | INFORMATION SCHEMA | NOT INSTALLED |
| INNODB_SYS_FOREIGN            | INFORMATION SCHEMA | NOT INSTALLED |
| INNODB_SYS_FOREIGN_COLS       | INFORMATION SCHEMA | NOT INSTALLED |
| INNODB_SYS_TABLESPACES        | INFORMATION SCHEMA | NOT INSTALLED |
| INNODB_SYS_DATAFILES          | INFORMATION SCHEMA | NOT INSTALLED |
| LOCALES                       | INFORMATION SCHEMA | NOT INSTALLED |
| unix_socket                   | AUTHENTICATION     | NOT INSTALLED |
| handlersocket                 | DAEMON             | NOT INSTALLED |
| SERVER_AUDIT                  | AUDIT              | NOT INSTALLED |
| SPIDER                        | STORAGE ENGINE     | NOT INSTALLED |
| SPIDER_ALLOC_MEM              | INFORMATION SCHEMA | NOT INSTALLED |
| SEQUENCE                      | STORAGE ENGINE     | NOT INSTALLED |
| SQL_ERROR_LOG                 | AUDIT              | NOT INSTALLED |
| SPHINX                        | STORAGE ENGINE     | NOT INSTALLED |
+-------------------------------+--------------------+---------------+
55 rows in set (0.02 sec)

MariaDBにバンドルされているプラグインはほぼ全滅。 MariaDBである意味がほとんどない。。
InnoDB関連ぽいのが軒並みNOT INSTALLEDになってるのは、InnoDBの代わりにXtraDBが使われているから(WHERE plugin_status= 'ACTIVE'で引くとXtraDB側のInnoDBやInnoDB関連のinformation_schemaがACTIVEになっている)

Mroongaさん有効にしてほしいなぁ。。起動したらそのままSQLで全文検索できるよとか素敵じゃない? クォータかけづらい気もするけど。


という訳で何をどう考えても、ConoHa VPSに自分でMariaDBをyumで突っ込んだ方が良さげな雰囲気がしました。まる。

と書いてから気づいたんだけど、旧ConoHaでいうところのWordPressテンプレート的なものってなんかMySQL 5.1.73になってて(旧ConoHaのはPercona Serverだったはず)なんか劣化してるんじゃ。。:(;゙゚'ω゚'):

2014/10/21

OSC 2014 Tokyo/Fall でブース番していた感想

去る 2014/10/18(土), 19(日)に OSC 2014 Tokyo/Fall がありました。
日本MySQLユーザ会の セミナー は 須藤さん が、ブース番は同じく須藤さんとわたしでした。
MyNAは土曜日だけの出展でした。そして俺得。

今回のOSCは Oracle MySQL Community Team(土曜日は やまさきさん, 日曜日は かじやまさん)が協賛企業として出展していたので、MyNAもその隣に配置してもらえました。鉄板ネタも生まれました。

「この机! この机のこっち側は日本MySQLユーザ会で、こっち側はOracle MySQLチームです!」

笑ってくれる人多くて助かりました :) 他の開場でOracle MySQLと相乗りする機会があったら使ってもらっていいですよ :)





向かって左側がMyNAの机、いつもどおりの平常運転。。
向かって右側がOracle MySQLの机で、机のデコレーションもちょっとだけやる気があったりチラシがいっぱい置いてあったり nippondanjiさん がOSC広島で披露された「アタッシュケースを開けば、直ぐにMySQL Clusterの動作デモ環境が出来上がるというスグレモノ」 も展示してありました。

nippondanjiさん は土曜日の14時までの滞在でしたが、少なくとも土曜日いっぱい(結局日曜日はどうなったんだろう?)はこのデモ環境が置いてありました。


札束の入っていそうなアタッシュケースを開くスーツ姿の漢(ブレてる。。)




持ち主が帰ったあと、必死でMySQL Clusterの説明をする須藤さん。
夕方頃にはすっかり詳しくなっていました。すげぇ。

nippondanjiさんとお昼を食べながら、第一正規形の定義についてだとかrelay-log-repository= TABLEについてだとか語りました。楽しかったです :)

2014/09/22

InfiniDBの止め方

InfiniDBはmysqldだけじゃなくデータを格納する場所があったりmysqldだけじゃなく止めるものがあったりしてよくわからないのが本音。

rpmでインストールしたら/etc/init.d/infinidb stopだけで全部止まるんじゃないかと期待していたけれど、残念ながらそんなことはなかった。。


最初の状態。

# ps auxww | grep Calpont
root     23342  0.0  0.0 121212    20 ?        S    Sep17   0:00 /bin/bash /usr/local/Calpont/bin/run.sh /usr/local/Calpont/bin/ProcMon
root     23343  0.0  0.2 1023764 2980 ?        Sl   Sep17   5:06 /usr/local/Calpont/bin/ProcMon
root     23483  0.0  0.0 121216    20 ?        S    Sep17   0:00 /bin/sh /usr/local/Calpont/mysql//bin/mysqld_safe --defaults-file=/usr/local/Calpont/mysql//my.cnf --datadir=/usr/local/Calpont/mysql/db --pid-file=/usr/local/Calpont/mysql/db/dev-personal-04.pid
mysql    23647  0.0  1.8 691168 18992 ?        Sl   Sep17   0:00 /usr/local/Calpont/mysql/libexec/mysqld --defaults-file=/usr/local/Calpont/mysql//my.cnf --basedir=/usr/local/Calpont/mysql/ --datadir=/usr/local/Calpont/mysql/db --user=mysql --log-error=/usr/local/Calpont/mysql/db/dev-personal-04.err --pid-file=/usr/local/Calpont/mysql/db/dev-personal-04.pid --socket=/usr/local/Calpont/mysql/lib/mysql/mysql.sock --port=3306
root     23679  0.0  0.3 219212  3564 ?        Sl   Sep17   0:31 /usr/local/Calpont/bin/controllernode fg
root     23712  0.0  1.8 170120 18940 ?        Sl   Sep17   0:53 /usr/local/Calpont/bin/ServerMonitor
root     23730  0.0  1.0 177392 10700 ?        Sl   Sep17   0:23 /usr/local/Calpont/bin/workernode DBRM_Worker1 fg


initスクリプトで止めてみる。

# /etc/init.d/infinidb stop
Shutting down InfiniDB Database Platform

# ps auxww | grep Calpont
root     10798  0.0  0.0   2716   168 pts/0    D+   15:11   0:00 grep Calpont
root     23679  0.0  0.3 202824  3716 ?        Sl   Sep17   0:31 /usr/local/Calpont/bin/controllernode fg
root     23712  0.0  2.0 170120 21352 ?        Sl   Sep17   0:53 /usr/local/Calpont/bin/ServerMonitor
root     23730  0.0  1.0 177392 10700 ?        Sl   Sep17   0:23 /usr/local/Calpont/bin/workernode DBRM_Worker1 fg

mysqldとそのラッパー、ProcMonとそのラッパーだけ落ちたっぽい。
残りのプロセスを落とすべく、calpontConsoleを起動してみる。


# cc

Calpont InfiniDB Command Console
   enter 'help' for list of commands
   enter 'exit' to exit the Calpont InfiniDB Command Console
   use up/down arrows to recall commands


Active Alarm Counts: Critical = 0, Major = 2, Minor = 1, Warning = 0, Info = 0

Critical Active Alarms:

InfiniDB> stopSystem
stopsystem   Mon Sep 22 15:13:04 2014

This command stops the processing of applications on all Modules within the Calpont System
           Do you want to proceed: (y or n) [n]: y

   System being stopped now...
**** stopSystem Failure : ProcessManager not Active
Retry or Run 'shutdownSystem FORCEFUL' command

InfiniDB> q
quit   Mon Sep 22 15:13:38 2014
Exiting the Calpont Command Console

# !ps
ps auxww | grep Calpont
root     10812  0.0  0.0 107520   880 pts/0    S+   15:13   0:00 grep Calpont
root     23679  0.0  0.3 202824  3812 ?        Sl   Sep17   0:31 /usr/local/Calpont/bin/controllernode fg
root     23712  0.0  2.0 170120 21360 ?        Sl   Sep17   0:53 /usr/local/Calpont/bin/ServerMonitor
root     23730  0.0  1.0 177392 10700 ?        Sl   Sep17   0:23 /usr/local/Calpont/bin/workernode DBRM_Worker1 fg

ProcessManagerがいないのがむしろいけないらしい。
initスクリプトで一度起動してから、ccでstopSystemを試す。


# /etc/init.d/infinidb start
Starting InfiniDB Database Platform

# !ps
ps auxww | grep Calpont
root     10828  0.0  0.1 121212  1608 pts/0    S    15:14   0:00 /bin/bash /usr/local/Calpont/bin/run.sh /usr/local/Calpont/bin/ProcMon
root     10829  4.0  1.3 1023764 14284 pts/0   Sl   15:14   0:07 /usr/local/Calpont/bin/ProcMon
root     10960  0.0  0.1 121216  1748 pts/0    S    15:14   0:00 /bin/sh /usr/local/Calpont/mysql//bin/mysqld_safe --defaults-file=/usr/local/Calpont/mysql//my.cnf --datadir=/usr/local/Calpont/mysql/db --pid-file=/usr/local/Calpont/mysql/db/dev-personal-04.pid
mysql    11124  0.2 10.8 681708 110576 pts/0   Sl   15:14   0:00 /usr/local/Calpont/mysql/libexec/mysqld --defaults-file=/usr/local/Calpont/mysql//my.cnf --basedir=/usr/local/Calpont/mysql/ --datadir=/usr/local/Calpont/mysql/db --user=mysql --log-error=/usr/local/Calpont/mysql/db/dev-personal-04.err --pid-file=/usr/local/Calpont/mysql/db/dev-personal-04.pid --socket=/usr/local/Calpont/mysql/lib/mysql/mysql.sock --port=3306
root     11161  0.0  0.9 153660  9752 pts/0    Sl   15:14   0:00 /usr/local/Calpont/bin/controllernode fg
root     11188  0.1  0.9 153736 10040 pts/0    Sl   15:14   0:00 /usr/local/Calpont/bin/ServerMonitor
root     11201  0.0  1.6 177328 16996 pts/0    Sl   15:15   0:00 /usr/local/Calpont/bin/workernode DBRM_Worker1 fg
root     11680  0.0  0.0 107520   880 pts/0    S+   15:17   0:00 grep Calpont

# cc

Calpont InfiniDB Command Console
   enter 'help' for list of commands
   enter 'exit' to exit the Calpont InfiniDB Command Console
   use up/down arrows to recall commands


Active Alarm Counts: Critical = 0, Major = 2, Minor = 1, Warning = 0, Info = 0

Critical Active Alarms:

InfiniDB> stopSystem
stopsystem   Mon Sep 22 15:18:31 2014

This command stops the processing of applications on all Modules within the Calpont System
           Do you want to proceed: (y or n) [n]: y

   System being stopped now...
   Successful stop of System

InfiniDB> q
quit   Mon Sep 22 15:18:57 2014
Exiting the Calpont Command Console

# !ps
ps auxww | grep Calpont
root     10828  0.0  0.1 121212  1608 pts/0    S    15:14   0:00 /bin/bash /usr/local/Calpont/bin/run.sh /usr/local/Calpont/bin/ProcMon
root     10829  2.8  1.4 1470336 14512 pts/0   Sl   15:14   0:08 /usr/local/Calpont/bin/ProcMon
root     11928  0.0  0.0 107520   880 pts/0    S+   15:19   0:00 grep Calpont

ProcMonが残った(´・ω・`)
stopSystemとshutdownSystemと両方あって、shutdownSystemの方は全部きれいにおとしてくれた。


# ps auxww | grep Calpont
root     12239  0.0  0.1 121212  1608 pts/0    S    15:21   0:00 /bin/bash /usr/local/Calpont/bin/run.sh /usr/local/Calpont/bin/ProcMon
root     12240  5.8  1.4 1023764 14336 pts/0   Sl   15:21   0:07 /usr/local/Calpont/bin/ProcMon
root     12374  0.0  0.1 121216  1748 pts/0    S    15:21   0:00 /bin/sh /usr/local/Calpont/mysql//bin/mysqld_safe --defaults-file=/usr/local/Calpont/mysql//my.cnf --datadir=/usr/local/Calpont/mysql/db --pid-file=/usr/local/Calpont/mysql/db/dev-personal-04.pid
mysql    12539  0.3 10.8 681708 110576 pts/0   Sl   15:21   0:00 /usr/local/Calpont/mysql/libexec/mysqld --defaults-file=/usr/local/Calpont/mysql//my.cnf --basedir=/usr/local/Calpont/mysql/ --datadir=/usr/local/Calpont/mysql/db --user=mysql --log-error=/usr/local/Calpont/mysql/db/dev-personal-04.err --pid-file=/usr/local/Calpont/mysql/db/dev-personal-04.pid --socket=/usr/local/Calpont/mysql/lib/mysql/mysql.sock --port=3306
root     12569  0.0  0.9 153660  9740 pts/0    Sl   15:21   0:00 /usr/local/Calpont/bin/controllernode fg
root     12604  0.3  0.9 153736 10032 pts/0    Sl   15:21   0:00 /usr/local/Calpont/bin/ServerMonitor
root     12616  0.0  1.6 177328 16996 pts/0    Sl   15:21   0:00 /usr/local/Calpont/bin/workernode DBRM_Worker1 fg
root     12983  0.0  0.0 107520   880 pts/0    S+   15:23   0:00 grep Calpont

# cc shutdownSystem
shutdownsystem   Mon Sep 22 15:23:38 2014

This command stops the processing of applications on all Modules within the Calpont System
           Do you want to proceed: (y or n) [n]: y

   System being shutdown now...
   Successful stop of System


   Successful shutdown of System

# ps auxww | grep Calpont
root     13220  0.0  0.0 107520   880 pts/0    S+   15:24   0:00 grep Calpont


stoipSystemでもshutdownSystemでも、起動は/etc/init.d/infinidb startでOKだった。cc startSystemでもOK。

2014/09/17

cpimportを使ってInfiniDBにデータをロードするシンタックスだけメモ

速度比較とかしてないし、明らかにこっちの方が速かったのでたぶん調べない。シンタックスだけメモ。テーブルは予めmysqlコマンドラインクライアントから作っておく。


# /usr/local/Calpont/bin/cpimport d1 t1 -s "\t" -e 1000000000 < ./fifo
Locale is : C
Column delimiter : \t

Using table OID 3013 as the default JOB ID
Input file(s) will be read from : STDIN
Job description file : /usr/local/Calpont/data/bulk/tmpjob/3013_D20140917_T173443_Job_3013.xml
Log file for this job: /usr/local/Calpont/data/bulk/log/Job_3013.log
2014-09-17 17:34:43 (24078) INFO : successfully loaded job file /usr/local/Calpont/data/bulk/tmpjob/3013_D20140917_T173443_Job_3013.xml
2014-09-17 17:34:43 (24078) INFO : Job file loaded, run time for this step : 1.10977 seconds
2014-09-17 17:34:43 (24078) INFO : PreProcessing check starts
2014-09-17 17:34:47 (24078) INFO : PreProcessing check completed
2014-09-17 17:34:47 (24078) INFO : preProcess completed, run time for this step : 3.65073 seconds
2014-09-17 17:34:47 (24078) INFO : No of Read Threads Spawned = 1
2014-09-17 17:34:47 (24078) INFO : No of Parse Threads Spawned = 3
2014-09-17 17:34:47 (24078) INFO : Reading input from STDIN to import into table d1.t1...
2014-09-17 17:36:41 (24078) INFO : Number of rows with errors = 18.  Row numbers with error reasons are listed in file /tmp/hoge/data/d1.tbl.Job_3013_24078.err
2014-09-17 17:36:41 (24078) INFO : Number of rows with errors = 18.  Exact error rows are listed in file /tmp/hoge/data/d1.tbl.Job_3013_24078.bad
2014-09-17 17:36:42 (24078) INFO : For table d1.t1: 19680191 rows processed and 19680173 rows inserted.
2014-09-17 17:36:42 (24078) INFO : Bulk load completed, total run time : 120.018 seconds

-sでフィールドセパレーターを指定。省略時は"|"らしい。
-eで無視するパースエラーの数を指定する。暗黙のデフォルトは10。この状態だと11回目のパースエラーが発生した状態でcpimportがまるっとアボートする。
-rで読み込みスレッド, -wでパーサースレッドの数を指定。12コアのマシン(HTで24スレッド)で8, 8くらいが良さそうだった。200MB/sくらい出てたからとりあえず十分。

2014/08/31

#yapcasia 2014のおぼえがき

今年は1日目と2日目に参加しました。
内容レポートとかじゃなくて、感じたことメモ。

【1日目】
* 時間読み誤ってオープニング間に合わなかった…_| ̄|○

* すたじおさん の インフラエンジニア(狭義)は死んだ からスタート
 * 一時期元気がなさそうで心配でしたが、元気が戻ってきてそうでとても安心しました。

* けんじおじさんふしぎな感じのやつ。(タイトル全部書くのがちょっと恥ずかしいような)
 * 宇宙空間であった。。

* tokuhiromさんBDDのやつ
 * Test::Kantan 使いたい(Test::Moreですら手に余ってるけど)

* Rabisushiさんによる DBICのやつ
 * おお! という感じのツイートが多かったけど、クエリーをそんな方法でビルドするなんてそりゃあ闇も深いよとか違うことを考えていた。。

* 自分のセッションについてはこちら => 日々の覚書: WHERE狙いのキー、ORDER BY狙いのキー の話を #yapcasia でしてきました

* YappoさんJavaのやつ
 * Java書けないけど書いてみたくなった。なんてったってPerlとJavaは同じ言語だし。

* LT1日目
 * makamakaさん の完成度の高さには感動するしかない。

* 懇親会
 * kazeburoさんとちょっと話ができて、とても嬉しい。
 * あんちぽくんさん に初めて話しかけることに成功した(俺にとっては大きな一歩)ものの、多分忘れてらっしゃる(や、結構ご機嫌になったタイミングだったので)
 * Chiba.pmの面々と再会できてこれも嬉しい。


【2日目】
* kazeburoさんDockerのやつ
 * 使いどころないけど、取り敢えず遊んでみないと始まらないかなー。

* straceのやつ
 * うずらさんと同じ時間帯だって気付いてなかった…(超失礼)

* songmuさんPerlのヤーツ
 * Perlって色々できるんですね。。

* モリスさんそんなにビッグでもないやつ
 * 俺が見たセッションの中で一番感動した。
 * 全体的に松信さんぽさを感じた。
  * マシンガントーク(20分というのもあったろうけど)
  * 経験に裏打ちされた(であろう)鮮やかにポイントを押さえたトーク
  * というか、その界隈に詳しくない人間にもわかる明らかなカリスマ
 * ひとりですごい震えてた。

* LT2日目
 * いちばん刺さったのは NekogerugeさんTDD
  * 俺もほんとコレで、色んな人に色んな事を教えてもらって刺激もらって生きてる。
  * Twitter Driven Datsu-syoshinsya からの 出会い駆動コミュニティー活動 もオススメです :)


ホントすごい人が集まってすごい話がたくさんあって、(去年はそれほどそうとは思わなかったけど) YAPC最高! って感じでした。

ちなみに去年YAPCェ…ってなってたのは俺がほぼボッチだったせいだと思うので、参戦の際にはぜひ事前にYAPC行きそうな知り合いを作っておくといいと思います。そう、Chiba.pmとかね(次があるかどうかわからないけど

ポエムでした。

2014/04/23

EC2のインスタンスでおもむろにGithubからcloneできなくなった

いつもテキトーにインスタンスを立てては、Githubのリポジトリーに突っ込んであったシェルスクリプトを落としてきてセットアップしているんだけれど。

# yum install -y git
..

# git clone https://github.com/yoku0825/my_setup
Cloning into 'my_setup'...

# echo $?
128

あれ?;
よくわからないけど、

# curl https://github.com/yoku0825/my_setup
Illegal instruction

# curl https://www.google.co.jp/
Illegal instruction

# curl http://www.google.co.jp/
..

なので、curlが悪そう。

# yum install -y curl
..

# git clone http://github.com/yoku0825/my_setup
Cloning into 'my_setup'...
remote: Reusing existing pack: 117, done.
remote: Total 117 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (117/117), 16.05 KiB | 0 bytes/s, done.
Resolving deltas: 100% (68/68), done.

できた。なんだったんだ。

2014/02/14

デブサミ2014のコミュニティーLTしてきました

ずさー。





日本MySQLユーザ会のひととしてLTさせてもらいました。
みんな、自分のコミュニティーにまつわるStory(発祥からの経緯とか、最近の活動とか)とか話してたのに、俺だけ自分のStory語っててやっぱりすべりました。どうしてこうなった。

すべり駆動コミュニティーでもいいじゃないみたいな話になってますが、出会い厨でコミュニティー参加しても楽しいもんですよ、という話をしたかったです本当は。

Chiba.pmにはすたじおさんに会いたくて行ったし
Groongaを囲む夕べ には斯波さんに会いたくてGroonga使ってないのに行ったし
MyNA会 2013年3月 には SH2さん に会いたくて(強引にネタを作って)行ったし
JAWS-UG(第何回か忘れた…) にはSH2さん(again)とこんまめさんに会いたくて行ったし(でもこんまめさんのセッション聞かずに帰った…orz)
MySQL Cluster Casual Talks は「企画したら誰か会えるかなー」と思っていたらみんな来てくれて嬉しかったし
OracleのMySQL Tech Tour Tokyoはやまさきさんに会いに行ってるようなもんだし

不純な動機ではじめても、結構楽しいものですよ :)
Have fun!

2014/01/24

groonga-index-dumpで遊んでみる

これがやりたくてtweets.csvをMroongaに食わせていた

$ time /usr/ruby/2.0.0/bin/groonga-index-dump /usr/mysql/5.6.15/data/mroonga.mrn

real    0m33.430s
user    0m29.649s
sys     0m2.924s

$ ll
合計 16
drwxr-xr-x 2 root     root     4096  7月  3 19:14 2013 hsperfdata_root
drwxr-xr-x 2 yoku0825 yoku0825 4096 11月  6 11:49 2013 hsperfdata_ttanaka
drwxrwxr-x 3 yoku0825 yoku0825 4096  1月 24 12:04 2014 index-dump
drwx------ 2 yoku0825 tmux    4096  1月 10 15:19 2014 tmux-3012

--output-directoryで指定しない場合はカレントディレクトリの下にindex-dumpディレクトリを掘る。

$ cd index-dump/

$ ll
合計 2012
drwxrwxr-x 2 yoku0825 yoku0825 2056192  1月 24 12:04 2014 tweets-text.index

$ cd tweets-text.index/

$ ll | wc
  47997  479962 3723665

index-dumpの下に<テーブル名>-<インデックス名>.indexディレクトリが作られるぽい。
ls -l叩くと泣きたくなるくらいにファイルの数が多い。

$ ll | head
合計 201992
-rw-rw-r-- 1 yoku0825 yoku0825    222  1月 24 12:04 2014 %21%21%21%21%21%21%21%21%21%21%21%21%21%21.dump
-rw-rw-r-- 1 yoku0825 yoku0825    218  1月 24 12:04 2014 %21%21%21%21%21%21%21%E3%80%8D.dump
-rw-rw-r-- 1 yoku0825 yoku0825    256  1月 24 12:04 2014 %21%21%21%21%21%21%21.dump
-rw-rw-r-- 1 yoku0825 yoku0825    337  1月 24 12:04 2014 %21%21%21%21%21%21.dump
-rw-rw-r-- 1 yoku0825 yoku0825    216  1月 24 12:04 2014 %21%21%21%21%21%E3%80%8D.dump
-rw-rw-r-- 1 yoku0825 yoku0825    417  1月 24 12:04 2014 %21%21%21%21%21.dump
-rw-rw-r-- 1 yoku0825 yoku0825    218  1月 24 12:04 2014 %21%21%21%21%E3%80%8D%E3%80%8C.dump
-rw-rw-r-- 1 yoku0825 yoku0825    417  1月 24 12:04 2014 %21%21%21%21.dump
-rw-rw-r-- 1 yoku0825 yoku0825    212  1月 24 12:04 2014 %21%21%21%28.dump

なんかざっと見ただけで、1つのトークンに対して1つの<トークン>.dumpファイルが出来上がっている予感。

$ cat %21%21%21%21%21%21%21%21%21%21%21%21%21%21.dump
index: tweets-text.index        term: <!!!!!!!!!!!!!!>  domain: tweets-text     range: tweets   have_section: false     have_weight: false    have_position: true
  weight        position        term_frequency  record
  0     74      1       tweets[398641294714499072].text

$ cat %E3%81%84%E3%81%BC.dump
index: tweets-text.index        term: <いぼ>    domain: tweets-text     range: tweets   have_section: false     have_weight: false    have_position: true
  weight        position        term_frequency  record
  0     40      1       tweets[198244626002481152].text

やりたいことは myisam_ftdump 的なことなので、この.dumpファイルをテキトーにパースしてやらないといけないっぽい。

取りあえず、投げやりなPerlワンライナーで。

$ cat `ls | head -1000` | perl -nle 'if (/\sterm:\s<(.+)>\s/) {printf("%d\t%s\n", $count, $term); $term= $1; $count= 0;} elsif (/\s([0-9]+)\s+tweets\[[0-9]+\]\.text$/) {$count+= $1;}' | sort -nr | head
12305   、
11013   。
9295    @
7042    /
4599    :
3583    。。
3479    #
2577    ://
2561    (
2243    「

cat *でやろうとしたらなんか怒られた(´・ω・`)

$ cat * | perl -nle 'if (/\sterm:\s<(.+)>\s/) {printf("%d\t%s\n", $count, $term); $
term= $1; $count= 0;} elsif (/\s([0-9]+)\s+tweets\[[0-9]+\]\.text$/) {$count+= $1;}' | sort -nr | head
cat: オプションが違います -- '%'
詳しくは `cat --help' を実行して下さい.

これで索引の中の無駄なトークンをあぶりだしてメンテしてやるのがゴールのつもり。


【2014/01/24 13:46】
catがダメなのは"-"で始まるファイルっぽい。

$ for f in *; do cat $f > /dev/null || (echo $f; break); done
cat: オプションが違います -- '%'
詳しくは `cat --help' を実行して下さい.
-%23.dump
cat: オプションが違います -- '%'
詳しくは `cat --help' を実行して下さい.
-%25%27.dump
cat: オプションが違います -- '%'
詳しくは `cat --help' を実行して下さい.
-%26.dump
..

cat ./*にしたら食えた。

$ cat ./* | perl -nle 'if (/\sterm:\s<(.+)>\s/) {printf("%d\t%s\n", $count, $term); $term= $1; $count= 0;} elsif (/\s([0-9]+)\s+tweets\[[0-9]+\]\.text$/) {$count+= $1;}' | sort -nr | head
12305   、
11013   。
10217   _
9295    @
7042    /
6456    って
4599    :
4514    mysql
4147    ない
3801    5

うん、mysql多いなオイ。

2013/12/03

全文検索エンジンGroongaを囲む夕べ(以下、ぐるんべ)4に参加して感じたことなど

このエントリーは 全文検索エンジンGroonga Advent Calendar 2013 の3日目です :)

さて、今年もいい肉の日(11/29)に ぐるんべ4 が開催されたので今年も行ってきました。去年のぐるんべ3に続き、2年連続2回目の参加です(去年は発表とかしませんでしたが)

少し遅れ馳せながら感想エントリーです。
当日のまとめは おんがえしさんブログのおんがえし Groongaを囲む夕べ4をサクッと振り返る などにリンクを張りつつ誤魔化します。


さて、今年のぐるんべで受けた印象は *かなりMySQLに寄ってきたな* というイメージでした。かなり偏見ですが。

すとーさん が`*roonga使ってる人ー?'と振った感じでも、去年よりMroonga使いは多そう。それに対してRroonga使いの参加が少なかったイメージです。

去年のぐるんべ3 のアジェンダと比較していただくと判るのですが(すいません、具体的な数はタイトル見ても思い出せませんでした。。)去年は半分くらいがRroongaネタ、残りがGroongaとMroonga(2本?)で、どちらかというと比較的少数派だったはず。え? Nroo…ごめん誰か来たみたい

ところが今年は 林さん のセッションを除けば事例紹介は半分(4本)がMroonga関連、Groongaが3本にRroongaが1本といううーん、これは我ながらバイアスのかかった見方だとは思うんですが、ボリューム的にだいぶ増えた気がするんですよ。気がするんです。

その他にも池田さんから「Mroongaサポートの紹介」があって、対応する(?)南さんのセッションはプロダクトに関わらず*roonga族全般'に関するもの、斯波さん からのMroonga今年の収穫は去年と変わらないペースだったので、やっぱりMroongaの話題が出ていた時間は長かったように思われます。
去年の 森さんのセッション では割と`全文検索もできる *KVS*'っぽく紹介されていた感じがしましたが、今年のセッションではそれに触れてはいたものの分量は少なくなった感じ(今年はGroonga本体でなくてDroongaでしたしね)

別に良い訳でも悪い訳でもなく、なんとなーく、そんなことを感じました。来年はどうなるでしょうね。来年こそNroo…うん何でもない。


そういえば去年のぐるんべで斯波さんに「ねえねえMariaDBマダー?」とねだった事とか色々思い出してきました。懐かしいですが、長くなりそうなのでこのへんで。

( ´-`).oO(ところで、httpしゃべれるようにするとかNode.jsから叩けるようにするのは最近の流行りなんですかね。NDBCLUSTERから学ぶところとしては、memcachedプロトコルなら使う人いるかもって感じですが


明日は KitaitiMakotoさん です!

2013/10/07

Isucon #3に出場してチームをお通夜にしてしまった話

俺の大ポカに巻き込まれたチームメイトの @studio3104 さんと @ayumu83s さんごめんなさい。
俺がしでかしたことをありのまま話すぜ。


  • 取り敢えず吊るしのベンチマークを取る。
  • 開始早々、MySQL 5.6.13をPercona Server 5.6.13に取替え。
    • この時、datadirは使い回しでバックアップを取らなかった。
  • my.cnfをチューニングしてibdata1とib_logfile*を再作成。
    • その間アプリ側ではTCP/IP接続をsocket接続に書き換えてもらったり、プロファイル仕込んでもらったり。
  • この時点からベンチマークが通らなくなる。
    • 原因はInnoDB memcachedを殺したからなんですがこの時点では判らず。
    • アプリ側のコードを切り戻したりPercona ServerをMySQLに戻したりしたけれど、ベンチマークは相変わらずFAILする。
  • すたじおさんの到着も遅れていたし、取り敢えずエラーは後で解析するとして判るところからチューニングを開始することに。
  • テーブルにINDEXをガスガス追加。INSERT, UPDATEのトラフィックは大したことがなさそうだったので、基本covering index狙いの長めのキー。covering indexが狙えないところはORDER BY狙いのキー。
  • Percona Serverだろうとオプティマイザーは残念な感じなので、片っ端からUSE INDEXを付けてインデックスを固定。あと、変なループがあるって教えてもらったのでJOINに書き換え。
    • このJOINも、最終的にはスコアが下がったっていって切り戻したんだけど(´・ω・`)
  • Apacheをnginxに入れ替えたりアプリをデバッグしてもらっても原因が見えないし、general logを眺めていたら"WHERE id=NULL"ってクエリーが㌧でいたので、データがおかしいのかなぁと思ってinit.sql.gzからデータを再投入したり、mysqldumpを吸い上げてリストアしてみたり。当然何も起こらない。
    • ええ、InnoDB memcachedにセッション情報保存してましたから、セッション情報が引き渡されないんですよね。
  • ピンポイントに打ってくるINSERT, UPDATEとSELECTはHandlerSocketかInnoDB memcachedでやっつけるかと思ってNet::HandlerSocketをmake。InnoDB memcached PluginもPercona Serverのバイナリーには入ってなかったのでソース落としてきてmake。
    • innodb_memcache.containersをごにょごにょして何度か再起動するものの、目的の用途に使うには向かないのでHandlerSocketの方が良さそうだと判断。
    • アプリ環境周りのセットアップが全く判っていないので、HandlerSocketのライブラリをmake installしてもパスが通っておらず結局使えない(´・ω・`)
  • SQLは「結果セットを変えない」ことを大前提にちょっと書き換えただけ。
    • 普段の仕事っぷりが見事に出るなぁ。。_| ̄|○
  • 残り1時間、ついにインスタンスを破棄して新しいインスタンスを立ち上げることを決意。
    • 勿論ベンチ通る。
  • Percona Serverに変える。
    • 通らなくなる。
    • ここかよ! だがデータストアが変わっただけで何が変わる?
  • ところでなんかエラーログのInnoDB memcachedのエラー(" InnoDB_Memcached: the value column c2 in table test/demo_test should be INTEGER, CHAR or VARCHAR.")がウザいので、UNINSTALL PLUGIN。
    • 通らなくなる。
    • Σ(゚д゚lll) うっそぉ!?
    • ま・さ・か…!
  • mysql> SELECT * FROM test.demo_test;
  • うわあああああ(AA略
  • Perconaに入れ替えてインデックス作ってSQLにヒント句追加して…ここまでで、時間切れ。


というわけで、@studio3104 さんと @ayumu83s さんに
 8 時 間 耐 久 デ バ ッ グ 祭 り
を強要した挙句、
 責 め る べ き は た だ 一 人
だけど、2人とも優しくて責めるに責められず、結果お通夜に。

MySQLしかいじれなかった結果の最終スコアは3440でした。
本当にごめんなさい。