SlideShare a Scribd company logo
MySQL 5.7の罠が
あなたを狙っている
Traps of MySQL 5.7 are aiming you
2015/08/22
yoku0825
YAPC::Asia 2015
This slide was
updated at
2016/01/13!!
1/74
Chiba.pmの
⽅から来まし
た
2/74
Chiba.pm
の “m” は
3/74
MySQL
の”M” :)
4/74
※諸説あ
ります
5/74
\こんにちは/
yoku0825@とある企業のDBA
オラクれない-
ポスグれない-
マイエスキューエる-
家に帰ると
妻の夫-
せがれの⽗-
ムスメの⽗-
Twitter: @yoku0825
Blog: ⽇々の覚書
MyNA ML: ⽇本MySQLユーザ会
6/74
MySQL 5.7について
2013年4⽉に5.7.1-m11(Development Milestone
Release, ベータ版)
2015年8⽉に5.7.8-rc2(Realease Candidate, リリース候
補版)
2015/08/22現在、GA(General Available, ⼀般公開版)は
まだ
2015/10/21 MySQL 5.7.9 GA Released!!
7/74
本編に⼊
る前に
8/74
みなさんに呪
いをかけます
9/74
知らないと致命
傷、でも知ってれ
ば予防できる(は
ず)
10/74
このトークを
聞いた⼈は
11/74
このトークを
聞いていない
⼈に
12/74
MySQL 5.7の罠
をひとつでも伝え
てあげてください
13/74
伝えない
と︖
14/74
 
https://vicky2183.wordpress.com/2010/05/14/
postgresql-vs-mysql/
15/74
本編
16/74
余計なお世話
なパラメータ
ー多い
17/74
default̲password̲lifetime
は 5.7.11からデフォルト0 にな
りました
2016/01/13 updated
18/74
default̲password̲lifetime=
360
19/74
パスワード変更か
ら *360⽇* でア
カウントがロック
される
20/74
アップグレ
ードから
21/74
360⽇後に
襲ってくる
22/74
_⼈⼈⼈⼈⼈⼈_
> 突然の死 <
 ̄Y^Y^Y^Y^ ̄
