20180220 MySQL Trend Seminar 2018 @福岡

# MySQL Trend Seminar 2018 @福岡
https://sosl.connpass.com/event/76429/
主催 : 株式会社スマートスタイル


## MySQL 8.0 新機能
(リリース候補版)

OLTB(分析とか)は、元々あまり得意ではなかったが、
改善されて、どんどん良くなった。

### GIS(空間図形情報)サポートの強化
Boost.Giometryライブラリを統合。
地理情報系
st_distance() で距離を計算できる。

### デフォルトのキャラがユニコード
UTF-8
今まではラテン1。日本人ユーザに優しくない。

### データ型
JSONデータ型
(5.7で実装済み。パフォーマンスを改善。)
特定の要素だけを更新できるようになった。

☆
JSONデータを、SQLのように取得できる。

## 共通テーブル式
WITH句追加
パフォーマンスが良くなる事もある。(複数呼ぶ場合とか)

Window関数

LAG関数
1行前の値を参照できる

LEAD関数
1行後の値を参照できる

### SELECT FOR UPDATEの拡張
NOWAIT
行が既にロックされていれば、すぐにエラーを返す

SKIP LOCKED
行が既にロックされていれば、その行に対するロック取得はあきらめる

### 不可視インデックス(Invisible Indexes)
オプティマイザから見えない索引
一時的に索引を見えない状態にする。
(一時的にインデックスを削除した状態と同じになる。インデックスの削除を安全に行える)

### オプティマイザヒントの拡張
joinの順番を変更できる

### 降順索引

### ヒストグラム
データが偏っている場合のクエリの精度向上。
インデックスよりもお手軽。

### セキュリティ
ロール概念の追加

### 何で 5からいきなり 8?
6は頓挫した。7は姉妹品がナンバリングして、混同を避けるために、もう1つ上げた。


MySQL Enterprise Monitor


## MySQL InnoDB Cluster

### Group Replication
マルチマスターレプリケーション
 ・全てのノードに書き込み可能
 ・単一障害が無い

高可用性
 ・同じデータを全てのノードで保持する
 ・障害を検知すると、自動でフェイオーバーを行う

MySQLサーバ3台以上で構成
・最大9台まで
・奇数台を推奨

「全てのノード」
「同じ順番に」
トランザクションが実行される

### MySQL Router

### MySQL Shell
MySQLを操作するためのコマンドラインツール
・Python
・Javascript
・

Client→LB(ロードバランサ)→
スレーブの

### モニタリング
Group Replication
MySQL Enterprise Monitor

AUTO INCREMENTの値は「7」ずつ上がる(デフォルト)
バッティングを避けるため

テーブルロックは非推奨

可用性とパフォーマンスはトレードオフ


## MySQLからアプリケーション基盤まで、最適なクラウドへの移行

オンプレ⇔クラウド
を、同じ感覚でできる

エンプラ環境に、クラウドの環境を持ち込む。
データはユーザのデータセンターにて管理する。
( at Customer )

Build → Zip → Deploy

ロードバランサが自動で動く

スケーリング

##### LINE Boost

無料枠あり。30日。$300

## pixivでの MySQLの運用について
pixiv の MySQL率 12/14

Master 15、Slave 28

MySQL Sandbox
1つのサーバで複数の MySQLを簡単に起動できる
複数の異なるバージョンを起動できる

alter table
INT to BIGINT
6日間かかった。

シンプルな Master-Slave構成。
3000万ユーザの運用にも耐えられる。