Weitere ähnliche Inhalte
Ähnlich wie MySQL 5.7 & 最新開発状況 @ オープンソースカンファレンス20
Ähnlich wie MySQL 5.7 & 最新開発状況 @ オープンソースカンファレンス20 (20)
Mehr von Ryusuke Kajiyama
Mehr von Ryusuke Kajiyama (10)
MySQL 5.7 & 最新開発状況 @ オープンソースカンファレンス20
- 1. Copyright
©
2015,
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
MYSQL
5.7
&
最新情報
Ryusuke
Kajiyama
/
梶山隆輔
/
@RKajiyama
MySQL
Sales
ConsulIng
Senior
Manager,
Asia
Pacific
&
Japan
The
State
of
the
Dolphin
- 2. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
以下の事項は、弊社の⼀一般的な製品の⽅方向性に関する概要を説明するものです。
また、情報提供を唯⼀一の⽬目的とするものであり、いかなる契約にも組み込むことはできません。
以下の事項は、マテリアルやコード、機能を提供することをコミットメントするものではない為
、購買決定を⾏行行う際の判断材料料になさらないで下さい。
オラクル製品に関して記載されている機能の開発、リリースおよび時期については、
弊社の裁量量により決定されます。
SAFE
HARBOR
STATEMENT
2
- 3. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
The
world's
most
popular
open
source
database
世界で最も普及しているオープンソース データベース
3
- 4. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
4
20
15
10
5
A
Year
of
Anniversaries!
- 5. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
5
20
MySQL公開から20年
15
日本MySQLユーザ会ドメイン登録から15年
10
オラクルによるInnobase買収から10年
5
オラクルによるサン買収から5年
A
Year
of
Anniversaries!
- 6. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
Key
announcements
in
Jan-‐Apr
2015
MySQL
Cluster
7.4
GA
• 200
Million
NoSQL
Reads/
Sec
• 2.5M
SQL
Ops/Sec
• 50%
Faster
Reads
• 40%
Faster
Mixed
• 5X
Faster
Maintenance
Ops
MySQL
Enterprise
Firewall
• Real
Time
ProtecIon
• Blocks
SQL
InjecIon
Abacks
• Block
Suspicious
Traffic
• Learns
White
List
• Transparent
MySQL
5.7
RC
• 2
X
Faster
than
MySQL
5.6
• New
OpImizer
Cost
Model
• ReplicaIon
Improvements
• InnoDB
FTS
CJK
Support
6
- 8. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
• MySQL製品のシンプルで便利なインス
トール&アップグレード方法を提供
• 下記のディストリビューション向け
– Oracle,
Red
Hat,
CentOS
– Fedora
– Ubuntu,
Debian
• まもなく提供開始予定
– SUSE
– 構成済みコンテナ
– 利用者の多いDevOpsデプロイツールのサ
ポート
• 下記の最新リリースを含む
– MySQL
Database
– MySQL
Workbench
– MySQL
Connector/ODBC
– MySQL
Connector/Python
– MySQL
Connector/NET
– MySQL
UIliIes
8
MySQLコミュニティレポジトリ:
Yum,
APT,
NuGET
- 9. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
GitHubへのMySQLソースコードの掲載
• MySQL開発チームのGit
– 各ディストリビューションにてより迅速、柔軟に
– 優れたツールの利用が可能に
– 幅広くいコミュニティとの交流
• GitHub
for
MySQL
Community
– コミュニティや関連プロジェクトへのより簡単かつ高速なソースコードの提供
– ベータ版のレポジトリ: hbps://github.com/mysql
– 詳細:
hbp://mysqlrelease.com
9
- 10. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
MySQL
5.6
リファレンスマニュアル日本語版
hCp://dev.mysql.com/doc/refman/5.6/ja/index.html
10
- 11. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
MySQL
Enterprise
EdiIon
11
- 12. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
MySQL
Enterprise
Backup
• オンラインバックアップ/リカバリ
• クラウドストレージへバックアップ
• 差分バックパック
&
ポイントイン
タイムリカバリ
MySQL
Enterprise
Security
• 外部認証との統合 (PAM,
Windows,
LDAP,
etc.)
• MySQL
Enterprise
Monitorで
のセキュリティアドバイザ
MySQL
Enterprise
EncrypPon
• AES256による対称暗号
• 公開鍵方式 /
非対称暗号
• 暗号学的ハッシュによる電子署
名、照合および妥当性確認
MySQL
Enterprise
Audit
• 接続、ログインおよびSQL実行
の記録
• ポリシーベースのフィルタリン
グおよびログ切り替え
• オラクルの監査仕様に準拠し
たXMLベースの出力
MySQL
Enterprise
EdiIonによるデータ保護
12
- 13. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
MySQL
Enterprise
Firewall
• SQL
InjecIon
ProtecIon
with
PosiIve
Security
Model
• Out
of
policy
database
transacIons
detected
and
blocked
• Logging
&
Analysis
Select *.* from employee where id=22!
Select *.* from employee where id=22 or 1=1!
Block
&
Log
✖
Allow
&
Log
✔
White
List
ApplicaPons
13
- 14. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
MySQL
Enterprise
Firewall
Details
• Firewall
operaIon
is
turned
on
at
a
per
user
level
• Per
User
States
are
– RECORDING
– PROTECTING
– OFF
14
- 15. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
What
happens
when
SQL
is
blocked?
• The
client
applicaIon
gets
an
ERROR
mysql> SELECT first_name, last_name FROM customer WHERE customer_id = 1 OR TRUE;
ERROR 1045 (28000): Statement was blocked by Firewall
mysql> SHOW DATABASES;
ERROR 1045 (28000): Statement was blocked by Firewall
mysql> TRUNCATE TABLE mysql.user;
ERROR 1045 (28000): Statement was blocked by Firewall
• Reported
to
the
Error
Log
• Increment
Counter
15
- 16. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
MySQL Enterprise Edition & Cluster CGEの評価
30日間トライアル
• Oracle Software Delivery Cloud
http://edelivery.oracle.com/
• 製品パックを選択:
“MySQL Database”
• 製品マニュアル
hbp://dev.mysql.com/doc/index-‐
enterprise.html
- 17. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
MySQL
Cluster
7.4
GA
17
- 18. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
MySQL
Cluster:
SQL
and
NoSQL
Hybrid
APIs
MySQL
Cluster
Data
Nodes
Apps
Apps
Apps
Apps
Apps
Apps
Apps
Apps
Apps
Apps
Apps
JPA
Cluster
JPA
PHP
Perl
Python
Ruby
JDBC
Cluster
J
JS
Memcached
MySQL
JNI
Node.JS
ndb_eng
NDB
API
(C++)
18
- 19. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
MySQL
Cluster
7.4
GA
• 200
Million
NoSQL
Reads/Sec
• 2.5M
SQL
Ops/Sec
• 50%
Faster
Reads
• 40%
Faster
Mixed
Performance
• AcIve-‐AcIve
Geographic
Redundancy
• Conflict
DetecIon/
ResoluIon
AcIve-‐AcIve
• 5X
Faster
Maintenance
Ops
• Detailed
ReporIng
Management
19
- 20. Copyright
©
2015,
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
MySQL
製品ロードマップ
- 21. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
21
4.0
全文検索/GIS
(MyISAM)
複数テーブルUPDATE/DELETE
組み込みライブラリ型サーバ
Oracle
MySQL
Sun
3.23
MyISAM
InnoDB
レプリケーション
5.1
プラグガブル・
ストレージエンジン・
アーキテクチャ
パーティショニング
タスクスケジューラ
5.6
memcached
API
UNDO表領域
Global
TransacIon
ID
マルチスレッドスレーブ
オンラインALTER
TABLE
トランスポータブル表領域
5.5
InnoDBがデフォルトに
準同期型レプリケーション
PERFORMANCE_SCHEMA
1.0-‐3.22以前
ストレージエンジン
(ISAM,
HEAP)
マルチスレッド
Windows対応/64bit対応
日本語文字コード
(SJIS/UJIS)
5.0
ストアドプロシージャ
ストアドファンクション
カーソル/トリガ/ビュー
XAトランザクション
INFORMATION_SCHEMA
4.1
Unicode対応
サブクエリ
CSV,
ARCHIVE
ndbcluster
1995
2000
2005
2010
2015
5.7+
新コストモデル オプティマイザ
ロスレス レプリケーション
マルチソース レプリケーション
グループ レプリケーション
全文検索CJK対応/GIS
(InnoDB)
セキュリティ強化
データディクショナリ
NoSQLオプション
- 22. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
• 性能
– ミューテックスの分割
– 参照専用トランザクション
– SSDへの最適化
– UNDO表領域
– サブクエリ高速化
– JSON
EXPLAIN
– Memcached
API
• 可用性
– Global
TransacIon
ID
– 自動フェールオーバー
– マルチスレッド・スレーブ
– Binlog
グループ・コミット
– 行ベース・レプリケーショ
ン最適化
– クラッシュセーフ・
スレーブ
– チェックサム
22
• 運用効率
– オンラインALTER
TABLE
– バッファプールのダンプ
およびインポート
– トランスポータブル
表領域
– セキュリティ強化
• パスワードポリシー
• SHA256
• パスワード失効
MySQL5.6での機能拡張
- 23. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
MySQL
5.7
RC
23
- 24. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
MySQL
5.7
Release
Candidate
Available!
24
InnoDBの機能拡張:
Online&Bulk
load
オペレーション高速化
レプリケーションの改善
(mulI-‐source,
mulI-‐threaded
slaves等)
新しいオプティマイザコストモデル:
greater
user
control
&
beber
query
performance
Performance
Schema改善
MySQL
SYS
Schema改善
パフォーマンス
&
拡張性
管理性
MySQL
5.6比2倍の速度
セキュリティの向上:
より安全な初期化,
セットアップ&管理
NEW!
JSONのSupport
(now
in
labs)
RC
And
many
more
new
features
and
enhancements...
hbp://mysqlserverteam.com/the-‐mysql-‐5-‐7-‐7-‐release-‐candidate-‐is-‐available/
- 25. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
0
100,000
200,000
300,000
400,000
500,000
600,000
700,000
8
16
32
64
128
256
512
1,024
Queries
per
Second
ConnecPons
MySQL
5.7:
Sysbench
Read
Only
(Point
Select)
MySQL
5.7
MySQL
5.6
MySQL
5.5
MySQL
5.7:
Sysbench
Benchmark
Intel(R)
Xeon(R)
CPU
E7-‐4860
x86_64
4
sockets
x
10
cores-‐HT
(80
CPU
threads)
2.3
GHz,
512
GB
RAM
Oracle
Linux
6.5
2x
Faster
than
MySQL
5.6
3x
Faster
than
MySQL
5.5
645,000
QPS
25
- 26. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
MySQL
5.7:
オプティマイザ
–
新コストモデル
SQL文の実行性能を向上
• 新しいコストモデルによりストレージエンジンでの処理を改善
–
より正確で動的なコスト見積もり
–
キーの参照、テーブルスキャン、レンジスキャン、インデックススキャンなど
• 様々な追加要素にてコストを設定可能
– ディスクI/O処理性能
– メモリ処理性能
• インデックスからレコードへの参照の見積もり改善
• コストの値はEXPLAINのJSON出力に含まれる
26
labs.mysql.com
- 27. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
MySQL
5.7:
OpImizer
-‐
JSON
EXPLAINへのコスト情報追加
• JSON
EXPLAINを拡張
– 出力可能なコスト情報を全て表示
– MySQL
WorkbenchのVisual
Explainにも表示
{
"query_block": {
"select_id": 1,
"cost_info": {
"query_cost": "200.40"
},
"table": {
"table_name": "nicer_but_slower_film_list",
"access_type": "ALL",
"rows_examined_per_scan": 992,
"rows_produced_per_join": 992,
"filtered": 100,
"cost_info": {
"read_cost": "2.00",
"eval_cost": "198.40",
"prefix_cost": "200.40",
"data_read_per_join": "852K"
},
"used_columns": [
"FID",
"title",
"description",
"category",
"price",
"length",
"rating",
"actors"
],
...
- 28. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
InnoDB
-‐
General
Tablespace
Support
28
A
general
tablespace
is
a
shared
tablespace,
similar
to
the
system
tablespace.
It
can
hold
mulIple
tables,
and
supports
all
table
row
formats.
General
tablespaces
can
also
be
created
in
a
locaIon
relaIve
to
or
independent
of
the
data
directory.
[USER01]>
CREATE
TABLESPACE
U_TABLESPACE01
ADD
DATAFILE
'/home/mysql/user_tablespace01.ibd'
Engine=InnoDB;
Query
OK,
0
rows
affected
(0.01
sec)
[USER01]>
CREATE
TABLESPACE
U_TABLESPACE02_8K
ADD
DATAFILE
'/home/mysql/user_tablespace02_8k.ibd'
FILE_BLOCK_SIZE
=
8192
Engine=InnoDB;
Query
OK,
0
rows
affected
(0.01
sec)
[USER01]>
CREATE
TABLE
`T_USER01`
(
>
`id`
int(11)
NOT
NULL
AUTO_INCREMENT,
`text`
varchar(100)
DEFAULT
NULL,
PRIMARY
KEY
(`id`)
>
)
TABLESPACE
=
U_TABLESPACE01
ENGINE=InnoDB
AUTO_INCREMENT=1
DEFAULT
CHARSET=u•8mb4;
Query
OK,
0
rows
affected
(0.01
sec)
[USER01]>
CREATE
TABLE
`T_USER02_8K`
(
>
`id`
int(11)
NOT
NULL
AUTO_INCREMENT,
`text`
varchar(100)
DEFAULT
NULL,
PRIMARY
KEY
(`id`)
>)
TABLESPACE
=
U_TABLESPACE02_8K
ENGINE=InnoDB
AUTO_INCREMENT=1
DEFAULT
CHARSET=u•8mb4
>
ROW_FORMAT=COMPRESSED
KEY_BLOCK_SIZE
=8;
Query
OK,
0
rows
affected
(0.00
sec)
参照:13.1.15
CREATE
TABLESPACE
Syntax
- 29. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
InnoDB
-‐
Temporary
Tables
• 一時テーブル専用の表領域を新規追加
– CREATE/DROPのパフォーマンスを改善
– DDLによる変更が短縮され,一部ディスクI/Oも削減
• DMLオペレーションの最適化
– No
REDO
logging,
no
change
buffering,
less
locking
• 内部的な新たなテンポラリーテーブル
– ACID/MVCCに対応した専用の一時テーブル
– 軽量且つ超高速で、中間のクエリの実行操作に最適
29
参照:14.11
InnoDB
Startup
OpPons
and
System
Variables
- 30. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
クエリ・リライト・プラグイン
• クエリの書き換え
(パースの前と後)
• パースした後での書き換えプラグイン
– アプリケーションを変更することなく問題のあるクエリを書き換
え
– ヒントの追加
– JOIN順の変更
• ORマッパーやサードパーティ製のアプリなどが発行する
問題となり得るクエリなどに対応
30
- 31. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
InnoDB
-‐
Full
Text
Search
(FTS)
日本語、中国語、韓国語をサポート
• N-‐gramによる全文検索インデックス
– 日本語、中国語、韓国語に対応
• mecabによる全文検索インデックス
– 日本語のみ対応
31
CREATE TABLE `N_DEMO`(
`FTS_N_ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(100) DEFAULT NULL,
PRIMARY KEY (`FTS_N_ID`),
FULLTEXT KEY `ngram_idx` (`title`) /*!50100 WITH PARSER `ngram` */
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE `M_DEMO` (
`FTS_M_ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(100) DEFAULT NULL,
PRIMARY KEY (`FTS_M_ID`),
FULLTEXT KEY `mecab_idx` (`title`) /*!50100 WITH PARSER `mecab` */
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
- 32. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
MySQL
5.7
RCにおける運用サポート機能
• Performance
Schema:
性能統計情報のさらなる追加
• オンライン処理においての機能拡張
• SYSLOGをLinux/Windows共にネイティブサーポート
• GIS機能をInnoDBの空間インデックスとBoost.Geometryの統合でサポート
• Security強化として,簡単で安全な初期設定と管理をサポート
32
• ReplicaPon
for
beber
scalability
and
availability
• Fabric
for
high
availability
and
sharding
- 33. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
MySQL
SYS
Schema
DB管理者、開発者や運用担当者を支援
• DB管理者や運用担当者の作業効率を改善
-‐
サーバの稼働状況、ユーザやホストの状況、主要な稼働指標
-‐
性能問題の発見、分析および改善
• 状況をより簡単に把握し理解するための複数のビュ
ー
-‐
IO量の高いファイルや処理、ロック、コストの高いSQL文
-‐
テーブル、インデックス、スキーマの統計
• 他のデータベースにおけるSYS類似機能:
-‐ Oracle
V$表
(動的パフォーマンスビュー)
-‐ Microso•
SQL
Server
DMV (Dynamic
Management
Views)
33
- 34. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
オンライン処理の拡張
34
• Resize
the
InnoDB
Buffer
Pool
online
– オンラインでのバッファーサイズのチューニング
– データベースの使用パターンの変化にリアルタイムで適応
• Separate
UNDO
tablespace
– 自動オンラインUNDOログ切り捨て(MySQL
5.7.5∼)
– UNDOログファイルサイズの増加を回避する事が可能
• Dynamic
configuraPon
– Making
exisIng
se‚ngs
dynamically
configurable
– As
a
design
principle
for
new
features
&
se‚ngs
– その他、幾つかのレプリケーションの設定変更等も
オンラインで変更可能になりました。
参照:14.4.8
TruncaIng
Undo
Logs
That
Reside
in
Undo
Tablespaces
- 35. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
• 独自コードの置き換え
– 空間図形情報の計算
– 空間図形情報の分析
• OGC(Open
GeospaIal
ConsorIum)準拠
– パフォーマンスの向上
• Boost.Geometryによる効果
– エキスパートとの交流
– 非常に活発なコミュニティ
• Boost.Geometryへのコントリビュートも
MySQL
5.7:
GIS
-‐
Boost.Geometryとの統合
35
例)ALTER
TABLE
テーブル名 add
SPATIAL
index(列名);
- 36. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
MySQL
5.7.7
セキュリティの強化
• mysql_install_dbコマンド非推奨
– mysqldの-‐-‐iniIalizeまたは-‐-‐iniIalize-‐insecureオプションで初期化
• CREATE
USER文とALTER
USER文にオプション追加
– SSL,
PASSWORD
EXPIRE,
ACCOUNT
[LOCK
|
UNLOCK]
• mysql.userテーブルのPassword列がauthenIcaIon_stringに変更に
• SET
PASSWORD文およびPASSWORD()関数が非推奨
– ALTER
USER文での設定を推奨
• ENCRYPT,
DES_ENCRYPT,
DES_DECRYPT関数非推奨
AES推奨
ユーザ管理とセキュリティ
mysqld
-‐-‐iniIalize
-‐-‐user=mysql
mysql_install_db
-‐-‐user=mysql
36
- 37. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
Security
-‐
EncrypPon,
Passwords,
InstallaPon
• AES
256
EncrypIon
(Default
in
MySQL
5.7
)
• パスワードローテーションポリシー
– インスタンス全体、ユーザー単位で設定可能
• Deployment:
デフォルトで安全に無人インストールを行う事が可能
– インストール時にランダムなパスワードを設定/匿名のアカウントを削除
– テストアカウント,
スキーマ(test),
デモファイルは作成されなくなりました
37
[
Global
ConfiguraPon
]
SET
GLOBAL
default_password_lifeIme
=
180;
[
Individual
user
accounts
]
ALTER
USER
joro@localhost
PASSWORD
EXPIRE
INTERVAL
90
DAY;
ALTER
USER
joro@localhost
PASSWORD
EXPIRE
DEFAULT;
ALTER
USER
joro@localhost
PASSWORD
EXPIRE
NEVER;
- 38. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
MySQL
5.7におけるレプリケーションの機能拡張
• MulI-‐Source
ReplicaIon
• Performance
enhancement
of
MulI-‐Thread
Slave
• gId_mode
is
now
dynamic
• Making
MySQL
Slave
ReplicaIon
Filters
Dynamic
• Preparing
implementaIon
of
Group
ReplicaIon
[Labs]
38
- 39. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
• 複数のマスターでの変更点を1台
のスレーブに集約
– 全てのシャードのデータを集約
– より柔軟なレプリケーション構成
– バックアップ処理を集約
• 準同期レプリケーション&改良
版
マルチスレッドスレーブ対応
• スレーブ側でのフィルタリング
が可能
MySQL
5.7:
MulI-‐Source
ReplicaIon
Binlog
Master
1
Binlog
Master
2
…
…
Binlog
Master
N
IO
1
Relay
1
Coordinator
W1
W2
…
WX
IO
2
Relay
2
Coordinator
W1
W2
…
WX
…
…
Coordinator
W1
W2
…
WX
IO
N
Relay
N
Coordinator
W1
W2
…
WX
Slave
39
- 40. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
• シングルスレッドのスレーブと比較し
て 5倍 のスループット
– アプリケーション側での変更不要
– バイナリログのグループコミットでの遅延
を伴う操作不要
• GTID
&
クラッシュセーフスレーブ利用
• Sysbench
OLTP
test
– 1,000万行
– SSD
/
48
core
HT
/
512
GB
RAM
MySQL
5.7:
スキーマ内マルチスレッドスレーブ
0
500
1000
1500
2000
2500
3000
3500
4000
4500
5000
0
4
16
25
50
100
200
Worker
Threads
Slave
TransacPons
per
Second
Baseline
50
clients
100
clients
150
clients
200
clients
40
-‐-‐slave-‐parallel-‐type
1.
DATABASE
:
(Default)
Use
the
db
parIIoned
MTS
(1
worker
per
database)
2.
LOGICAL_CLOCK:
Use
logical
clock
based
parallelizaIon
mode.
- 41. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
41
GTIDモード(gId_mode)レプリケーションへのオンライン移行
参照:Enabling
Global
TransacPon
IdenPfiers
Without
DownPme
in
MySQL
5.7.6
1.
Disable
all
write
operaIons.
2.
Wait
for
all
transacIons
to
propagate
from
the
master(s)
to
all
slaves.
3.
Stop
all
servers.
4.
On
each
server,
set
gId-‐mode=ON
in
the
configuraIon
file.
5.
Start
all
servers.
6.
Enable
write
operaIons.
It
is
sIll
possible
to
use
the
old,
offline
procedure.
The
procedure
is
as
follows:
Offline
procedure
Online
procedure
詳細:
17.1.5.2
Enabling
GTID
TransacIons
Online
17.1.5.4
Verifying
ReplicaIon
of
Anonymous
TransacIons
1
SET
@@GLOBAL.ENFORCE_GTID_CONSISTENCY
=
WARN;
2
SET
@@GLOBAL.ENFORCE_GTID_CONSISTENCY
=
ON;
3
SET
@@GLOBAL.GTID_MODE
=
OFF_PERMISSIVE;
4
SET
@@GLOBAL.GTID_MODE
=
ON_PERMISSIVE;
5
SHOW
STATUS
LIKE
'ONGOING_ANONYMOUS_TRANSACTION_COUNT';
6
SET
@@GLOBAL.GTID_MODE
=
ON;
7
On
each
server,
add
gId-‐mode=ON
to
my.cnf.
8
STOP
SLAVE
;
CHANGE
MASTER
TO
MASTER_AUTO_POSITION
=
1;
START
SLAVE;
各サーバーで以下のコマンドを実行
MySQL
ReplicaIonの設定や運用を簡素化する為に、GTIDモードのレプリケーションを利用する方法がありますが、既にGTID
モード以前のレプリケーションで運用されている場合は、稼働中の全てのサーバーを停止してからGTIDモードのレプリケー
ションへ移行する必要がありました。しかし、稼働中のサービスを停止して切り替える事は難しいのが現実です。
MySQL
5.7.6
以降のMySQLにアップグレードする事で、オンラインのままMySQLのレプリケーションを切り替える事が出来るよ
うになりました。
5.6.x
Standard
ReplicaIon
5.7.6~
Standard
ReplicaIon
5.7.6 ~
GTID
Mode
ReplicaIon
① ②
- 42. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
MySQL
Fabric
1.5:
高可用性
&
シャーディング
• OpenStack
との統合
• 高可用性
– サーバの監視;
スレーブの自動昇格と透過
的なレプリケーション切り替え
• シャーディングによる拡張性
– アプリケーションがシャードのキーを提供
• 整数型、日付型、文字列型
– レンジまたはハッシュ
– シャード再構成可能
• Fabric対応コネクタ利用:
Python,
Java,
PHP,
.NET,
C
(labs)
– プロキシを使わないので低レイテンシ、
ボトルネック無し
MySQL
Fabric
Connector
ApplicaIon
Read-‐slaves
mappings
SQL
HA
group
Read-‐slaves
HA
group
Connector
ApplicaIon
42
GA
- 43. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
43
MySQL
Slave
ReplicaIon
Filters
Dynamic
REPLICATE_DO_DB
REPLICATE_IGNORE_DB
REPLICATE_DO_TABLE
REPLICATE_IGNORE_TABLE
REPLICATE_WILD_DO_TABLE
REPLICATE_WILD_IGNORE_TABLE
REPLICATE_REWRITE_DB
MySQL-‐5.7.3の新しく導入された “CHANGE
REPLICATION
FILTER”
コマンドを利用する事で、
ユーザーは*slave*
側のレプリケーションフィルターを動的に、サーバーの再起動せずに適用
する事が可能です。
MySQL-‐5.7.3以前は、ユーザーはOpIonファイル(my.cnf)か、コマンドラインパラメータを使用
してフィルタリングルールを設定することが出来ますが、いずれの場合もMySQLサーバはフィ
ルタリングルールの変更を反映する為に再起動する必要があります。
The
following
slave
replicaIon
filters
can
be
changed
dynamically
using
this
command.
mysql>
STOP
SLAVE
SQL_THREAD;
Query
OK,
0
rows
affected
(0.05
sec)
mysql>
CHANGE
REPLICATION
FILTER
REPLICATE_DO_DB=(db1);
Query
OK,
0
rows
affected
(0.00
sec)
例)
フィルター設定手順
参照:MySQL-‐5.7.3-‐
Making
MySQL
Slave
ReplicaPon
Filters
Dynamic
- 44. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
MySQL
Labs
44
- 45. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
MySQL
Labs
• 先進的な機能や実験的な仕様のをいち早く公開
– コミュニティからのフィードバックをいただく
• 将来的にはMySQLサーバやMySQL
Cluster本体への統合を期待
– MySQL
5.6
memcached
API
– MySQL
Cluster
7.2
memcached
API
– MySQL
5.6
Performance
Schema
– MySQL
5.6
Intra-‐schema
MulI
Thread
Slave
– MySQL
5.6
Online
Alter
Table
– MySQL
5.7
MulI
Source
ReplicaIon
– MySQL
5.7
New
OpImizer
Cost
Model
- 46. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
• シェアード・ナッシング型”疑似”同期レプリケーション
• 更新はマルチ・マスタ型でどこでも可能
– 矛盾の検知と解決(トランザクションのロールバック
– “OpImisIc
State
Machine”
レプリケーション
• グループメンバーの管理と障害検知を自動化
– サーバのフェールオーバー不要
– 構成の拡張/縮小の柔軟性
– 単一障害点無し
– 自動再構成
• 既存構成との統合
– InnoDB
– GTIDベースのレプリケーション
– PERFORMANCE_SCHEMA
MySQL
5.7:
グループレプリケーション
ApplicaIon
MySQL
Masters
ReplicaIon
Plugin
API
MySQL
Server
Group
Comms
(Corosync)
46
labs.mysql.com
- 47. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
Early
Access
Feature
(EAF):
Data
DicIonary
Replacing
the
FRMs
• A
single
repository
for
database
object
metadata
– InnoDB
tables
replace
.frm,
.trg,
.trn,
.par
files
• Atomic
&
crash-‐safe
operaIons
today
–
TransacIonal
in
the
future
• Makes
adding
new
features
much
easier
• Eliminates
complexity,
resolves
bugs
• Improves
performance
• Leverages
InnoDB
strengths
47
- 48. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
HTTP
Plugin
for
MySQL
The
SQL
endpoint
and
JSON
$ curl --user basic_auth_user:basic_auth_passwd
--url "http://127.0.0.1:8080/sql/myhttp/SELECT+name_first,+name_last+FROM
+names"
[
{
"meta":[
{"type":
253,"catalog":"def","database":"myhttp","table":"names","org_table":"names","colu
mn":"name_first","org_column":"name_first","charset":33,"length":120,"flags":
0,"decimals":0},
{"type":
253,"catalog":"def","database":"myhttp","table":"names","org_table":"names","colu
mn":"name_last","org_column":"name_last","charset":33,"length":120,"flags":
0,"decimals":0}
],
"data":[
["Scott","Tiger"],
["Bruce","Wayne"],
],
"status":[{"server_status":34,"warning_count":0}]
}
]
48
- 49. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
HTTP
Plugin
for
MySQL
• MySQLサーバへのHTTP(S)エンドポイントを提供するプラグイン
• 結果をUTF8でエンコードされたJSONフォーマットにシリアライズ
• 3種類のユーザエンドポイント
– SQL
– CRUD
-‐
Key-‐Value
– JSON
-‐
Document
• For
more
details;
hbp://www.slideshare.net/nixnutz/hbp-‐plugin-‐for-‐mysql-‐39598656
49
- 50. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
HTTP
Plugin
for
MySQL
–
エンドポイント
エンドポイント
SQL
CRUD
JSON
ドキュメント
URLプリフィックス
hbp[s]://server:port/sql/
hbp[s]://server:port/crud/
hbp[s]://server:port/doc/
データ操作
全SQL文利用可能
主キーによるCRUD
主キーによるCRUD
データ格納先
通常のテーブル
通常のテーブル
テーブルのJSON列*
SQL文利用可能
Yes
No
No
HTTPメソッド
GET
GET,
PUT.
DELETE
GET,
PUT.
DELETE
結果セットのメタデータ
Yes
No
Yes
トランザクション
Yes
Yes
Yes
文字コード
UTF-‐8
UTF-‐8
UTF-‐8
ベーシック認証
Yes
Yes
Yes
- 51. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
MySQL
Binlog
Events
従来の名称は Binlog
API
• バイナリログを読むためのC++ライブラリ
• マスタ上のバイナリログかファイルを直接読み込み
– 2タイプの"transport"
– TCP
Transport
&
File
Transport
• バイナリログの各イベントをデコード
– イベントをデコードするコードを含む
• イベントドリブンAPI
hbp://mysqlhighavailability.com/author/nehakumari/
51
- 52. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
MySQL
5.7:
JSON
• 参照が中心となる処理に最適化
• ネイティブJSONデータ型
– バイナリフォーマットで格納され、処理や格納効率の向上を図る
• ビルトインJSON関数群
– ドキュメントを効率的に検索、格納、更新、各種操作
– SQLでドキュメントのデータを簡単に操作
• Generated
Columns(生成列)を使ってドキュメントのインデックスを作成
– InnoDBはSTOREDとVIRTUALの各タイプのGenerated
Columnsを利用可能
– 関数インデックスに該当するインデックスを用意
• hbp://mysqlserverteam.com/json-‐labs-‐release-‐overview/
- 53. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
MySQL
5.7:
JSON
53
mysql> CREATE TABLE employees (data JSON);
Query OK, 0 rows affected (0,01 sec)
mysql> INSERT INTO employees VALUES ('{"id": 1, "name": "Jane"}');
Query OK, 1 row affected (0,00 sec)
mysql> INSERT INTO employees VALUES ('{"id": 2, "name": "Joe"}');
Query OK, 1 row affected (0,00 sec)
mysql> select * from employees;
+---------------------------+
| data |
+---------------------------+
| {"id": 1, "name": "Jane"} |
| {"id": 2, "name": "Joe"} |
+---------------------------+
2 rows in set (0,00 sec)
- 54. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
MySQL
5.7:
JSON
• Document
ValidaIon
– on
insert
only
• Efficient
Access
mysql> INSERT INTO employees VALUES ('some random text');
ERROR 3130 (22032): Invalid JSON text: "Expect a value here." at position 0 in
value (or column) 'some random text'.
mysql> select jsn_extract(data, '$.name') from employees;
+-----------------------------+
| jsn_extract(data, '$.name') |
+-----------------------------+
| "Jane" |
| "Joe" |
+-----------------------------+
2 rows in set (0,00 sec)
- 55. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
• jsn_array()
– Build
a
JSON
array
from
list
of
expressions
• jsn_object()
– Builds
JSON
objects
from
a
variable
length
list
of
key/value
pairs
• jsn_insert()
– Adds
'missing'
data
to
JSON
documents
• jsn_remove()
– Removes
abributes
from
exisIng
JSON
documents
• jsn_set()
– Sets
abributes
within
JSON
documents
• jsn_replace()
– Replaces
(but
doesn't
add)
abributes
within
JSON
documents
• jsn_append()
– Adds
a
value
to
the
end
of
an
array
• jsn_merge()
– Merges
two
arrays
• jsn_extract()
– Returns
a
value
nested
inside
of
a
JSON
document
55
JSON
FuncIons
for
CreaIng
&
ManipulaIng
JSON
Documents
- 56. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
• jsn_search()
– Search
for
values
within
JSON
documents
and
return
their
locaIons
• jsn_contains()
– Checks
for
a
specific
element
and
value
• jsn_contains_path()
– Determine
if
a
specific
element
is
present
in
a
document
in
a
specific
posiIon
• jsn_valid()
– Check
if
document
is
a
valid
JSON
document
• jsn_type()
– Find
the
type
of
a
value
within
a
document
• jsn_keys()
– Returns
arrays
of
the
key
names
for
the
JSON
documents
• jsn_length()
– Number
of
elements
in
JSON
document
• jsn_depth()
– Level
of
nesIng
in
JSON
document
• jsn_unquote()
– Helps
move
from
JSON
to
other
MySQL
types
• jsn_quote()
– Helps
move
from
other
MySQL
types
to
JSON
56
Query
and
Search
JSON
FuncIons
- 57. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
Generated
Columns
• Virtual
Generated
Column
– Generated
on
the
fly
when
the
column
is
read
– Can
be
indexed
• Stored
Generated
Column
– Generated
when
the
referenced
column
is
wriben
to
– Can
be
indexed
mysql> ALTER TABLE employees ADD name VARCHAR(100)
GENERATED ALWAYS AS(jsn_extract(info, '$.name')) STORED;
mysql> ALTER TABLE employees ADD INDEX(name);
hbp://mysqlserverteam.com/
57
Digging
into
your
Documents
labs.mysql.com
- 58. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
• コストやストレージを削減し、アプリ
ケーション開発を簡単に
– ドキュメント間でのJOIN
– ドキュメント間での外部キー制約
– 同一トランザクション内で複数のドキュ
メントの更新
• 全てのデータを活用可能に
– 単一のクエリ/トランザクションでドキュ
メント内のデータとデーブルのデータを
参照更新
58
また新しいドキュメントデータベースが増える?
- 59. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
5.6
MySQL
Server
–
GA
InnoDBの改良やオプティマイザの刷新による性能&拡張性向上
レプリケーションの可用性向上
&
NoSQLインタフェース追加
MySQL
Cluster
-‐
GA
秒間2億件のNoSQL処理、秒間200万件のSQL処理
リカバリや再起動時間の短縮
7.4
5.7
MySQL
Server
–
RC
リファクタリング
&
各機能のプラグイン化による性能と信頼性の向上
JSONやGroup
ReplicaPonなどクラウド環境での要件への対応
59
- 60. Copyright
©
2015
Oracle
and/or
its
affiliates.
All
rights
reserved.
|
The
world's
most
popular
open
source
database
世界で最も普及しているオープンソース データベース
60