MySQL 8.0で憶えておいてほしいこと

37
MySQL 8.0で憶えておいてほしいこ Please remember them when you use MySQL 8.0 2017/10/23 yoku0825 MyNA(日本MySQLユーザ会)201710

Transcript of MySQL 8.0で憶えておいてほしいこと

Page 1: MySQL 8.0で憶えておいてほしいこと

MySQL 8.0で憶えておいてほしいこと

Please remember them when you use MySQL 8.02017/10/23

yoku0825MyNA(日本MySQLユーザ会)会 2017年10月

Page 2: MySQL 8.0で憶えておいてほしいこと

約2年前About 2 years ago.

1/36

Page 3: MySQL 8.0で憶えておいてほしいこと

default_password_lifetime

= 360 ( < 5.7.11 )

2/36

Page 4: MySQL 8.0で憶えておいてほしいこと

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

されるMySQL account will lock after

360 days during last password changed

3/36

Page 5: MySQL 8.0で憶えておいてほしいこと

アップグレードから

After upgrade to 5.7,

4/36

Page 6: MySQL 8.0で憶えておいてほしいこと

360日後に襲ってくる

After 360 days,5/36

Page 7: MySQL 8.0で憶えておいてほしいこと

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

We dies suddenly!6/36

Page 8: MySQL 8.0で憶えておいてほしいこと

default_password_lifetime = 360 ( < 5.7.11 )

もう直ってる(?)から気にしなくても大丈夫ですよThis had been changed to 0, no problem‐

MySQL Bugs: #77277: default_password_lifetime should be set 0 as implicit default value

Thank you Morgan and MySQL Server Team!‐

7/36

Page 9: MySQL 8.0で憶えておいてほしいこと

MySQL 8.0で憶えておいてほしいことPlease remember them

when you use MySQL 8.0(For Japanese)

8/36

Page 10: MySQL 8.0で憶えておいてほしいこと

\こんばんわ/

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

生息域Twitter: @yoku0825‐Blog: 日々の覚書‐MyNA ML: 日本MySQLユーザ会‐MySQL Casual: Slack‐

9/36

Page 11: MySQL 8.0で憶えておいてほしいこと

「kamipoのハハ=パパ問題」を知ってい

ますか?Do you know “kamipo’s Mother‐Father Issue” ?

10/36

Page 12: MySQL 8.0で憶えておいてほしいこと

kamipoのハハ=パパ問題kamipo’s Mother‐Father Issue

mysql> SELECT * FROM families;+----+-----------+--------------+| id | name | relationship |+----+-----------+--------------+| 1 | ユイ | 本人 || 2 | キリト | パパ || 3 | アスナ | ハハ |+----+-----------+--------------+

11/36

Page 13: MySQL 8.0で憶えておいてほしいこと

kamipoのハハ=パパ問題kamipo’s Mother‐Father Issue

SELECT * FROM families WHERE relationship = 'パパ';+----+-----------+--------------+| id | name | relationship |+----+-----------+--------------+| 2 | キリト | パパ || 3 | アスナ | ハハ |+----+-----------+--------------+

12/36

Page 14: MySQL 8.0で憶えておいてほしいこと

kamipoのハハ=パパ問題kamipo’s Mother‐Father Issue

元々はActiveRecordでは明示的に照合順序を指定しない場合にcharset utf8で照合順序 utf8_unicode_ci にしてしまってハハ=パパになる

Originally, this issue causes the default collation in ActiveRecord when using charset utf8 was utf8_unicode_ci.

UNICODEの仕様による 問題の派生This is caused by UCA 4.0.0, same as Sushi-Beer Issue‐

ActiveRecordでデフォルトの照合順序を変更する

13/36

Page 15: MySQL 8.0で憶えておいてほしいこと

MySQL 8.0.1

The default value of the character_set_server and character_set_database system variables has changed from latin1 to utf8mb4.The default value of the collation_server and collation_database system variables has changed from latin1_swedish_ci to utf8mb4_0900_ai_ci .MySQL :: MySQL 8.0 Release Notes :: Changes in MySQL 8.0.1 (2017-04-10, Development Milestone)

14/36

Page 16: MySQL 8.0で憶えておいてほしいこと

utf8mb4_0900_ai_ci

0900 .. Unicode Collation Algorithm 9.0.0ベースBased on UCA 9.0.0‐

ai .. アクセントインセンシティブAccent insensitive‐

ci .. 大文字小文字を区別しないCase insensitive‐

15/36

Page 17: MySQL 8.0で憶えておいてほしいこと

utf8mb4_0900_ai_ci

ハ と パ .. アクセントの違い(らしい)よ と ょ .. ケースの違い(らしい)

と .. 食べたいM と M .. 何の違いだか二重の意味でよくわからない

16/36

