#garagekidztweetz

id:garage-kid@76whizkidz のライフログ・ブログ!

#dbts2015 #C13 今から備える #MySQL 最新バージョン 5.7 のメモ

スポンサーリンク

db tech showcase 2015 初日、午後は二コマ目から再参戦、 ORACLE ACE の @yoku0825 氏のセッションに参加してきました。

スライドまわしが早くてついていくのが、結構つらかったですが、神速で資料を公開してくださるあたり、流石でした!

内容もさすがの人柱的な内容なので、はてなブックマークしている人たちは、感謝の意をこめて氏の Proposal を Affects me しよう!

資料がすでに公開されているので蛇足的ではあるけれども、以下、わたしの取ってきたメモも公開しておきます。

  • 概要:
    • 2015/04/08 ついにリリース候補版になったMySQL5.7.7。5.7は積極的を本番に入れたい理由、過去のバージョンからのアップグレードで気を付けることなど、本気の導入に向けたウォーミングアップセッション。
      Speaker: 田中 翼(yoku0825) (Tsubasa Tanaka) 氏 GMOメディア株式会社
  • MySQL といえば
    • 軽量高速バカ?
    • それは MyISAM
  • これからの MySQL
    • MyISAM の時代は随分前におわって
    • InnoDB 優遇時代
  • とある会社
    • GMO - ほとんど write intensive なので 5.7 がはまるんじゃないか
  • MySQL 5.7 について
    • まだ GA ではない
    • MariaDB は 1 年くらい behind しながらおっついてきてる感じ

最低限これだけ知ってほしい MySQL 5.7

  • 16 桁ハッシュのパスワードが廃止
    • 5.6 の時点で 16 桁のパスワードはつくれなくなっていた
      • 接続できなくなっている
      • だが trick を使えば接続はできていた
      • 5.7 では完全に接続できなくなった
  • mysql.user.password カラムが廃止になった
  • default_password_lifetime の設定
    • 暗黙のデフォルトで 360 に設定されている
    • password_last_changed から 360 日以上経過するとアカウントが接続できなくなる
    • 0 を指定すると無効になる
    • ALTER USER でも
    • Bug report をあげている
  • SET PASSWORD 構文の変更
    • PASSWORD 関数は無効に syntax error
  • SHOW GRANTS の出力結果
    • パスワードハッシュの値が出力されなくなった
  • IDENTIFIED BY まわりの変更
    • 構文の変更
    • いまのところは Warning を出してくれる
  • sql_mode の変更
    そもそもなんでこんなのできちゃったんだ、の類がエラーになるようになっている
    • sql_mode の default
    • STRICT_TRANS_TABLES
    • ERROR_FOR_DIVISION_BY_ZERO
    • NO_ZERO_IN_DATE
    • ONLY_FULL_GROUP_BY
    • 誰得 ANY_VALUE 関数
    • NO_AUTO_CREATE_USER
  • 5.6 以降なら performance_schema.events_statement_history を有効にすればアプリが握りつぶしている warning も把握できる
  • log_error_verbosity と log_warnings の間の中途半端な状態
    • MySQL の conf は後勝ち
    • my.cnf から古い log_warnings の設定は消しておくべき
  • 暗黙、明示のテンポラリテーブルに InnoDB が使われるように
    • 詳細は資料
    • 一度容量を確保してしまうと mysqld を再起動するまで ibtmp1 は大きくなったままに注意
      • あふれると tmp テーブルをつくれない
      • 再起動しないと ibtmp1 は大きくなったまま
        • default で auto extended しているのがダメ
        • ストレージエンジンを MyISAM にする手もある
  • log_timestamps 変数にようるログ上のタイムスタンプの UTC 化
    • slow.log も general.log も、、、、
    • SET GLOBAL するなどのワークアラウンドが必要

一応知ってほしい MySQL 5.7

  • biglog_format の暗黙のデフォルトが STATEMENT が ROW に
    • binlog 容量増加
    • mysqlbinlog -vv が読みにくい
    • slave 側で trigger 実行されない
  • Install まわり
    • mysql_install_db
      • /bin の下に移動されてる
      • 5.7 で C++ になった
        • バイナリになったのに deprecated になった
        • 5.7.6 以降では mysqld -initialize をつかう
      • 初期作成ユーザ
        • root@localhost のみがつくられるように
        • Win かつ -skip-name-resolve 環境では注意
    • mysqld -initialize
      • 初期パスワードは標準エラー出力にはく
      • log-error が設定されているなら標準エラー出力がそっちむく
  • sync_binlog のデフォルトが 0 => 1 に
    • InnoDB のクラッシュリカバリで binlog を使う箇所がある
    • sync_binlog=0 は危険な設定に
    • binlog への書き出しが失敗した際に、一貫性を保つために mysqld をダウンさせるオプションが有効になっている
  • InnoDB バッファプールの暖気がデフォルトで On (しかも 25%)
    • mysqld 起動直後に IO 大量発生
  • secure_file_priv の変更
    • select into outfile, load data infile の動作を制限
      • 指定されていなければユーザ権限で全てのファイルにアクセス可能
  • 廃止されたオプション
    • skip-innodb とか
    • thread_concurrency
      • Solaris 専用なんだぜ
    • Option の前方一致補完がなくなった
  • スローログ関連のしきい値が大幅に変更される、かも

勝手に性能が良くなったりするのは本家に譲る

  • マルチトリガー
    • select trigger とか
  • generated column
  • mecab
  • multi source replication

ちょっと知っていると得する 5.7

  • GTID のオンライン有効化のサポート
    • OFF_PERMISSIVE と ON_PERMISSIVE が追加された (図が参考になる)
    • enforce_gtid_consistency の取りうる値が ON, OFF, WARN の 3 種類に
  • innodb_buffer_pool_size のオンライン変更も可能に
    • だが本来オンラインでやるようなものではない

Affects me しよう!

資料

あわせて読まれたい