Y-Ken Studio

新しもの好きのデータエンジニアが四方山話をお届けします。

MySQL

MySQLからelasticsearchへ、レコードをネスト構造化しつつ同期出来る fluent-plugin-mysql-replicator v0.4.0 を公開しました

elasticsearchは全文検索サーバとしても知名度を獲得しており、次のような記事も人気を集めています。 elasticsearchを全文検索サーバとして活用するなら読んでおきたい、6つのブログ記事をピックアップ - Y-Ken Studio http://y-ken.hatenablog.com/entry/e…

第3回elasticsearch勉強会でトークしました #elasticsearchjp

2014年2月7日にリクルートテクノロジーズで開催された「第3回 ElasticSearch勉強会」でトークしてきました!前回の皆様の発表はKibanaに関する情報がメインでしたが、今回は検索技術中心のガチな内容でとても楽しかったです。 懇親会では今回発表したYamabik…

MySQLテーブルへの更新/削除イベントを逐次取得するFluentdプラグイン「fluent-plugin-mysql-replicator」をリリースしました

任意のSQLクエリで取得した結果の差分から、insert/update/deleteイベントを検知するプラグインをリリースしました。イベント検知だけでなく、レコードの内容と共にElasticsearch/Solrへ同期を行う、Outputプラグインも同封しています。 これはあえてバイナ…

Fluentdのタグ書き換えが捗る「tag_parts」プレースホルダを使ってみよう

Fluentdでログのちょっとした加工をする際に、タグの付け替えが必要です。 新しいタグを指定するか、先頭文字列の付け替えを行う手法が良く使われます。 しかしそれだけではかゆいところに手が届かず、もどかしい思いをされたことでしょう。 そんな時、タグ…

MySQLでMyISAMからInnoDBに乗り換える際に知らないとハマる、怖い話

photo by byte MySQLといえば、巷ではInnoDBばかり注目され、MyISAMの地下アイドル化がにわかに語られる今日この頃、皆様いかがお過ごしでしょうか。 まあカジュアルにストレージエンジンを変換するだけで済むなら、簡単なのです。 -- legacy_my_tableをInno…

Fluentdが流行る理由がいま分かる、10の実践逆引きユースケース集

ログデータを活用してビジネスに役立てようという最近のトレンドは理解できる。 しかし、なぜログ収集ソフトウェアのFluentdがこれほどまで話題になるのか、不思議に感じている方もいるのではないだろうか。単にログデータを収集するならばsyslog-ngやrsyslo…

全文検索付きMySQL5.0から5.6への移行にまつわるお話をMySQL Casual Talks Vol.5にて発表しました #mysqlcasual

MySQL5.0から5.6へ移行するにあたり、全文検索機能をTritonnからmroongaへ乗り換えるというプロジェクトの体験記をお届けします。2013年10月25日開催のMySQL Casual Talks Vol.5での発表資料です。

2013年10〜12月開催の勉強会への登壇予定をお知らせします

この秋には3つの勉強会でお話させて頂けることになりました。 いずれも、データベース周りのお話を行う予定です。 photo by mari ce

MySQLサーバのディスク容量減少アラートが飛んできた!ってときにどう対処するか

MySQLサーバで希に遭遇するディスク残量障害事例と共に紹介します。 こちらは、以下エントリよりネタをパクりましたインスパイアしました。すみません。 Linuxサーバがディスク容量不足になった!何か消さねば!ってなった時にどう対処するか - 元RX-7乗りの…

gihyo.jpにて、MySQLで使える全文検索プロダクトmroongaに関する連載を始めました

MySQL 5.0+Sennaという組み合わせの「Tritonn」が広まり始めたのは2008年頃でしたでしょうか。 あれから月日が経つこと5年。2013年となった今、ドキュメントが陳腐化するMySQL 5.0を捨て、MySQL 5.6で使える全文検索プロダクト「mroonga」へ移行しようとあ…

InnoDBはALTER TABLE ○○○ ORDER BY ○○○ DESC;で並び替え済みテーブルを作れない

MyISAM全盛時代には、こんな参照性能高速化手法がありました。 ALTER TABLE foo_table ORDER BYsortDESC;といったクエリで予めテーブルの内容を並び替えておくことで、SELECT時のORDER BY句が省略出来るというものです。 しかしこれ、InnoDBでは使えないので…

mroongaで「API version for STORAGE ENGINE plugin is too different」というエラーが起きたときの対処法

以下のエラーが起きてしまった時の対処法を紹介します。 2013-06-04 17:36:01 21440 [ERROR] Can't open shared library 'ha_mroonga.so' (errno: 0 API version for STORAGE ENGINE plugin is too different)

mysqldumpで作ったSQLファイルを流し込んだときに'multiple triggers with the same action time and event for one table'というエラーが起きたときの処方箋

とある日のこと、MySQL-5.6環境にてmysqldumpを行いつつmysqlコマンドでデータを流し込んでいると、以下のエラーが発生して止まりました。 そんな時はmysqldumpコマンドの引数に--skip-triggersを追加しましょう。

133もの修正が行われた MySQL-5.6.12 が配布開始となりました

133もの不具合及び機能改善が施された MySQL-5.6.12 が配布開始となりました。 5.6.11に続き、今回の更新も盛り沢山ですね。後半では、yumでのアップデート方法も併せて紹介します。 リリースノート InnoDB関連の修正が39、レプリケーション関連の修正が21と…

mroongaのインストール/アンインストール時に発行するするクエリと、その用途をまとめて解説

