More Related Content
PDF
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015 ODP
Performance Schema @ MySQL Casual #2 PDF
MySQL 5.7の次のMySQL 8.0はどんなものになるだろう PDF
What's New in MySQL 5.7 Security PDF
PDF
MySQL57 Update@OSC Fukuoka 20151003 PDF
KEY
My sql casual_in_fukuoka_vol1 What's hot
PDF
PDF
Add PLEASE clause to Oracle Database PDF
PDF
MySQL ガチBeginnerがやってみたことと反省したこと PDF
Scalaで行うマイグレーション ~Flyway~ PDF
Ansible2.9 ネットワーク対応のアップデート #ansiblejp PDF
PPTX
20140518 JJUG MySQL Clsuter as NoSQL PDF
PDF
Oracle Database Connect 2017 / JPOUG#1 PDF
MySQL Fabricでぼっこぼこにされたはなし PDF
PDF
PDF
Java Batch 仕様 (Public Review時点) PDF
20160215 04 java ee7徹底入門 jbatch PDF
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜 PPT
Spring3.1概要 データアクセスとトランザクション処理 PPTX
Androidで使えるJSON-Javaライブラリ PDF
PDF
Viewers also liked
PDF
Which is your favorite mysqld PPT
PPT
HandlerSocket plugin for MySQL PDF
PDF
PDF
Similar to MySQLを拡張する
PDF
PDF
いろいろ考えると日本語の全文検索もMySQLがいいね! PDF
MySQL最新情報 ※2015年9月5日「第1回 関西DB勉強会」での発表資料 PDF
PDF
KEY
PDF
Index shotgun on mysql5.6 PDF
PDF
PDF
A13 MySQL & NoSQL~Best of both world~ by Philip Antoniades & Ryusuke Kajiyama PDF
PDF
20150131 ChugokuDB-Shimane-MySQL PDF
MySQL 5.5 Update #denatech PDF
[db tech showcase Tokyo 2015] D23:MySQLはドキュメントデータベースになり、HTTPもしゃべる - MySQL Lab... PPTX
PDF
PDF
PDF
D22 目覚めよDBエンジニア 〜世界最速カラムナーデータベースは本物だ!〜 by Koji Shinkubo PDF
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システム PPTX
[OSC 2017 Tokyo/Fall] OSSコンソーシアム DB部会 MySQL 8.0 More from Masahiro Tomita
PDF
PDF
PDF
PDF
PDF
PDF
PDF
PDF
PDF
PDF
PDF
「理論から学ぶデータベース実践入門」読書会スペシャル PDF
PDF
PDF
PDF
PDF
PDF
PDF
PDF
PDF
MySQLを拡張する
- 1.
- 2.
MySQLを拡張する Powered byRabbit 2.1.9
自己紹介
とみた まさひろ
http://tmtms.hatenablog.com
http://twitter.com/tmtms
https://github.com/tmtm
長野県北部在住プログラマー( Ruby & C )
長野ソフトウェア技術者グループ(NSEG)
- 3.
MySQLを拡張する Powered byRabbit 2.1.9
自己紹介
日本MySQLユーザ会代表
MySQL 3.21 の日本語対応 (1998)
MySQLのRubyバインディング作成 (1998)
OSS貢献者賞 2013
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
MySQLを拡張する Powered byRabbit 2.1.9
UDF - ユーザー定義関数
一番簡単な拡張
独自の関数を MySQL に組み込む
通常の関数 / 集約関数
MySQLのソースを見なくてもマニュアルだけで作
成可能
http://dev.mysql.com/doc/refman/5.6/ja/adding-udf.html
- 17.
MySQLを拡張する Powered byRabbit 2.1.9
UDF
hoge_init()
クエリ実行前に呼び出される(引数チェックとか)
hoge()
関数本体
hoge_deinit()
クエリ実行後に呼び出される(メモリ解放とか)
- 18.
MySQLを拡張する Powered byRabbit 2.1.9
例: mysql-mruby
https://github.com/mattn/mysql-mruby
mysql> SELECT mrb_eval('ARGV.map(&:upcase).join(",")',
-> 'hoge', 'fuga') as a;
+-----------+
| a |
+-----------+
| HOGE,FUGA |
+-----------+
- 19.
- 20.
MySQLを拡張する Powered byRabbit 2.1.9
プラグイン(5.7.9)
mysql> show plugins;
+----------------------------+----------+--------------------+---------+---------+
| Name | Status | Type | Library | License |
+----------------------------+----------+--------------------+---------+---------+
| binlog | ACTIVE | STORAGE ENGINE | NULL | GPL |
| mysql_native_password | ACTIVE | AUTHENTICATION | NULL | GPL |
| sha256_password | ACTIVE | AUTHENTICATION | NULL | GPL |
| MyISAM | ACTIVE | STORAGE ENGINE | NULL | GPL |
| PERFORMANCE_SCHEMA | ACTIVE | STORAGE ENGINE | NULL | GPL |
| InnoDB | ACTIVE | STORAGE ENGINE | NULL | GPL |
| INNODB_TRX | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_LOCKS | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_LOCK_WAITS | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_CMP | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_CMP_RESET | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_CMPMEM | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_CMPMEM_RESET | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_CMP_PER_INDEX | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_CMP_PER_INDEX_RESET | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_BUFFER_PAGE | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_BUFFER_PAGE_LRU | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_BUFFER_POOL_STATS | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_TEMP_TABLE_INFO | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_METRICS | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
- 21.
MySQLを拡張する Powered byRabbit 2.1.9
プラグイン(5.7.9)
| INNODB_FT_DEFAULT_STOPWORD | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_FT_DELETED | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_FT_BEING_DELETED | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_FT_CONFIG | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_FT_INDEX_CACHE | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_FT_INDEX_TABLE | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_SYS_TABLES | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_SYS_TABLESTATS | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_SYS_INDEXES | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_SYS_COLUMNS | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_SYS_FIELDS | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_SYS_FOREIGN | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_SYS_FOREIGN_COLS | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_SYS_TABLESPACES | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_SYS_DATAFILES | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| INNODB_SYS_VIRTUAL | ACTIVE | INFORMATION SCHEMA | NULL | GPL |
| MRG_MYISAM | ACTIVE | STORAGE ENGINE | NULL | GPL |
| MEMORY | ACTIVE | STORAGE ENGINE | NULL | GPL |
| CSV | ACTIVE | STORAGE ENGINE | NULL | GPL |
| BLACKHOLE | ACTIVE | STORAGE ENGINE | NULL | GPL |
| partition | ACTIVE | STORAGE ENGINE | NULL | GPL |
| FEDERATED | DISABLED | STORAGE ENGINE | NULL | GPL |
| ARCHIVE | ACTIVE | STORAGE ENGINE | NULL | GPL |
| ngram | ACTIVE | FTPARSER | NULL | GPL |
+----------------------------+----------+--------------------+---------+---------+
- 22.
MySQLを拡張する Powered byRabbit 2.1.9
プラグイン
ストレージエンジンプラグイン
InnoDB, MyISAM, CSV, Blackhole, …
全文パーサープラグイン
全文検索用トークナイザ: ngram
デーモンプラグイン
mysqld プロセス空間内で動作
- 23.
MySQLを拡張する Powered byRabbit 2.1.9
プラグイン
INFORMATION_SCHEMA プラグイン
準同期レプリケーションプラグイン
監査プラグイン
認証プラグイン
パスワード検証プラグイン
- 24.
MySQLを拡張する Powered byRabbit 2.1.9
プラグインの作り方
リファレンスマニュアル 24.2.4 プラグインの作成
http://dev.mysql.com/doc/refman/5.6/ja/writing-plugins.html
- 25.
- 26.
MySQLを拡張する Powered byRabbit 2.1.9
ストレージエンジンプラグイン
InnoDB, MyISAM, Archive, Blackhole, …
標準のストレージエンジンは全部プラグイン
- 27.
MySQLを拡張する Powered byRabbit 2.1.9
巷のストレージエンジンプラグイン
mroonga
http://mroonga.org/ja/
日本語全文検索エンジン Groonga を MySQL から
使う
- 28.
MySQLを拡張する Powered byRabbit 2.1.9
ストレージエンジンの作り方
ドキュメントあり
MySQL Internals Manual
Chapter 22 Writing a Custom Storage Engine
http://dev.mysql.com/doc/internals/en/custom-engine.html
でもソースみないと厳しいかも
フリーソフトウェアだから見放題!
- 29.
- 30.
MySQLを拡張する Powered byRabbit 2.1.9
デーモンプラグイン
mysqld プロセス空間内で何かを動かす
通常とは異なる TCP/IP の口を開けて何かすると
か
起動直後から定期的に何かするとか
- 31.
MySQLを拡張する Powered byRabbit 2.1.9
巷のデーモンプラグイン
HandlerSocket
https://github.com/DeNA/HandlerSocket-Plugin-for-MySQL
Transactd
http://www.bizstation.jp/ja/transactd/
- 32.
MySQLを拡張する Powered byRabbit 2.1.9
デーモンプラグインの作り方
リファレンスマニュアル 24.2.4.5 デーモンプラグイ
ンの作成
http://dev.mysql.com/doc/refman/5.6/ja/writing-daemon-plugins.html
init() と deinit() 関数だけ
結構簡単
- 33.
- 34.
- 35.
- 36.
MySQLを拡張する Powered byRabbit 2.1.9
Charset/Collation
リファレンスマニュアル 10.3 文字セットの追加
http://dev.mysql.com/doc/refman/5.6/ja/adding-character-set.html
実は1バイト文字セットはコンパイル要らず
/usr/local/mysql/share/charsets/
マルチバイト文字は要コンパイル
mysql-5.x.x/strings/CHARSET_INFO.txt
どうしても ハハ=パパ=ババ と 🍣=🍺 問題を解決
したい人は改造してみるのもいいかも
- 37.
MySQLを拡張する Powered byRabbit 2.1.9
ネットワークプロトコル
MySQL Internals Manual
Chapter 14 MySQL Client/Server Protocol
http://dev.mysql.com/doc/internals/en/client-server-protocol.html
MySQLのプロトコル解説
http://slide.rabbit-shocker.org/authors/tommy/mysql-protocol/
MySQLクライアントライブラリが無い処理系で実
装
Ruby/MySQL - pure Ruby 実装
https://github.com/tmtm/ruby-mysql
- 38.
MySQLを拡張する Powered byRabbit 2.1.9
クエリ
クライアントからのコマンド振り分け
mysql-5.x.x/sql/sql_parse.cc
クエリ構文解析
mysql-5.x.x/sql/sql_yacc.yy
独自のクエリを組み込める
「予約語書き換えればSQLインジェクション対
策!」
- 39.
- 40.
MySQLを拡張する Powered byRabbit 2.1.9
まとめ
プラグイン機構でコンパイルせずに結構拡張でき
る
ソースが見れるからプラグインも作りやすい
mysqld 自体を改造することもできる
無料もいいけど自由重要
フリーソフトウェア万歳!
- 41.
- 42.
MySQLを拡張する Powered byRabbit 2.1.9
アドベントカレンダー
元はクリスマスまでの期間を数える
ために使われていたカレンダーのこ
とで
〜中略〜
近年、インターネット上において、こ
のカレンダーにならい、定められた
テーマに従い、参加者が持ち回りで
自身のブログやサイトに記事を投稿
する企画が多く実施されています。
http://blog.qiita.com/post/132928437279/adcal2015
- 43.
MySQLを拡張する Powered byRabbit 2.1.9
MySQL 関連のアドベントカレンダー
12/1〜25 まで開催中
MySQL Casual Advent Calendar 2015
http://qiita.com/advent-calendar/2015/mysql-casual
MySQL Fabric&Routerつらくない Advent
Calendar 2015
http://qiita.com/advent-calendar/2015/mysql_fabric
MySQL 5.7の「罠」に狙われてもやられないため
の Advent Calendar 2015
http://qiita.com/advent-calendar/2015/mysql57-yoku0825-traps
MySQLマニュアルを読む Advent Calendar 2015
http://qiita.com/advent-calendar/2015/mysql_manual
- 44.
- 45.
- 46.
- 47.