【2024/03/15 09:19】
現在までの8.0~8.3の新機能/Removal/Deperecatedまとめ。8.4が出たらたぶん足す。
- https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html
- https://downloads.mysql.com/docs/refman-8.1-en.pdf
- https://downloads.mysql.com/docs/refman-8.2-en.pdf
- https://dev.mysql.com/doc/refman/8.3/en/mysql-nutshell.html
- 8.1と8.2は既にWEBからたどれずに Archive にいってることに注意(8.3も行くんじゃないかな)
What Is New in .. のページを軸にしているので細かいリリースノートは見てない。8.2で変わったのが8.3にもリストされていたり、8.1で変わったのは8.2にリストされていなかったり、たぶん直前のInnovation Releaseとの差だけ記載しているっぽいのでUNION DISTINCTしてある。
Enterprise限定機能はパス。記載基準は独断と偏見。
Version | Feature | Comment | |
---|---|---|---|
8.0 | New Data Dictionary(InnoDB) | 使おうと思っても嫌だと思っても選択肢はない | |
8.0 | Atomic DDL(クラッシュリカバリ可能DDL) | Good | |
8.0 | mysql_upgrade deprecated | 8.0.16とそれ以降, 特に影響ないはずだけどupgrade処理が走った直後はmysqld再起動推奨(これはmysql_upgrade時代も俺は推奨していた) | |
8.0 | Atomic CREATE USER / GRANT(クラッシュリカバリ可能) | 可もなく不可もなく… | |
8.0 | default_authentication_plugin=caching_sha2_password | 仕様を知らないと開発環境でハマるかも | |
8.0 | sha2_password deprecated | Connector/Jとかからつないでると試すだけ試そうとしてエラーログがうるさくなる | |
8.0 | ROLE | New, ..けど地雷は埋まってる | |
8.0 | deprecated SUPER priv | 以後、色々分割されてる | |
8.0 | partial_revokes | まあ便利だけどハマった | |
8.0 | password_history | 使ったことない | |
8.0 | ALTER INSTANCE RELOAD TLS | 使ったことない | |
8.0 | Support TLS1.3 | 8.0.16とそれ以降, ただしリンクされてるOpenSSLのバージョンによる | |
8.0 | Remove TLS1, TLS1.1 | 8.0.28とそれ以降 | |
8.0 | Add Resource Group | 自分でSETしないといけなくて使いにくい | |
8.0 | default_table_encryption | Good | |
8.0 | auto_incrementの値の永続化 | 5.7までは最後の番号を歯抜けにしておくと再利用されちゃった | |
8.0 | innodb_memcachedがmgetサポート | 誰が喜ぶのか謎 | |
8.0 | deprecated innodb_memcached | ↑とこれが一緒にリストされているのが8.0っぽい | |
8.0 | innodb_deadlock_detect=OFFで高負荷環境のCPUがマシになることも | ただしデッドロック検出エラーがなくなるのでinnodb_lock_wait_timeoutで制御が必要 | |
8.0 | InnoDB Temporary Tableがibtmp1から*.ibtファイルに(8.0.13とそれ以降) | これで「あふれたら必ず再起動」ではなくなった | |
8.0 | REDOログ, UNDOログ, binlogの暗号化サポート | Good | |
8.0 | SELECT .. FOR {SHARE | UPDATE} SKIP LOCKED 追加 | Good |
8.0 | パーティション操作のいくつかがオンラインALTER TABLEに対応 | もともとADDとDROPしかしないのであんまり実感ない | |
8.0 | UNDOテーブルスペースの切り出しがデフォルト化 | innodb_undo_truncationもデフォルトON | |
8.0 | innodb_autoinc_lock_mode=2がデフォルト化 | binlog_format=MIXED以下の場合、旧デフォルトのinnodb_autoinc_lock_mode=1にしないとおかしなことになるかも | |
8.0 | innodb_dedicated_server support | 使ってない… | |
8.0 | .frm replaced .SDI files | 慣れれば見やすい、InnoDBの場合は ibd2sdiコマンドで見る | |
8.0 | innodb_directoriesサポート | .ibdファイルをdatadirの外に置けるようにはなったけどもうそういうケースってどれだけあるんだろう | |
8.0 | Log writer threadが分離 | よほどCPUが強いマシンでない限り性能が劣化するアレ。innodb_log_writer_threadでOFFにできるのは8.0.22とそれ以降 | |
8.0 | ALGORITHM=INSTANT, 第1弾(末尾のADDのみ)は8.0.12, 第2弾(どこでもADD + DROP)は8.0.29 | これをまたいだinplace-updateは鬼門 | |
8.0 | 暗黙のテンポラリテーブルに対するTempTableストレージエンジン | 結構パフォーマンス問題が大きく取り上げられた。tmptable_max_mmap導入の8.0.23で落ち着いたかと思いきや、8.0.28でtmp_table_sizeもこの動作に影響するように変更されてまたひと悶着 | |
8.0 | innodb_buffer_pool_in_core_file supported | Good | |
8.0 | Parallel Table Scan | MySQLがパラレルって言いだすとろくなことがない… | |
8.0 | Histgramのサポート | MySQLerはこれよりも複合インデックス作りがち | |
8.0 | Separated Doublewrite buffer | ibdata1から切り離された | |
8.0 | Transaction algorithm FIFO to CATS | あんまり差を感じたことはない | |
8.0 | ALTER INSTANCE DISABLE INNODB REDO_LOG | インポートはちょっぱや。ENABLEに戻さずにmysqldが異常終了すると起動しなくなる | |
8.0 | innodb_validate_tablepace_paths | 8.0.21とそれ以降で大量に.ibdを持っている環境だと起動が遅くなった。なんか今はパラレル化されたみたいでマシになった | |
8.0 | CREATE TABLE .. SELECT ..がGTID環境下でサポート | これができてgtid_mode=ONにできるようになった環境がある。Good | |
8.0 | Add innodb_doublewrite=DETECT_ONLY | 8.0.30とそれ以降 | |
8.0 | innodb_redo_log_capacity | 8.0.30とそれ以降。さよならib_logfile | |
8.0 | default_character_set latin1 to utf8mb4 | 日本人は困らないけど英語圏の人たちがパフォーマンスに悩まされたらしい | |
8.0 | Add JSON_TABLE | 自分で使うぶんには便利だけど、いざ誰かが使っているのを(パフォーマンス含め)トラブルシュートするのは結構大変 | |
8.0 | Add INVISIBLE INDEX | DROP INDEX前の切り戻しが楽 | |
8.0 | 降順INDEX | 昇順のままでもパフォーマンスはそんなに変わらない。ORDER BY .. ASC, .. DESCのケースはこれでしか対応できない | |
8.0 | Functional Index | 地味にオプティマイザがちゃんと選んでくれないケースが多発, 個人的にはgenerated column + indexでgenerated columnを指定する方が安定する | |
8.0 | 全体的なsemijionの改良 | 思ったより賢くなっててびっくり | |
8.0 | HASH JOIN | おとなしくインデックスを貼りましょう | |
8.0 | WITH (RECURSIVE) Clause | 見やすくなるけど別に速いとは言ってない | |
8.0 | Window Function | 速くなるとは言ってない | |
8.0 | ICU Regexp support | 便利になったけど遅くはなってるし地味に非互換 | |
8.0 | MY-xxxxx in error-log | ORA-xxxxx 的な感じになった | |
8.0 | LOCK INSTANCE FOR BACKUP | 知らずに使うと不思議な感じになるかも主にxtrabackupでお目にかかる | |
8.0 | JSON系関数が増えた。JSON_SCHEMA_VALIDでバリデーションすらできる | ~それならカラムに切り出した方が | |
8.0 | Multi-valued indexes | 1対多のインデックスが作れる。JSON型専用。鬼門 | |
8.0 | Clone Plugin | いいぞ便利だ | |
8.0 | EXPLAIN ANALYZE | いまいち情報が足りないと思ってしまうけど慣れてる人には便利らしい | |
8.0 | タイムゾーンオフセット記法。 2024-03-15:10:32:00+0900とか | UTCで入れてるとなじみがない | |
8.0 | SELECT .. INTO ..のINTOが変なところに入るとエラー | 一応非互換 | |
8.0 | オプティマイザヒントの拡充 | 便利なのが増えた | |
8.0 | Dual password | 地味に便利 | |
8.0 | optimizer_switchの拡充 | 賢くなったのはこれが一端 | |
8.0 | TIMESTAMPのなんちゃって64bit拡張 | timestampデータ型じゃなくてTIMESTAMP関数の話 | |
8.0 | expire_logs_days -> binlog_expire_logs_seconds | でも日付単位 24 60 * 60で設定しちゃう | |
8.0 | GIPK | 特定のケースで便利だったけどふとauto_incrementを足そうと思った時にぶつかる可能性あり | |
8.0 | INTERSECTとEXPECTのサポート | ついに!!! (速いくなるとは言ってない) | |
8.0 | performance_schema.error_log | 直近5MBぶんのエラーログがシェルなしでも確認可能 | |
8.0 | GRANT .. ON d% のワイルドカード非推奨 | partial_grantsと合わせると8.0時点でも死ぬ | |
8.0 | deprecate character_set_client_handshake | utf8系に統一してれば怖くない | |
8.0 | deprecated mysql_native_password | ここで非推奨ということはいつか消えるってことだ… | |
8.0 | FLOATまたはDOUBLE型でのauto_incrementの非推奨 | むしろこんなことできることを知っていた人が少ない気がする | |
8.0 | int系の桁数指定およびZEROFILL | まあ整数型をそういうことに使ってはいけない… | |
8.0 | SQL_CALC_FOUND_ROWS deprecated | ORDER BY .. LIMITの最適化を殺すやつ。意外と現役は多い気がする | |
8.0 | FLUSH HOSTSの非推奨 | TRUNCATE performance_schema.host_cacheに変えろ殿こと。skip_name_resolve環境ではそもそも関係なし | |
8.0 | deprecated relay_log_info_repository = FILE / master_info_repository = FILE | 既にFILEを使用する必要は全くないはず | |
8.0 | depreacted MYSQL_PWD env variable | mysqlコマンドラインクライアントのワーニングを黙らせるのに有効だった手順が一つ消えた。 .mylogin.cnf使えってさ | |
8.0 | deprecate default_authentication_plugin | 消えて指定できなくなるとは言ってないけど代わりにauthentication_policyというので指定しろと | |
8.0 | replica_parallel_type deprecated | いずれLOGICAL_CLOCKオンリーに | |
8.0 | replica_parallel_workers=0 deprecated | deprecatedになったのは=0だけ。変わらずシングルスレッドでやらせたいなら=1 | |
8.0 | innodb_log_files_in_group, innodb_log_file_size deprecated | innodb_redo_log_capacityに取って変わられた。お馴染みのオプションなのでちょっと寂しい | |
8.0 | 予約語が増えた | MySQL Shellのアップグレードチェッカー使いましょう。binlog_format=ROWだと「レプリケーションつないでるから更新クエリが通ることは保証される」ということはないです | |
8.0 | binlog_format deprecated | 今後はROWしか選ばせてくれないつもりらしい | |
8.0 | mysqlpump deprecated | mysqldumpじゃないよ、mysqlpumpだよ | |
8.0 | binlog_transaction_dependency_tracking | GroupReplication経験者は記憶にあるかもなアレ。WRITESETがデフォルトになるらしいけどCASCADEのFKと相性が悪いバグがある(直ったのかどうか不明) | |
8.0 | InnoDB系のinformation_schemaのテーブル名が変わってる | 自分でユーティリティーを作っているタイプの人がハマるやつ | |
8.0 | GRANT USAGE ON . TO ..でCREATE USERの代わりにする | できなくなった | |
8.0 | IDENTIFIED BY PASSWORD ‘*..’ | できなくなった。代替は IDENTIFIED WITH mysql_native_password AS ‘*..’ | |
8.0 | PASSWORD function removed | 代替は SELECT CONCAT(‘*’, UPPER(SHA1(UNHEX(SHA1(‘mypass’))))) | |
8.0 | Query cache removed | さよならクエリキャッシュ | |
8.0 | tx_isolation -> transaction_isolation | クライアントのバージョンによって死ぬことgああったやつ | |
8.0 | log_warnings -> log_error_verbosity | 5.7でお馴染みの | |
8.0 | GROUP BY c1 ASC | この謎記法が消えた | |
8.0 | EXPLAIN EXTENDED removed | デフォルトがEXTENDED相当になったので記法が消えた。実質困らないけど手癖で打ってエラることが | |
8.0 | GIS系の関数の名前がごっそり入れ替わる | 大変だったらしい | |
8.0 | —ssl removed | 代わりに —ssl-mode | |
8.0 | datadirの中の #mysql50# から始まるディレクトリ | 5.0とそれ以降に変な文字が入ったデータベースをCREATEすると出来上がる | |
8.0 | mysql_install_db | 代わりにmysqld —initialize(-insecure). 5.7で非推奨になったのが削除された | |
8.0 | SELECT .. INTO @val 記法の非推奨 | これからは SET @val := ..を使うらしい | |
8.1 | EXPLAIN format=JSON INTO @val | New | |
8.1 | mysql —comment made default | Little | |
8.1 | source_retry_count 86400 -> 10 | Little | |
8.1 | group_replication_set_as_primary vs DDL | Middle? | |
8.1 | Extend “version-specific comment” | - | |
8.1 | More logging during shutdown sequence | New | |
8.1 | SHOW PARSE_TREE statement | New | |
8.1 | tls_certificates_enforced_validation | New | |
8.1 | Group Replication status variables added | New | |
8.1 | —some-option=NULL is prohibited | Little | |
8.2 | More logging startup/shutdown sequence | New | |
8.2 | optimizer_switch: hash_set_operations | New | |
8.2 | SET_USER_ID is devided to SET_ANY_DEFINER and ALLOW_NONEXISTENT_DEFINER | Little | |
8.2 | EXPLAIN FOR SCHEMA | New | |
8.2 | START REPLICA UNTIL SQL_AFTER_GTIDS in MultiThreadApplier | New | |
8.2 | mysqldump —output-as-version | New | |
8.2 | Remove WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS | Middle | |
8.2 | Remove expire_logs_days | Little | |
8.3 | SET gtid_next = | New | |
8.3 | Another EXPLAIN format, SET explain_json_format_version = 2 | New | |
8.3 | Default binlog_transaction_dependency_tracking = WRITESET | Middle | |
8.3 | SHOW STATUS LIKE ‘Deprecated_use_i_s_processlist%’ | New | |
8.3 | Incompatible changes in libmysqlclient.so | High | |
8.3 | Remove FLUSH HOSTS | Little | |
8.3 | Remove slave_rows_search_algorithms, relay_log_info_file, relay_log_info_repository, master_info_file, master_info_repository | Little | |
8.3 | Remove group_replication_ip_whitelist | Little | |
8.3 | Remove skip_host_cache | Little | |
8.3 | Remove skip_character_set_client_handshake | Middle? | |
8.3 | Unsupport binlog_format=MIXED vs binlog_transaction_dependency_tracking=WRITESET | Middle? |