23/74
log̲timestamps=
UTC
24/74
エラーログ, スロ
ーログ, ジェネラ
ルログ全部 UTC
25/74
show̲compatibility̲56=
OFF
26/74
SHOW STATUS
SHOW
VARIABLES
27/74
*performance̲schema*
のSELECT権限が必要になる
28/74
performance̲schema
を *OFFにすると
SHOW VARIABLESで
きない*
29/74
レプリケーションスレーブに注意 (FIXED by 5.7.9)
REPLICATION SLAVE権限の *他に* SELECT ON
performance̲schema.* が必要
mysql> show slave statusG
*************************** 1. row ***************************
..
Last_IO_Errno: 1142
Last_IO_Error: The slave I/O thread stops becaus
e a fatal error is encountered when it try to get the value of SE
RVER_ID variable from master. Error: SELECT command denied to use
r 'replicator'@'172.17.0.13' for table 'global_variables'
..
30/74
binlog̲format=
ROW
31/74
1ステートメントで
100万⾏DELETE
するバッチがあっ
たとするじゃろ︖
32/74
100万⾏の削除前
のイメージが全て
バイナリーログに
あがががが
33/74
binlogへの書き込
みはDisk Fullで
エラーになってく
れない
34/74
sql̲mode
mysql56> SELECT @@sql_modeG
*************************** 1. row ***************************
@@sql_mode: NO_ENGINE_SUBSTITUTION
1 row in set (0.00 sec)
mysql57> SELECT @@sql_modeG
*************************** 1. row ***************************
@@sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_AUTO_CREATE
_USER,NO_ENGINE_SUBSTITUTION
1 row in set (0.00 sec)
35/74
16桁ハッシュ
の古いパスワー
ド形式の廃⽌
36/74
もう残ってま
せんよね︖ 10
年前 ですよ
37/74
log̲error̲verbosity
とlog̲warnings
38/74
同じ変数を2つ
のパラメータ
ーがいじる
39/74
しかも 値がズレてる
(log̲warnings + 1 =
log̲error̲verbosity)
40/74
混在していた場
合、通常のオプシ
ョンと同じく 後勝
ち で設定される。
41/74
古いlog̲warningsの記述はmy.cnfから取り除いておく
べき
value notes warnings errors
log-warnings = 0
log-error-
verbosity = 1
No No Yes
log-warnings = 1
log-error-
verbosity = 2
No Yes Yes
log-warnings >=
2
log-error-
verbosity >= 3
Yes Yes Yes
42/74
internal̲tmp̲disk̲storage̲engine=
InnoDB
43/74
テンポラリー
テーブルは排
他ロック不要
44/74
ロールバックはす
るけどクラッシュ
リカバリーは不要
45/74
テンポラリーテー
ブル専⽤の
ibtmp1 ファイル
を作成する
46/74
⼀度容量を確
保してしまう
と
47/74
mysqldを再起
動するまで 領域
は解放されない
48/74
binlogへの書
き込みは
(略)
49/74
innodb̲buffer̲pool̲load̲at̲startup=
ON
50/74
起動時のバッ
ファプール暖
気ON
51/74
mysqld起動直後
に 全⼒で .ibdファ
イルの読み込みが
⾛る
52/74
この処理が終わるま
での間にトラフィッ
クが突っ込んでくる
とかなり悲惨
53/74
secure̲file̲priv= /
var/lib/mysq-files
(rpm, debのみ)
54/74
LOAD DATA
INFILEがこのデ
ィレクトリ外から
できなくなる
55/74
innodb̲buffer̲pool̲size
のオンライン変更をサポー
ト︕︕1
56/74
バッファプールを
⼤きくするときは
更新がブロックさ
れる
57/74
本当は断続的
に SELECTも
ブロックしてる
58/74
オンラインっ
て何だっけ
59/74
validate̲password
プラグインがデフォル
トで有効 (rpm)
60/74
デフォルトでは 8
⽂字以上、英⼤⽂
字⼩⽂字数字記号
の4種類 が必須
61/74
パスワードを変更す
るまでプラグインの
無効化どころか条件
の確認もできない
62/74
そんな都合の良い
⽂字列ぱっと思い
つかないよ︕
63/74
Do̲you̲love̲MySQL57?
でこの条件を満たすのでご活
⽤ください
64/74
5.6の暗黙のデフォルトとなるべく同じにするためのタレ
[mysqld]
sql_mode= NO_ENGINE_SUBSTITUTION
secure_file_priv= ""
binlog_format= STATEMENT
innodb_buffer_pool_dump_at_shutdown= 0
innodb_buffer_pool_load_at_startup= 0
innodb_buffer_pool_dump_pct= 100
loose-default_password_lifetime= 0
### Remove log_warnings!!
loose-log_error_verbosity= 3
loose-log_timestamps= SYSTEM
loose-internal_tmp_disk_storage_engine= MyISAM
loose-show_compatibility_56= ON
65/74
秘伝のタレ以外
16桁ハッシュ
おとなしく41桁ハッシュに更新を
mysql.user.password
スクリプトはバージョン判定を
validate̲passwordプラグイン
Do_you_love_MySQL57? で乗り切ってUNINSTALL PLUGIN
validate_password
66/74
全部知っ
てた⼈︖
67/74
⽇本語の5.7の
情報はそう多
くない
68/74
こんな状態で
最初のMySQL
が5.7だったら
69/74
⼼が⿊くなっ
ちゃう
©Yappo
70/74
このトークを
聞いた⼈は
71/74
このトークを
聞いていない
⼈に
72/74
MySQL 5.7の罠
をひとつでも伝え
てあげてください
73/74
よろしくおねがいします :)
https://vicky2183.wordpress.com/2010/05/14/
postgresql-vs-mysql/
74/74

More Related Content

MySQL 5.7の罠があなたを狙っている