75
MySQL 5.7の罠が あなたを狙っている Traps of MySQL 5.7 are aiming you 2015/08/22 yoku0825 YAPC::Asia 2015

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

  • Upload
    yoku0825

  • View
    92.347

  • Download
    4

Embed Size (px)

Citation preview

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

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

Traps of MySQL 5.7 are aiming you2015/08/22

yoku0825YAPC::Asia 2015

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

This slide was updated at

2016/01/13!!1/74

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

Chiba.pmの⽅から来まし

た2/74

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

Chiba.pmの “m” は

3/74

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

MySQLの”M” :)

4/74

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

※諸説あります

5/74

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

\こんにちは/

yoku0825@とある企業のDBAオラクれない-ポスグれない-マイエスキューエる-

家に帰ると妻の夫-せがれの⽗-ムスメの⽗-

Twitter: @yoku0825Blog: ⽇々の覚書MyNA ML: ⽇本MySQLユーザ会

6/74

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

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

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

本編に⼊る前に

8/74

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

みなさんに呪いをかけます

9/74

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

知らないと致命傷、でも知ってれば予防できる(は

ず)10/74

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

このトークを聞いた⼈は

11/74

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

このトークを聞いていない⼈に

12/74

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

MySQL 5.7の罠をひとつでも伝えてあげてください

13/74

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

伝えないと︖

14/74

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

https://vicky2183.wordpress.com/2010/05/14/postgresql-vs-mysql/

15/74

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

本編16/74

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

余計なお世話なパラメーター多い

17/74

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

default̲password̲lifetimeは 5.7.11からデフォルト0 にな

りました

2016/01/13 updated

18/74

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

default̲password̲lifetime= 360

19/74

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

パスワード変更から *360⽇* でアカウントがロック

される20/74

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

アップグレードから

21/74

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

360⽇後に襲ってくる

22/74

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

_⼈⼈⼈⼈⼈⼈_> 突然の死 < ̄Y^Y^Y^Y^ ̄

23/74

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

log̲timestamps= UTC

24/74

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

エラーログ, スローログ, ジェネラルログ全部 UTC

25/74

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

show̲compatibility̲56= OFF

26/74

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

SHOW STATUSSHOW

VARIABLES27/74

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

*performance̲schema* のSELECT権限が必要になる

28/74

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

performance̲schemaを *OFFにすると

SHOW VARIABLESできない*

29/74

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

レプリケーションスレーブに注意 (FIXED by 5.7.9)

REPLICATION SLAVE権限の *他に* SELECT ON performance̲schema.* が必要

mysql> show slave status\G*************************** 1. row ***************************.. Last_IO_Errno: 1142 Last_IO_Error: The slave I/O thread stops because a fatal error is encountered when it try to get the value of SERVER_ID variable from master. Error: SELECT command denied to user 'replicator'@'172.17.0.13' for table 'global_variables'..

30/74

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

binlog̲format= ROW

31/74

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

1ステートメントで100万⾏DELETEするバッチがあったとするじゃろ︖

32/74

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

100万⾏の削除前のイメージが全てバイナリーログにあがががが

33/74

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

binlogへの書き込みはDisk Fullで エラーになってく

れない34/74

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

sql̲mode

mysql56> SELECT @@sql_mode\G*************************** 1. row ***************************@@sql_mode: NO_ENGINE_SUBSTITUTION1 row in set (0.00 sec)

mysql57> SELECT @@sql_mode\G*************************** 1. row ***************************@@sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION1 row in set (0.00 sec)

35/74

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

16桁ハッシュの古いパスワード形式の廃⽌

36/74

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

もう残ってませんよね︖ 10年前 ですよ

37/74

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

log̲error̲verbosityとlog̲warnings

38/74

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

同じ変数を2つのパラメーターがいじる

39/74

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

しかも 値がズレてる (log̲warnings + 1 = log̲error̲verbosity)

40/74

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

混在していた場合、通常のオプションと同じく 後勝ち で設定される。

41/74

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

古いlog̲warningsの記述はmy.cnfから取り除いておくべき

value notes warnings errors

log-warnings = 0log-error-verbosity = 1

No No Yes

log-warnings = 1log-error-verbosity = 2

No Yes Yes

log-warnings >= 2log-error-verbosity >= 3

Yes Yes Yes

42/74

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

internal̲tmp̲disk̲storage̲engine= InnoDB

43/74

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

テンポラリーテーブルは排他ロック不要

44/74

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

ロールバックはするけどクラッシュリカバリーは不要

45/74

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

テンポラリーテーブル専⽤の

ibtmp1 ファイルを作成する

46/74

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

⼀度容量を確保してしまう

と47/74

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

mysqldを再起動するまで 領域は解放されない

48/74

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

binlogへの書き込みは(略)

49/74

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

innodb̲buffer̲pool̲load̲at̲startup= ON

50/74

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

起動時のバッファプール暖気ON

51/74

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

mysqld起動直後に 全⼒で .ibdファイルの読み込みが

⾛る52/74

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

この処理が終わるまでの間にトラフィックが突っ込んでくるとかなり悲惨

53/74

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

secure̲file̲priv= /var/lib/mysq-files

(rpm, debのみ)

54/74

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

LOAD DATA INFILEがこのディレクトリ外からできなくなる

55/74

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

innodb̲buffer̲pool̲sizeのオンライン変更をサポー

ト︕︕1

56/74

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

バッファプールを⼤きくするときは 更新がブロックさ

れる57/74

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

本当は断続的に SELECTもブロックしてる

58/74

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

オンラインって何だっけ

59/74

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

validate̲password プラグインがデフォルトで有効 (rpm)

60/74

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

デフォルトでは 8⽂字以上、英⼤⽂字⼩⽂字数字記号の4種類 が必須

61/74

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

パスワードを変更するまでプラグインの無効化どころか条件の確認もできない

62/74

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

そんな都合の良い⽂字列ぱっと思いつかないよ︕

63/74

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

Do̲you̲love̲MySQL57? でこの条件を満たすのでご活

⽤ください

64/74

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

5.6の暗黙のデフォルトとなるべく同じにするためのタレ

[mysqld]sql_mode= NO_ENGINE_SUBSTITUTIONsecure_file_priv= ""binlog_format= STATEMENTinnodb_buffer_pool_dump_at_shutdown= 0innodb_buffer_pool_load_at_startup= 0innodb_buffer_pool_dump_pct= 100loose-default_password_lifetime= 0### Remove log_warnings!!loose-log_error_verbosity= 3loose-log_timestamps= SYSTEMloose-internal_tmp_disk_storage_engine= MyISAMloose-show_compatibility_56= ON

65/74

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

秘伝のタレ以外

16桁ハッシュおとなしく41桁ハッシュに更新を

mysql.user.passwordスクリプトはバージョン判定を

validate̲passwordプラグインDo_you_love_MySQL57? で乗り切ってUNINSTALL PLUGIN

validate_password

66/74

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

全部知ってた⼈︖

67/74

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

⽇本語の5.7の情報はそう多くない

68/74

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

こんな状態で最初のMySQLが5.7だったら

69/74

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

⼼が⿊くなっちゃう

©Yappo70/74

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

このトークを聞いた⼈は

71/74

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

このトークを聞いていない⼈に

72/74

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

MySQL 5.7の罠をひとつでも伝えてあげてください

73/74

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

よろしくおねがいします :)

https://vicky2183.wordpress.com/2010/05/14/postgresql-vs-mysql/

74/74