Page 18: MySQL 8.0で憶えておいてほしいこと

utf8mb4_0900_ai_ci

デフォルトではハハ=パパになるMother = Father is TRUE by default.‐

病院も美容院になるHospital = Beauty parior is TRUE, too.‐ = ではなくなった

= is FALSE, this is correct.‐

MySQL = MySQL(某WEBメディアにやさしい)MySQL = MySQL is TRUE‐

17/36

Page 20: MySQL 8.0で憶えておいてほしいこと

そんな我々を救うために(?)日本語用の照合順序が新設された

Collation for Japanese language has been impremented.

utf8mb4_ja_0900_as_cs is the first Japanese language-specific collation available for Unicode in MySQL.

MySQL :: MySQL 8.0 Release Notes :: Changes in MySQL 8.0.1 (2017-04-10, Development Milestone)

19/36

Page 21: MySQL 8.0で憶えておいてほしいこと

utf8mb4_ja_0900_as_cs

ja .. 日本語用For Japanese language‐

0900 .. Unicode Collation Algorithm 9.0.0ベースBased on UCA 9.0.0‐

as .. アクセントセンシティブAccent sensitive‐

cs .. 大文字小文字を区別するCase sensitive‐

20/36

Page 22: MySQL 8.0で憶えておいてほしいこと

utf8mb4_ja_0900_as_cs_ks

ja .. 日本語用For Japanese language‐

0900 .. Unicode Collation Algorithm 9.0.0ベースBased on UCA 9.0.0‐

as .. アクセントセンシティブAccent sensitive‐

cs .. 大文字小文字を区別するCase sensitive‐

ks .. ひらがなとカタカナを区別するKana sensitive‐

21/36

Page 26: MySQL 8.0で憶えておいてほしいこと

というわけで秘伝のタレに追加しておいてくだしあPlease put following lines into your my.cnf.

### デフォルトといっしょcharacter_set_server = utf8mb4

### ハ = は をしたい場合は as_cs, そうでなければbincollation_server = utf8mb4_ja_0900_as_cs#collation_server = utf8mb4_bin

25/36

Page 27: MySQL 8.0で憶えておいてほしいこと

これはデバッグビルドでの比較なので数値自体はアテにしない

”=” Benchmarkhttps://gist.github.com/yoku0825/5cf3917322d27134c56ca017baaf6321

“ORDER BY” Benchmarkhttps://gist.github.com/yoku0825/63cd4ff7f240131b41d34c820a455858

必要に応じて各自でベンチを!Evaluate for your production by yourself‐

26/36

Page 28: MySQL 8.0で憶えておいてほしいこと

デフォルトでONになったパラメーターON by default

log_bin まあこれは知ってりゃ問題ないか

log_slave_updates スレーブの容量に注意

explicit_defaults_for_timestamp TIMESTAMP型のON UPDATE TIMESTAMPの動作が変わる

event_scheduler 変なバックグラウンドスレッドが浮くけど気にしないで

innodb_undo_log_truncate これのトリムで重くなる…可能性もある(どれくらいでへたれるのか未検証)

27/36

Page 29: MySQL 8.0で憶えておいてほしいこと

なくなったパラメーターRemoved parameters

my.cnfに残ってると Unknown variable って言われるので消しておきましょう

innodb_file_format Barracuda固定

innodb_large_prefix ON固定

ignore_db_dir データディクショナリーがファイルベースからInnoDBに変更

query_cache_* ついになくなったんじゃよ

28/36

Page 30: MySQL 8.0で憶えておいてほしいこと

変更されたパラメーターChanged parameters

innodb_dedicated_server InnoDBのパラメーターいくつかが自動サイジング

expire_logs_days=30 今までは0、binlog_expire_logs_secondsとは 足し算

innodb_undo_tablespaces=2 ただし再起動だけでサクッと再作成してくれる

innodb_autoinc_lock_mode=2 binlog_format=STATEMENTだとレプリケーション壊れる

local_infile=FALSE LOAD DATA LOCAL INFILEできない

master_info_repository=TABLE master.infoファイルができなくなる

relay_log_info_repository=TABLE relay_log.infoファイルができなくなる

symbolic_links シンボリックリンク使えない

29/36

Page 31: MySQL 8.0で憶えておいてほしいこと

その他思うところThe others which I had seen

“ROLE” が予約語になった“ROLE” becomes reserved word‐前、SonarQubeさんがこれで死んだ

My SonarQube raised error(1 years ago)‐

TempTable Storage Engineって紹介されてる?What is TempTable Storage Engine?‐internal_tmp_mem_storage_engine = TempTable(Default) or MEMORYってなってるけど

temptable_max_ram = 1Gって大きくない?

password_history は(今のところ)デフォルト0password_history is set to 0 (at least now)‐

30/36