MySQL 5.7には150を超える新機能がある。
MySQLのマニュアルはとてもいいものだが、少し長すぎる。これは、新機能の箇条書きリストだ。それぞれの機能について1つずつまとめるように頑張ってある。なので、 InnoDBのネイティブパーティショニング については、InnoDBの項かパーティショニングの項のどちらかにだけ載っている。
それか、yumかaptのリポジトリーからもインストール可能だ。
レプリケーション関連
- マルチソースレプリケーション(訳注: 1スレーブに複数マスターを設定可能になった) [ 1 ]
- オンラインでのGTIDの有効化 [ 1 2 3 ]
- 準同期レプリケーションの性能向上 [ 1 2 ]
- ロスレス準同期レプリケーション [ 1 2 ]
- 準同期レプリケーションでいくつのスレーブからACKが返ってくるまで待つかを指定できるように(訳注: 従来は1台で固定だった) [ 1 ]
- 同一スキーマ内での並列レプリケーション [ 1 ]
binlog_group_commit_sync_delay
及びbinlog_group_commit_sync_no_delay_count
オプションによるグループコミットのチューニング [ 1 2 ]- ノンブロッキング
SHOW SLAVE STATUS
[ 1 2 ] CHANGE REPLICATION FILTER
によるオンラインでのレプリケーションフィルター(訳注:replicate_do_*
,replicate_ignore_*
オプション相当) [ 1 ]- SQLスレッドを停止することなく発行できる
CHANGE MASTER TO
[ 1 ] - マルチスレッドスレーブのコミット順(シーケンス上の一貫性)の保証 [ 1 ]
- マルチスレッドスレーブの
slave_transaction_retries
オプションのサポート(訳注: 旧来はマルチスレッドスレーブ時はリトライしなかった) [ 1 ] WAIT_FOR_EXECUTED_GTID_SET
関数の追加 [ 1 2 ]- スレーブでのGTID最適化 [ 1 2 ]
log-slave-updates
が無効でもGTIDを有効にできるように変更- binlog有効時のXAのサポート [ 1 ]
- OKパケット内部にGTIDを埋め込むように変更 [ 1 ]
- マスターのBinlogダンプスレッドとユーザースレッドとの競合時の処理の向上 [ 1 2 ]
- Binlogダンプスレッドのメモリマネージメントの改良 [ 1 ]
- デフォルト値の変更:
binlog_format=ROW
- デフォルト値の変更:
sync_binlog=1
- デフォルト値の変更:
binlog_gtid_simple_recovery=1
- デフォルト値の変更:
binlog_error_action=ABORT_SERVER
- デフォルト値の変更:
slave_net_timeout=60
InnoDB関連
- オンラインでのバッファプールサイズ変更 [ 1 ]
- クラッシュリカバリーのパフォーマンス向上 [ 1 ]
- 読み込みしか行わないトランザクションのスケーラビリティー向上 [ 1 2 3 4 ]
- 読み書き両方を行うトランザクションのスケーラビリティー向上 [ 1 2 3 4 ]
- テンポラリーテーブルのための最適化 [ 1 2 3 4 5 ]
ALTER TABLE RENAME INDEX
がメタデータの変更のみで可能(訳注: オンラインALTER TABLEが可能) [ 1 ]VARCHAR
のサイズ変更がメタデータの変更のみで可能(訳注: オンラインALTER TABLEが可能、ただし変更前と変更後のサイズが256をまたがない場合に限る) [ 1 ]ALTER TABLE
のパフォーマンス向上 [ 1 ]- 複数のページクリーナースレッド(訳注: バッファプールのダーティーページを非同期にフラッシュするスレッド)を設定可能 [ 1 ]
- バッファプールのフラッシングの最適化 [ 1 ]
innodb_log_checksum_algorithm
オプションの追加 [ 1 ]- NUMAサポートの改善 [ 1 ]
- ジェネラルテーブルスペース(訳注: 任意のテーブルが任意のibdファイルに割り当て可能になる)のサポート [ 1 ]
- 透過的ページ圧縮のサポート [ 1 ]
- REDOログの'read-on-write'問題に対する
innodb_log_write_ahead_size
オプションの追加 [ 1 ] - 全文検索がフルテキストパーサープラグインをサポート [ 1 ]
- N-gram、MeCabフルテキストパーサーのサポート [ 1 2 ]
- 全文検索の最適化 [ 1 ]
- バッファプールダンプ(訳注: バッファプールウォームアップのためにページ番号を書き出す処理)に
innodb_buffer_pool_dump_pct
オプションを追加 [ 1 ] - ファイルシステムがアトミックライトをサポートしている場合(Fusion-ioがよく知られている)ダブルライトバッファを無効化する処理 [ 1 ]
- ページフィルファクター(訳注: ページの何%が削除された時に、隣のページとマージされるかの閾値)が設定可能に [ 1 ]
- 32K, 64Kのページサイズのサポート [ 1 ]
- UNDOログのオンラインでの縮小 [ 1 ]
- メタデータ上の
Update_time
が正しく記録されるように変更 [ 1 ] TRUNCATE TABLE
がアトミックな操作に変更 [ 1 ]- Memcached APIのパフォーマンス向上 [ 1 ]
- Adaptive Hashのスケーラビリティーを向上 [ 1 ]
information_schema.files
がInnoDBをサポート(訳注: 旧来はNDBのみ) [ 1 ]- 古いInnoDB Monitorを有効化するためのテーブルが削除(訳注:
CREATE TABLE innodb_monitor ( a int ) Engine= InnoDB
が廃止)され、グローバル変数で有効/無効を切り替えるように変更 - デフォルトのROW_FORMATが設定可能に [ 1 ]
- デフォルト値の変更:
innodb_file_format=Barracuda
- デフォルト値の変更:
innodb_large_prefix=1
- デフォルト値の変更:
innodb_page_cleaners=4
- デフォルト値の変更:
innodb_purge_threads=4
- デフォルト値の変更:
innodb_buffer_pool_dump_at_shutdown=1
- デフォルト値の変更:
innodb_buffer_pool_load_at_startup=1
- デフォルト値の変更:
innodb_buffer_pool_dump_pct=25
- デフォルト値の変更:
innodb_strict_mode=1
- デフォルト値の変更:
innodb_checksum_algorithm=crc32
- デフォルト値の変更:
innodb_default_row_format=DYNAMIC
オプティマイザー関連
- 実行計画の安定化のためのコストモデルオプティマイズ [ 1 2 3 4 ]
- グローバルまたはエンジン単位で設定可能なコスト値 [ 1 2 ]
- パーサーのリファクタと改良 [ 1 ]
EXPLAIN FOR CONNECTION
[ 1 ]UNION ALL
がテンポラリーテーブルを作成しなくなった [ 1 2 3 4 ]- ファイルソートがパックした値を利用して行われるようになった(訳注: 旧来はvarchar(255)は255文字分の領域をファイルソートで使っていたが、今後は本当に詰められている文字数分だけを利用する) [ 1 ]
FROM
句のサブクエリーがビューと同じように扱われるようになった(訳注: 不要なマテリアライズを避けるようになった) [ 1 ]- 行コンストラクター(訳注: WHERE (a, b, c)= (1, 2, 3)のようなもののこと)を利用したクエリーの最適化 [ 1 2 ]
- コンディションフィルタリングのサポート [ 1 2 ]
EXPLAIN FORMAT=JSON
がコスト情報を表示するように [ 1 ]STORED
,VIRTUAL
な生成列のサポート(関数インデックス) [ 1- プリペアーステートメントの内部処理のリファクタと改良 [ 1 2 ]
- コメント構文
/*+ */
を使用したヒント句 [ 1 ] - サーバーサイドでクエリーの書き換えを行うAPIの追加 [ 1 ]
- 標準に近付けるため、
ONLY_FULL_GROUP_BY
を有効化 [ 1 ] - 文字コードgb18030のサポート [ 1 ]
- デフォルト値の変更:
internal_tmp_disk_storage_engine=INNODB
[ 1 ] - デフォルト値の変更:
eq_range_index_dive_limit=200
- デフォルト値の変更:
sql_mode=ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION
EXTENDED
,PARTITIONS
キーワードがEXPLAIN
の標準動作に
セキュリティ関連
- ユーザー名の最大長が32文字に拡大 [ 1 ]
CREATE/DROP USER
ステートメント内でのIF [NOT] EXISTS
のサポート [ 1 ]- セキュアな接続(訳注: SSL接続)を強制するサーバーオプションの追加 [ 1 ]
- AESの複数キー長をサポート(訳注: 5.6.17にバックポート済み) [ 1 2 ]
- ユーザーアカウントの
LOCK/UNLOCK
をサポート [ 1 2 ] - パスワードのEXPIREポリシーを追加 [ 1 2 ]
- 強固なパスワードの強制
- インストール時(訳注: データベース初期化時)、
test
データベースを作成しなくなった - インストール時(訳注: データベース初期化時)、匿名ユーザーを作成しなくなった
- MySQL Firewallの追加(商用版、5.6にバックポートされている)
- インストール時(訳注: データベース初期化時)、ランダムパスワードを生成するようになった
ALTER USER
ステートメントの追加SET password=''
ステートメントがパスワードハッシュではなく生パスワードを要求するようになった(訳注: 旧来はSET PASSWORD = PASSWORD('..')
とPASSWORD関数を挟む必要があったが、PASSWORD関数を挟まずに直接パスワードを渡すようになった)- サーバーがデフォルトでSSL接続用の鍵を作成するようになった
- 安全でない
old_passwords
ハッシュ(訳注: 16桁ハッシュのパスワード)が削除された [ 1 ] - ストアドプログラムのためのログインできないユーザーを作成可能 [ 1 ]
mysql.user.password
がauthentication_string
にリネームされた (訳注: リネームではなく5.5からauthentication_stringカラムはあったが、今まで利用されていなかった)
Performance Schema関連
- クライアントの接続/切断フェーズにおけるオーバーヘッドの減少
- メモリー使用量の減少
- pfs_lockの改良
- テーブルのI/O統計がバッチ化され、性能が向上
- メモリー使用量に関するテーブルの追加
- ストアドプログラムに関する情報の追加
- レプリケーションスレーブに関する情報の追加
- メタデータロック(MDL)に関する情報の追加
- トランザクションに関する情報の追加
- プリペアドステートメントに関する情報の追加
- クエリーの進行状況に関する情報の追加
- SXロックとrw_lockに関する情報の追加
- スレッド単位のステータスとサーバー変数に関する情報の追加(訳注:
SHOW SESSION STATUS
,SHOW SESSION VARIABLES
相当) - デフォルト値の変更:
performance-schema-consumer-events_statements_history=ON
GIS関連
- InnoDBの空間インデックス対応 [ 1 ]
- GIS関数の名前の整理 [ 1 ]
- GISをリファクタし、Boost Geometoryを使うように変更 [ 1 ]
- ジオハッシュ関数のサポート [ 1 2 ]
- ジオJSON関数のサポート [ 1 2 ]
ST_Distance_Sphere
,ST_MakeEnvelope
,ST_IsValid
,ST_Validate
,ST_Simplify
,ST_Buffer
,ST_IsSimple
の追加 [ 1 2 ]
トリガー関連
- 1テーブル1イベントに複数のトリガーを設定可能 [ 1 ]
BEFORE
トリガーで非NULLな値を書き込む指定していた場合、NOT NULL
制約のあるカラムに対しNULLがINSERT/UPDATEで指定できた問題の修正 [ 1 ]
パーティション関連
- インデックスコンディションプッシュダウンのサポート
HANDLER
ステートメントのサポートALTER TABLE ... EXCHANGE PARTITION
ステートメントのWITHOUT VALIDATION
句のサポート- トランスポータブル表領域(訳注:
FLUSH TABLES .. FOR UPDATE
)のサポート - InnoDBのネイティブパーティショニングのサポート
SYSスキーマ関連 (MySQL 5.7からの新機能)
SYS
スキーマの標準バンドル [ 1 2 ]- Performance SchemaとInformation Schemaと関連付けられた、100の新しいビュー、21の新しいストアドファンクション、26の新しいストアドプロシージャ [ 1 ]
JSON関連 (MySQL 5.7からの新機能)
- データ型としてJSON型をサポート [ 1 ]
- JSON比較関数の追加
JSON_EXTRACT
と等価の短い演算子をサポート(filed->"json_path") [ 1 ]- JSONデータを作るための
JSON_ARRAY
,JSON_MERGE
,JSON_OBJECT
の追加 [ 1 ] - JSONデータを検索するための
JSON_CONTAINS
,JSON_CONTAINS_PATH
,JSON_EXTRACT
,JSON_KEYS
,JSON_SEARCH
の追加 [ 1 ] - JSONデータを更新するための
JSON_ARRAY_APPEND
,JSON_ARRAY_INSERT
,JSON_INSERT
,JSON_QUOTE
,JSON_REMOVE
,JSON_REPLACE
,JSON_UNSET
,JSON_UNQUOTE
の追加 [ 1 ] - JSONデータから値を返すための
JSON_DEPTH
,JSON_LENGTH
,JSON_TYPE
,JSON_VALID
の追加 [ 1 ]
クライアント関連
mysqlpump
ユーリティーの追加(訳注: mysql d umpではなくmysql p ump) [ 1 ]mysql
コマンドラインクライアントがCtrl + C
でステートメントバッファをクリアするように変更(訳注: 旧来はCtrl + C
でクライアントが終了していた)- mysqlbinlogに
rewrite-db
オプションが追加 - SSLのセットアップ用ユーティリティー
mysql_ssl_rsa_setup
の追加 [ 1 ] - mysqlbinlogのSSLサポート
- mysqlbinlogの
idempotent
オプションのサポート(訳注: http://dev.mysql.com/doc/refman/5.7/en/mysqlbinlog.html#option_mysqlbinlog_idempotent) --ssl
オプションがSSL接続を強制するように変更(訳注: 旧来はSSL接続を試み、SSL接続できなかった場合は通常接続にフォールバックした)- innochecksumの機能拡張
- いくつかの古いコマンドラインユーティリティーの削除 [ 1 ]
- Perlで実装されていたいくつかのコマンドがC++で再実装
- クライアントサイドプロトコルトレースの追加
- コネクションをリセットするためのAPIの追加
libmysqlclient(訳注: クライアントライブラリー)関連
- エクスポートの制限されたいくつかの関数の追加
- pkg-configをサポート
_r
のシンボリックリンクの削除- .soのバージョンを18から20に変更
ビルド関連
- Solaris用バイナリーのコンパイラーをgccに変更
- Bison3を利用してコンパイルされるように変更
- 全てのプラットフォームでCMakeが使われるように
- 不必要なCMakeのチェック(と、不必要なマクロがソースコードから)削除
- gcc, clang, MS Studioによるビルドをサポート
その他
- サーバーへの新規接続スループットの向上 [ 1 ]
mysql_install_db
のmysqld --initialize
への置き換え- syslogのサポート [ 1 2 ]
- systemdのサポート
disabled_storage_engines
オプションによる利用不可能なストレージエンジンの設定SET GLOBAL offline_mode=1
[ 1 2 ]super_read_only
オプションの追加 [ 1 ]- トランザクションの境界値の検出
- サーバーバージョンのトークンとチェック
SELECT GET_LOCK()
が複数のロックを獲得できるように [ 1 2 ]- ステートメントの最大実行時間をグローバルまたはクエリー単位で指定可能 [ 1 2 ]
- コネクションIDのロールオーバーを効率化
- DTraceのサポート [ 1 ]
STRICT
モード時のIGNORE
句の一貫性の向上- いくつかのmysqlスキーマのテーブルがMyISAMからInnoDBに変更
- エラーログのフォーマットの一貫性の向上
- クエリーダイジェストの検出がperformance_schemaからサーバーコアに移動
- メタデータロックのスケーラビリティの向上
- エラーログの冗長モード管理を細分化
- Stacked Diagnostics Areaのサポート
- "SHUTDOWN"コマンド(訳注: SHUTDOWN ステートメント )のサポート
- アトミック性を確保するための独自実装のサポート廃止
- ユニークインデックスのプレフィックス指定をサーバー、ユーティリティーから削除
- ALTER IGNORE TABLEステートメントの廃止。互換性のため削除はされていない。
- INSERT DELAYEDステートメントの廃止。互換性のため削除はされていない。
- 古いsql-benchスクリプトの削除
- YEAR(2)データ型の廃止
- デフォルト値の変更:
log_warnings=2
- デフォルト値の変更:
table_open_cache_instances=1
このリストはMorgan Tockerによってまとめられた。 www.tocker.ca Github: morgo Twitter: morgo
(訳注: 翻訳は2015/10/20現在の内容を翻訳したものである。今後内容が変わる可能性がある) (訳注: オリジナル記事は Github で管理されており、 af1b65bc6660eb44273139f8718779b396bc7d71 までが記事に反映されている) (訳注: 訳注は yoku0825によってつけられている。間違いを見つけた場合は教えていただきたい)