MyNA(日本MySQLユーザ会)会 2015年8月 ノート


https://atnd.org/events/68323

## はじめに

* @kamipo さんOracle ACEおめでとうございます。
* GMOさんと@yoku0825さん、会場提供と運営ありがとうございました。
* 発表者様の本質と違っている可能性もあります。(一部主観も記述してあります。)
	* きっと資料はSlideShareあたりに出てくれると信じて・・・
* MySQLのことならhttp://mysql-casual-slackin.herokuapp.com @Slackに登録をとのこと。
* MySQLユーザ会からのお知らせ
	* ユーザ会2015/10/30(金)にユーザ会の15周年パーティがあるそうです。


##@kamipo	MySQL運用とActiveRecord
### MySQLを流行らせたい

* MySQLで困っている人を助けることで、MySQLを利用する人を増やす。
	* Twitterで困っている人を探す
	* githubで困っているissueを解決する
	* ということは困っている人はどちらかにポストすれば手厚いサポートが受けられる・・・?
* 基本的にアプリケーションから利用されるので、ActiveRecordの問題も解決する。(ActiveRecord と MySQL両面から)


### MySQLの問題を解決する

* ハハパパ問題
	* http://blog.kamipo.net/entry/2015/03/08/145045
*  utf8_unicode_ciは英語圏ではデフォルト。
	* http://blog.kamipo.net/entry/2015/03/17/103457
* sushi beer問題
	* 4byte文字(補助文字)がすべて同じ文字と判断されてしまう。
	* http://blog.kamipo.net/entry/2015/03/23/093052
* utf8mb4を利用するべし。(こっちが真のutf8)
	* mb4を利用するときはinnodb_large_prefixを利用する
	* 利用しないとindexのサイズ上限にかかる。
	* http://blog.kamipo.net/entry/2012/11/13/102024
* Online DDL(5.6以上)
	* ただし5.5 -> 5.6にアップグレードした場合、5.5で作成した時間系のカラムがオンラインでAlterできない。

### おすすめ機能

* pt-online-schema-change
	* http://strsk.hatenablog.com/entry/2014/12/19/003044
* mysql_online_migrations
	* https://github.com/anthonyalberto/mysql_online_migrations

## @i_rethi dimSTATから見るベンチマーク

### dimSTATとは何か

* パフォーマンス可視化ツール(performance_schemaを集める。)
	* https://blogs.oracle.com/pomah/entry/dimstat_by_examples
	* インストール手順: http://d.hatena.ne.jp/hiroi10/20150523/1432345143

### 性能測定結果
* CentOS6.6 MySQL5.6.26と5.7.8 RC1で測定
	* innodb_page_size=4Kにすると性能が上がっている。(default16K)
		* ただし、環境によっては変更しても上がるとは限らない。
	* xfsとext4ではxfsの方が性能がよい。
		* ext4は複数thread 単一ファイルに弱い。単一thread 単一ファイルは変わらない。
			* ext4はmutex lockが起こりやすい。
			* Flame graphsでIO状況を可視化できます。

##	@kazeburo PHPとMySQLの怖い話、メルカリのデータベース戦略

### mercariさんでの利用状況
* JPではクラウド+専用サーバ(Private LAN)
	* ioMemoryでMySQL構築
* USではAWS
	* RDSを利用(将来的には辞めたい模様)
* MySQLは5.6系を利用
* データベースをテーブル毎に分割してスケールアウトさせる。
	* テーブルごとに別サーバに保存。別サーバ化する対象は以下のようなテーブル。
		* 大きなテーブル
		* トランザクションに無関係なテーブル
* MySQL以外のデータベース・ミドルウェアを利用
	* memcached
	* Redis
	* Treasure Data
	* BigQuery
	* Norikra
	* MySQL 5.7
	* Mackerel

### ログ解析と監視
* ログはfluentdで収集してTreasureDataやMackrelに投げる
* ログから監視はfluentdで収集してNorikraで解析してSlackなどに通知。
* ログの敷居値アラートはMackerelを利用する。

### 分析DB
* Multi-Source Replication
	* 3つのマスターからReplicationをして分析データベースを作成する。
* Triggerでマスクする
	* MD5によるマスクをかける。(一意性も担保できる)

### PHPとMySQLの怖い話
* commit()が例外を出さない
	* 原因
		* あくまでもERRORなので例外ではないと判断されるため。
	* 対処
		* ERRORが出力された場合、Exceptionにラップする。
		* commit()の前にquery("SELECT 1")をするとよい。
* ★Empty row packet body(ここがいまいち理解できませんでした・・・)
	* 対処
		* unbuffered queryを利用しない。
		* net_write_timeoutを伸ばす。
* PHPは怖くない！！！(らしい...)

## @RKajiyama さてMySQL 5.7.8がGAではなくまさかのRC2であることが発覚したわけですが、ここでMySQL人柱の会の会員様向けの新ネタを見てみましょう。

とりあえず人柱募集とのこと

### MySQL[今後|最近]の新機能
* mysql"p"ump
* MySQL Group Replication
	* マルチマスタレプリケーション
	* 擬似同期レプリケーション
	* http://www.slideshare.net/ShinyaSugiyama/mysql-57
* MySQL JSON
	* http://variable.jp
	* データ型とネイティブ関数は違うものなので注意。
* New Data Dictionary
	* すべてInnodb化する。
* http plugin
	* httpの中にSQLを書ける
* MySQL Connector
* Haddop applier
* Binlog Events(旧Binlog Library)
	* libmysqlstream
	* libmysqlevents
* Group Replication
* Binlog Events
* Proxy & Fabric
* (ひっそり)Timezoneファイル