Upgrade to Pro — share decks privately, control downloads, hide ads and more …

MySQL8.0にしてみたかったはなし

 MySQL8.0にしてみたかったはなし

Avatar for Higaki Toshiki

Higaki Toshiki

May 24, 2019
Tweet

Other Decks in Programming

Transcript

  1. 自己紹介 • 名前 : 檜垣俊希 • 職種 : エンジニア(Perl書いてます) •

    趣味 : キーボード作り・同人技術本書いたり • Twitter : @kamemaim
  2. 環境のはなし • どこにあるの? ◦ RDS ◦ 9割RDSのはなし • バージョンは? ◦

    MySQL5.6 • サーバの数は? ◦ MasterとSlave一台ずつ • なんでやるの? ◦ Window関数使ってみたかったから ◦ バージョン上げて置くのも大事だよね
  3. 何があったか • メールが届く ◦ We noticed that your RDS MySQL

    'インスタンス名' could not be patched to MySQL 8.0.15 The upgrade procedure is getting this error: Table rebuild required. Please do "ALTER TABLE `テーブル名` FORCE" or dump/reload to fix it! …...As a consequence, we have canceled your patch to prevent extended downtime on your database, and restored your database to its original state before the patch was attempted. • 訳 ◦ MySQL 8.0.15のパッチを適用できないぞ。アップグレード手順でこのエラーが 発生したぞ。ので、データベースのダウンタイムが長くならないようにパッチを キャンセルして、パッチを適用する前にデータベースを元の状態に復元して やったぜ!
  4. 原因 • 新DATETIME型 ◦ 5.6から小数秒の指定ができるようになったアレ ◦ 旧DATETIME型のカラムがあった • やったこと ◦

    ALTER TABLE `テーブル名` FORCE ▪ テーブルを再構築 ▪ データが多いと時間がかかるので注意 ◦ スペック向上 ▪ 実はこれだけでうまく行く
  5. 調査① • ログファイル ◦ デフォルトでテーブルに吐く ▪ ‍♂ ◦ 保存先が違う ▪

    show variables like '%dir%' ▪ slave_load_tmpdir がtmpに向いている • 再起動->変化なし ▪ ‍♂
  6. 調査② • 各テーブルの容量確認 ◦ バージョン違いで容量圧迫? ◦ selects table_name , ROUND((DATA_LENGTH

    + INDEX_LENGTH) / 1024 / 1024) AS `Size (MB)` from TABLES order by (DATA_LENGTH + INDEX_LENGTH); ◦ むしろ減ってた!8.0すごい!‍♂
  7. 調査③ • 実はCloudWatchにないだけでbinlog取っている? ◦ show variables like 'log%' ▪ ONになっている

    ▪ パラーメータグループで設定不可 ◦ show binary logs ▪ 6380 rows in set (0.03 sec) ▪ なるほど?とってるのね? • やったこと ◦ パージ期間を減らす ◦ binlog_expire_logs_seconds ▪ デフォルト30日
  8. 何があったか • 5.7から8.0のアップグレードができない ◦ Database instance is in a state

    that cannot be upgraded: PreUpgrade checks failed: RDS detected incompatibilities upgrading to MySQL8.0.15. More details can be found in the PrePatchCompatbility.log file, accessible in the ‘log’ section below. • 訳 ◦ データベースインスタンスはアップグレードできない状態だぞ:アップグレード 前チェックに失敗したぞ:RDSはMySQL8.0.15へのアップグレードの非互換性 を検出したぞ。詳細については、下の「ログ」セクションにある PrePatchCompatability.logファイルを参照してどうぞ。
  9. 何があったか • RDS側で互換性チェックが走るようになった ◦ https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Upg radeDBInstance.MySQL.html ◦ 日本語はまだ更新されてなくて書いてない ◦ スキップはできない

    • PrePatchCompatibility.logの中身 3) Usage of utf8mb3 charset The following objects use the utf8mb3 character set. It is recommended to convert them to use utf8mb4 instead, for improved Unicode support. More Information: https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-utf8mb3.html ............ Errors: 0 Database Objects Affected: 158
  10. まとめ • とりあえず試してみよう ◦ DATETIME型は新しくする ◦ ‍‍・‍♂・ ◦ ログファイルを吐く場所を確認 •

    とりあえずテスト運用してみよう ◦ バイナリログ取りまくってないか確認 ◦ slowログも一応見る • とりあえずリリース前に時間とか測ろう ◦ utf8mb4を使う ◦ 英語もちゃんと確認する