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

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

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

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

Avatar for kamedono

kamedono

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を使う ◦ 英語もちゃんと確認する