mroongaのプラグインインストール・アンインストールを手動で行いたい方向けのメモ。 MySQLが起ち上がっていない状態で、プラグインをインストールした時にも必要ですね。 更新履歴 2014年1月8日:mroonga-3.07の新機能であるmroonga_escapeのトピックを追加…

ますます進化したMySQL-5.6のレプリケーション状況出力(SHOW SLAVE STATUS構文)をMySQL-5.0と比較する

MySQL-5.6ではSHOW SLAVE STATUS;の出力が大幅に変わりました。 嬉しいポイントとしては、Last_SQL_Error_Timestampというカラムが増えたことです。 これはレプリケーションエラーが起きた際、それが何時何分に起きたのかが分かるのです。 従来であればサー…

mroongaで「ERROR 1005 (HY000): already used name was assigned」エラーが起きた際の復旧手順

存在しないテーブルなのに、テーブルが作れなくなった。 そんな現象に遭遇した時のトラブルシューティングを紹介します。 DROP TABLE ...の後にCREATE TABLE ....とした所、消したはずのテーブルが作れない show tables;を見る限り存在しないので、MySQLとし…

MySQL-5.5/5.6でのレプリケーション利用者に伝えたい「RESET SLAVE」にまつわる怖い話

MySQL-5.5よりRESET SLAVE;の挙動が変わり、直後にCHANGE MASTER構文を 発行しないと場合によっては問題が発生するとMySQLのドキュメントに記載されていました。 さらに、RESET SLAVE ALL;というクエリもサポートされたようです。 どういう事なのでしょう? …

groonga/mroongaのトークナイザー(tokenizer)の挙動を追ってみる

トークナイズ機能は、全文検索機能に無くてはならない機能です。 欧米圏であれば、最低限スペース区切りに対応していれば実用的に使えます。 しかし、中国語、日本語、韓国語への対応をする場合には、CJK対応言われる実装が必要です。 汎用的な分かち書き(…

MySQL 5.5からの新機能、インデックスへのコメント付与を行う方法

MySQL 5.5より、インデックスへのコメント付与が可能となりました。 全文検索エンジンmroongaは、その機能を用いてFULLTEXTインデックスの生成方法を変えております。 インデックスコメントについての情報が少なかったので、紹介したいと思います。

mroongaのテーブルを、ストレージモードからラッパーモードに変換する方法

storageモードだとデータ型の扱いがMySQLでのそれと違い困っている。 そうだ、wrapperモードにしよう、と思い立った方向けの記事です。

groonga/mroongaの文字列正規化機能 (normalizer) の挙動を追ってみる

groonga/mroongaが標準で備える文字列正規化機能(ノーマライザ・normalizer)として、 いわゆるgroonga独自のnormalizer(NormalizerAuto)と呼ばれるもがあります。 これは、大文字・小文字だけでなく、全角・半角を同一視できるという UnicodeのNFKCを用い…

MySQL-5.6の/var/log/mysqld.logへ出力される時刻の表記にまつわる不思議

MySQL-5.6から、/var/log/mysqld.logへ出力時の時刻表記が代わり、 YYMMDDから、YYYY-MM-DDという形式になりました。 ところが、mysqld_safe Starting mysqld daemon ... の出力だけ古い形式のままでした。 MySQL Bugをあたってみましたが、特に言及はされて…

MySQLのユーザ定義関数(UDF)のbase64encode / base64decodeを使ってみた

MySQLのユーザ定義関数(UDF)には淡い夢を感じます。 この可能性を探るべく、Base64のエンコード・デコードを題材に触れあってみたいと思います。 動機としては、MySQLのユーザ定義関数(UDF)を作りたいと思い、雰囲気を知りたかったから。 手短なものであ…

「Percona Live: MySQL Conference And Expo 2013」のPDF資料

「Percona Live: MySQL Conference And Expo 2013」のPDF資料が続々と上がっています。 これは要チェックですね。 http://www.percona.com/live/mysql-conference-2013/slides

MySQL-5.6.5の新機能「GTID」を使う際に抑えておきたい落とし穴

GTIDというと、MySQL-MHA無しでもフェイルオーバーできる素晴らしい機能だというのが一般的な認識ではないでしょうか。 私もそう思っていました。 しかしよくよく調べてみると、色々な制約があるようです。

mroongaでparserとnormalizerを同時に指定する方法

mroonga-3.03より、インデックスのコメントにて、 parserとnormalizerを指定できるようになりました。 それぞれのスキーマ(テーブル構造)設計のサンプルを交えて紹介します。 その後に、mroongaで使えるparserとnormalizerの一覧を紹介します。

mroongaで特殊記号を用いた全文検索を行うときのエスケープ方法

mroongaで()~+><-*などの記号を含んだ文字列を検索しようとすると、以下のエラーが起きます。 ERROR 1064 (42000): failed to parse fulltext search keyword 本日はその対処法を紹介します。

MySQL-5.6.11-1を使っている場合にはMySQL-5.6.11-2へアップデートしましょう

MySQL-5.6.11-1を使っている場合にはMySQL-5.6.11-2へアップデートしましょう。 既に北陸先端科学技術大学院大学(JAIST)のミラーからはMySQL-5.6.11-1のバイナリは無くなり、MySQL-5.6.11-2が公開となっております。 現象 以下エラーが発生して接続が出来な…

MySQL-5.5.6から仕様が変わった「MySQL-shared-compat」の中身を徹底解剖

MySQL-5.5.6から仕様が変わった「MySQL-shared-compat」の中身を紐解きます。