5.7の次のMySQL
6.0が⿊歴史同⼠、仲良くしましょう
2016/11/03
yoku0825
phpcon 2016
\こんにちは/
yoku0825@GMOメディア株式会社
オラクれない-
ポスグれない-
マイエスキューエる-
家に帰ると
妻の夫-
せがれの⽗-
ムスメの⽗-
⽣息域
Twitter: @yoku0825-
Blog: ⽇々の覚書-
MyNA ML: ⽇本MySQLユーザ会-
MySQL Casualʼs Slack: MySQL Casual-
1/23
Do you love MySQL 5.7?
2/23
MySQL 5.7のあれこれ
2015/10 GAリリース
GA時点でいくつかの罠は解消されている-
GA(General Availability .. Stable的な位置づけ)になってか
らも新機能を追加してくる新しいスタイル
バックポートならまだ以前もあったしわかるんだけど-
メインラインにごりごり突っ込んでくるのは新しいスタイル-
GAとは何だったのか-
default̲password̲lifetimeの罠は 2016/02 5.7.11で解消
3/23
なんだかんだ⾔ってフツーに動いてます
運⽤⾯では割と楽なので(感じ⽅には個⼈差があります)積
極的に使ってはいます
5.7の新機能 offline̲mode を利⽤してコネクションプール
環境でもマスター切り替えができる mikasafabric for
MySQL
GTIDをオンラインでONにできるのも助かる-
InnoDBのオンラインバッファプールサイズ変更は何度かや
った
generated columnで関数インデックスやら疑似CHECK制約
やら
暗黙のテンポラリーテーブルは怖いのでMyISAMに指定
4/23
で
5/23
その5.7の次
のMySQL
6/23
 
7/23
_⼈⼈⼈_
> 8.0 <
 ̄Y^Y^ ̄
8/23
というと「6.0
は︖」って聞か
れるんですけど
9/23
お互い6.0のことは忘れましょうや
Ver. PHP MySQL
5.0 2004/10-2005/09 2005/10-2012/03
5.1 2005/11-2006/08 2008/11-2013-12
5.2 2006/11-2011/01 -
5.3 2009/06-2014/08 -
6.0 ??-2010/03 2007/09(?
6.0.2)-2009/05
5.4 2012/03-2015/09 -
5.5 2013/06-2016/07 2010/12-
5.6 2014/08- 2013/02-
5.7 - 2015/10-
7.0 2015/12- -
8.0 - 開発中
10/23
7.0は︖
11/23
意外とフツーの理由でスキップ
12/23
MySQL 8.0の目⽟機能(︖)
MyISAMへの依存をなくす
MySQL 8.0.0現在、mysqlスキーマのテーブルは全てInnoDBに変更-
トランザクション対応(︖ クラッシュセーフで終わるか
も)DDL
.frmや.TRGファイルがなくなった-
オプティマイザーコストの最適化
最終的にはバッファプールに載ってるかどうかでコストを打ち分けて
くれるとか
-
Group Replicationの標準バンドル
マルチマスターを構成できるプラグイン-
MySQL InnoDB Clusterがlabsで公開中-
13/23
その他の新機能
ROLE, DEFAULT̲ROLEの追加
SET PERSIST構⽂
mysql̲install̲dbの廃⽌
performance̲schema.variables̲infoが便利
再帰CTE(WITH句)のサポート
降順インデックス(INDEX (col1 DESC) が 読み⾶ばされずに
作成できる)
14/23
そして
15/23
その他の新
(︖)罠
16/23
default_password_lifetime <> 0
5.7.11で暗黙のデフォルトが0に変更されたが
“次のメジャーバージョンでまた0以外にする” って⾔ってる
から、8.0では来るのではないかと
An update on default̲password̲lifetime-
MySQL Bugs: #79939: default̲password̲lifetime > 0 should
print warning at startup
-
MySQL Bugs: #79959: SYS should have a view of user
accounts expiring
-
17/23
「kamipoのハハ=パパ問題」
“kamipo” “utf8̲unicode̲ci” でググると出てくる
⼀時期 Rails では “ハハ” = “パパ” をTRUEで返す照合順序
がデフォルトになっていた
WHERE relationship = "ハハ" がパパのレコードも返してくる凄まじ
い照合順序
-
もともと⽇本⼈⽤ではなくて、ドイツ語のウムラオトとかを握りつぶ
すためのもの
-
名前のフリガナをDBに⼊れてると死ぬ-
⼊れてなくても死ぬ-
18/23
「kamipoのハハ=パパ問題」
SELECT * FROM families;
+----+-----------+--------------+
| id | name | relationship |
+----+-----------+--------------+
| 1 | ユイ | 本人 |
| 2 | キリト | パパ |
| 3 | アスナ | ハハ |
+----+-----------+--------------+
SELECT * FROM families WHERE relationship = 'パパ';
+----+-----------+--------------+
| id | name | relationship |
+----+-----------+--------------+
| 2 | キリト | パパ |
| 3 | アスナ | ハハ |
+----+-----------+--------------+
(c) kamipo
19/23
今までのデフォルト
⽂字コード latin1, 照合順序 latin1̲swedish̲ci
⼤⽂字⼩⽂字(a vs. A)は区別しないけど、ASCII以外の⽂字はノータ
ッチ
-
というかlatin1な時点でみんな変更するからそれ程問題になることは
なかった
-
⽂字コード utf8(utf8mb4), 照合順序 utf8̲general̲ci
(utf8mb4̲general̲ci)
⼤⽂字⼩⽂字(a vs. A)は区別しないけど、ASCII以外の⽂字はほぼノ
ータッチ
ただし寿司はビール
-
いわゆる「MySQLは⼤⽂字⼩⽂字を区別しない」と「ハハ ≠ パパ」
が両⽴していた
-
20/23
MySQL本体のデフォルトがハハ=パパ問題を起こす⽇が
来る︖
In addition to utf8mb4, we are also considering
switching the default collation to be
utf8mb4̲unicode̲520̲ci.
Planning the defaults for MySQL 5.8
MySQL Bugs: #79977: utf8mb4̲unicode̲520̲ci donʼt
make sense for Japanese FTS
21/23
MySQL先⽣の次
回作にご期待くだ
さい
Stay tuned!!
22/23
Thank
you!!
23/23

5.7の次のMySQL