[d37]mysqlの真のイノベーションはこれだ!mysql 5.7と「実験室」 by ryusuke...
TRANSCRIPT
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 1
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 2
MySQL 5.7&MySQL Labs
Sales Consulting Manager, JAPAC 梶山 隆輔 / Ryusuke Kajiyama
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 3
以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。また、情報提供を唯一の目的とするものであり、いかなる契約にも組み込むことはできません。以下の事項は、マテリアルやコード、機能を提供することをコミットメント(確約)するものではないため、購買決定を行う際の判断材料になさらないで下さい。オラクル製品に関して記載されている機能の開発、リリースおよび時期については、弊社の裁量により決定されます。
Oracleは、米国オラクル・コーポレーション及びその子会社、関連会社の米国及びその他の国における登録商標または商標です。他社名又は製品名は、それぞれ各社の商標である場合があります。
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 4
MySQL 5.5 MySQL Cluster 7.3
MySQL Enterprise Monitor 2.3 MySQL Enterprise Backup
Security Scalability HA Audit
MySQL 5.6 MySQL Workbench 6.0
M y S Q L U t i l i t i e s
M y S Q L A p p l i e r f o r
H a d o o p
MySQL Workbench 5.2 M y S Q L E n t e r p r i s e O r a c l e C e r t i f i c a t i o n s
MySQLのイノベーション
M y S Q L C l u s t e r M a n a g e r Windows installer & Tools
MySQL Cluster 7.2 MySQL Cluster 7.1
MySQL Migration Wizard
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 5
MySQL: Everywhere and Growing Platform of Choice for Next Generation Web, Cloud & Embedded Applications
World’s Most Popular
Open Source Database
Database Platform for
Next Gen Web Apps
Leading Database for
Web Applications
Leading Database in the Cloud
Integrated with Hadoop in majority of
Big Data platforms
#1 Linux Career IT skill: MySQL *
* Source: Linux Career IT Skills Watch update July 2013
Downloads & Sales Growth
Best of both Worlds SQL+NoSQL
LAMP + Python +Node.js + Go +...
Awards & Social Media Momentum
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 6
DMRs – Development Milestone Releases
リリース候補版の品質になった機能のみを含む
年に2-4回リリース
コミュニティでのテストや使用、フィードバックのため
機能拡張の加速
品質の改善
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 7
The Open Road to MySQL 5.6
Optimizer: MRR, ICP, File Sort
InnoDB: Split Kernel Mutex, MT Purge
Replication: Crash-Safe, Multi-Thread Slave, Checksums
Memcached API New P_S Partitioning Improvements
*Development Milestone Release
RC Nov 2012
DMR1* April 2011
DMR2 Oct 2011
Optimizer: BKA, New EXPLAIN, Traces
InnoDB: Dump/Restore Buffer Pool
More P_S
DMR3 Dec 2011
Optimizer: Sub-Queries
InnoDB: Full Text Index, Read-Only Optimizations
Condition Handling Fractional Seconds
DMR4 April 2012
Optimizer: JSON EXPLAIN, Sub-Queries
Replication: GTIDs
TIMESTAMP & DATESTAMP More P_S
DMR5 Aug 2012
InnoDB: TT, Online DDL, Memcached API
Replication: Binary Log Group Commit
Password Mgmt More Partitioning
New Server Defaults More Partitioning More GTID, TT
Predictable Releases for the MySQL Community, Allowing Feedback
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 8
MySQL 5.7 DMR 新機能
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 9
MySQL 5.7.2 DMR
InnoDB より高いトランザクション処理性能と可用性 レプリケーション より高い拡張性と可用性 Performance Schema より詳細な性能統計情報 オプティマイザ クエリパフォーマンスのEXPLAIN可視化の改良 Available Now! Get it here:
MySQL 5.6をベースに各種機能を改良
dev.mysql.com/downloads/mysql/
New!
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 10
MySQL 5.7.2 Sysbench Benchmarks
Sysbench Point Select
Intel(R) Xeon(R) CPU X7560 x86_64 4 sockets x 8 cores-HT (64 CPU threads) 2.27GHz, 256G RAM Oracle Linux 6.2
95% Faster than MySQL 5.6 172% Faster than MySQL 5.5
0
100000
200000
300000
400000
500000
600000
8 16 32 64 128 256 512 1024
Que
ries
per S
econ
d
Concurrent User Sessions
MySQL-5.7
MySQL-5.6
MySQL-5.5
500,000 QPS
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 11
MySQL 5.7.2 Sysbench Benchmarks OLTP Read Only
Intel(R) Xeon(R) CPU X7560 x86_64 4 sockets x 8 cores-HT (64 CPU threads) 2.27GHz, 256G RAM Oracle Linux 6.2
0
5000
10000
15000
20000
25000
8 16 32 64 128 256 512 1024
Tran
sact
ions
per
Sec
ond
Concurrent User Sessions
MySQL-5.7
MySQL-5.6
MySQL-5.5
17% Faster than MySQL 5.6 134% Faster than MySQL 5.5
sb_OLTP_RO_1M_8tab-ps Max-TPS
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 12
0
5000
10000
15000
20000
25000
30000
35000
40000
With Selects Without Select
Con
nect
ions
per
sec
ond
MySQL 5.7.2
MySQL 5.6.9
MySQL 5.7.2: Connections / second 新規接続の処理の高速化
Facebookからの要望をベースに開発 THDの初期化処理とネットワークの初期化処理をワーカースレッドに分離
• mysql-bench • 25 concurrent client threads • Executing connect/select/disconnect • 100000 iterations each
+32% +64%
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 13
オプティマイザ
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 14
MySQL 5.7.2: オプティマイザ
課題 - あるセッションのクエリの処理に長い時間がかかる 新しいオプション
– 他のセッションに対して EXPLAIN FOR CONNECTION
– 遅延の根本原因を発見できる – クエリの 適化につなげられる
コネクションの<id>は SHOW PROCESSLIST で確認
稼働中のクエリに対するEXPLAIN
EXPLAIN [FORMAT=(JSON|TRADITIONAL)] [EXTENDED] FOR CONNECTION <id>;
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 15
MySQL 5.7.2: オプティマイザ
Total query cost and Per table Volume (in gb/mb/kb) = (# of rows) * (record width)
JSON EXPLAINの拡張
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 16
Performance Schema
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 17
MySQL 5.7.2 Performance Schema
メモリに関する利用統計情報 – 200件以上のメモリ関連Instruments(統計項目)
利用統計情報をグルーピング – メモリの利用タイプ (キャッシュ、内部バッファなど) – スレッド/アカウント/ユーザ/ホストの間接的なメモリ利用
Attributes(属性情報)の種類 – 利用量 (バイト単位)、処理回数、 大値/ 小値
メモリ利用状況
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 19
MySQL 5.7.2 Performance Schema
SQL文の稼働統計を拡張 – 5.6を拡張しストアドプログラムをカバー、必要なコマンドとSQLを追加
新しいInstruments – statement/sp/cclose, cfetch, copen – statement/scheduler/event
新しいオブジェクトタイプ – EVENT, FUNCTION, PROCEDURE, TRIGGER
ストアドプログラムの稼働統計
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 21
InnoDB
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 22
MySQL 5.7.2: InnoDB
Sysbench READ ONLY の性能が 50-100% 向上(8テーブル)
Sysbench POINT SELECTにて秒間 約500,000トランザクション Sysbench OLTP_ROにて秒間 20,000トランザクション超
5.7では明示的に START TRANSACTION READ ONLY を 実行する必要無し
Better Performance, Scalability
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 24
0
500
1000
1500
2000
2500
Tota
l Tim
e in
Sec
onds
MySQL 5.7 versus 5.6 2 - 11 X Improvement
5.6.13
5.7.2
MySQL 5.7.2: InnoDB Temporary Tables 性能の向上
11倍 高速化 CREATE/DROP テーブルの作成や削除処理中のIOを削減 2-4倍 高速化 INSERT/DELETE/ UPDATE REDOログの書き込み、ロックおよびチェンジバッファの利用を削減
* sql-bench, modified to use temp-tables * Seed size of 10K for Create/Drop * Seed size of 5M for Insert/Delete/Update
Total time to complete in seconds
11X 2X
4X 2X
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 25
MySQL 5.7.2: InnoDB
オンラインでのインデックス名の変更 – ALTER TABLE t RENAME INDEX i1 TO i2
オンラインでのVARCHAR列の変更
オンラインALTER TABLE の拡張
ALTER TABLE t RENAME INDEX i1 to i2;
ALTER TABLE t1 ALGORITHM=INPLACE, CHANGE COLUMN c1 c1 VARCHAR(255);
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 26
MySQL 5.7.2: InnoDB
5.6の innochecksum – InnoDBの表領域ページのチェックサムを算出、記録し出力
5.7での改良点: • アルゴリズムを選択可能に (innodb/crc32/none) • 現在のチェックサムを新しいアルゴリズムで上書き可能 • 新しいチェックサムで強制的に上書き可能 (無効の場合) • 処理中止前に、何件の不一致まで処理するか指定可能 • 複数の表領域、および複数の表領域ファイルに対して実行可能 • 2GB 以上の表領域ファイルに対して実行可能 • ページタイプごとのサマリ表を出力可能
Innochecksum の改良
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 27
レプリケーション
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 28
同一スキーマ内でのマルチスレッド スレーブ
スレーブ内の複数のワーカースレッドがトランザクションを並列で処理 – 並列処理されるトランザクションの対象データが同一で無い場合に限る – 同一スキーマ内でもマルチスレッドで処理可能
トランザクションの一貫性を保って処理 スレーブのスループットを向上 現在開発中
– リファクタリング完了
– チューニングや 適化は現在作業中
スレーブのスループットを向上
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 29
Slave Master
MySQL 5.6の準同期レプリケーション
マスターはバイナリログへの書き込みとストレージエンジンへのコミットを行ってからスレーブにトランザクションを送る
スレーブからの応答がタイムアウトしても、トランザクションとしては成功となる
スレーブにトランザクションが渡されていない状態で、マスタが落ちると、成功したトランザクションを喪失する
App commits
Written to Binary log
Send to slave(s)
Commit to SE & externalized
Ack Commit
Write to relay log
Apply txn
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 30
Slave Master
“Lossless”準同期レプリケーション
マスターは指定のスレーブがトランザクションを受信するまで以下の処理を待つ
– ストレージエンジンへのコミット – 他のクライアントから変更へのアクセス – アプリケーションへのコミットの応答
スレーブが変更点を反映させるまでは待たない
– 遅延を 小化
スレーブに安全にコピーされるまで他のトランザクションが新しいデータを変更できないように
App commits
Written to Binary log
Send to slave(s)
Commit to SE & externalized
Ack Commit
Write to relay log
Apply txn
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 31
Slave Master
準同期レプリケーション MySQL 5.6 MySQL 5.7 “Lossless”
App commits
Written to Binary log
Send to slave(s)
Commit to SE & externalized
Ack Commit
Write to relay log
Apply txn
Slave Master App
commits
Written to Binary log
Send to slave(s)
Commit to SE & externalized
Ack Commit
Write to relay log
Apply txn
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 32
マルチソース レプリケーション 複数のマスターでの変更点を1台
のスレーブに集約 – 全ての「シャード」のデータを単一
のビューで分析 – バックアップ用にデータを集約
準同期レプリケーションおよびマルチスレッド スレーブに対応
マスターごとにフィルタと制御可能となる予定
アプリケーションはマスタごとに個別にアクセス
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
labs.mysql.com
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 33
セキュリティ
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 34
MySQL 5.7.2: セキュリティ – 監査ログ
MySQL監査プラグインを有効にして監査ログを出力 – 「誰が、いつ、何を、どこで、どのような」
ユーザ、日時、ホスト、ステータス … 接続/切断、クエリ、DML、DDL、サーバ&監査の開始/停止…
MySQL 5.7 での改良点 – Oracle Audit Vault との統合を改良 – XMLのサブ要素を使用 – タイムゾーン
MySQL Enterprise Audit
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 35
MySQL 5.7.2: セキュリティ – 監査ログ
5.6 <AUDIT_RECORD
TIMESTAMP="2013-04-15T15:27:27" NAME="Query" CONNECTION_ID="3“ STATUS="0" SQLTEXT="SELECT 1“
/>
5.6 と 5.7 の比較
5.7
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 36
その他の改良点
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 37
MySQL 5.7.2: トリガの改良
これまで – 各トリガの組み合わせはテーブル当たり1つずつ
(INSERT, UPDATE, DELETE) X (BEFORE, AFTER)
5.7 – 複数のトリガを指定可能
– 実行順を指定可能
一つのテーブルに複数のトリガ
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 38
MySQL 5.7.2: トリガーの改良
テーブル t1 に3個の AFTER INSERT トリガー – CREATE TRIGGER TRIG1 AFTER INSERT ON t1 FOR EACH ROW ... ; – CREATE TRIGGER TRIG2 AFTER INSERT ON t1 FOR EACH ROW ... ; – CREATE TRIGGER TRIG1A AFTER INSERT ON t1 FOR EACH ROW FOLLOWS TRIG1 ... ;
実行順は: 1) TRIG1 2) TRIG1A 3) TRIG2 関連するInformation_Schema
– SELECT CREATED FROM INFORMATION_SCHEMA.TRIGGERS – SELECT ACTION_ORDER FROM INFORMATION_SCHEMA.TRIGGERS – SHOW CREATE TRIGGER
一つのテーブルに複数のトリガー
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 39
MySQL 5.7.2:トリガの改良
テーブル ‘t1’ には – ‘c1’ 列がNOT NULL となっている; – BEFORE INSERT トリガが SET NEW.c1 = 1; を実行 (NULLではない)
SQL文
– … – 5.6 - 失敗
"ERROR 1048 (23000): Column 'C1' cannot be null" – 5.7 - 成功
SQL文実行の 後で制約のチェック
INSERT INTO t1 VALUES(NULL) または UPDATE t1 SET c1 = NULL
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 40
MySQL 5.7.2: エラーログ
3つのログレベル: 1. エラー(ERROR)のみ 2. エラー(ERROR) + 警告(WARNING) 3. エラー(ERROR) + 警告(WARNING) + 情報(NOTE) ※デフォルト値
設定ファイルまたは起動オプションで指定
– --log-error-verb
稼働中
ログレベルの制御
--log-error-verbosity=1
SET GLOBAL log_error_verbosity=1;
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 41
MySQL 5.7.2: エラーログ
• UTC タイムスタンプ • --log_timestamps = SYSTEM | UTC (default)
• フォーマットの変更 • タイムスタンプは ISO 8601 / RFC 3339 形式, マイクロ秒単位 • ログテーブル, TIMESTAMP(6) • プロセスIDは起動時のみ出力 • 可能な場合は接続IDを出力、それ以外は “0”
出力形式の改良
--log_timestamps = SYSTEM | UTC (default)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 42
MySQL 5.7.2: エラーハンドリング
スタックされた例外情報を取得するコマンドを実装 (SQL標準で定義)
– . – スタックされた領域から情報を取得 – GET [CURRENT] DIAGNOSTICS は現在の診断領域から情報を取得
ストアドプログラムの開発者にメリット – より多くの情報を取得可能 – エラー情報を調査して修正が可能
Stacked Diagnostics
GET STACKED DIAGNOSTICS
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 43
MySQL 5.7.2: Error Reporting
CREATE TABLE ids(id INT NOT NULL, UNIQUE(id)); CREATE TABLE errors(id INT NOT NULL, text VARCHAR(2000)); CREATE PROCEDURE insert_id(id INT) BEGIN DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN GET STACKED DIAGNOSTICS CONDITION 1 @msg = MESSAGE_TEXT; INSERT INTO errors VALUES(id, @msg); GET STACKED DIAGNOSTICS CONDITION 1 @errno = MYSQL_ERRNO; IF @errno = 1213 THEN
RESIGNAL; END IF;
END; INSERT INTO ids VALUES(id); END;
例: Stacked Diagnostics
Running
> CALL insert_id(0);CALL insert_id(1);CALL insert_id(0); > select text from errors; Duplicate entry '0' for key 'id'
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 44
MySQL 5.7.2: Error Reporting
mysql> DROP TABLE no_such_table; ERROR 1051 (42S02): Unknown table 'test.no_such_table'
mysql> CREATE EVENT e ON SCHEDULE EVERY 1 SECOND DO DELETE FROM t; Query OK, 0 rows affected (0.35 sec)
// 5.6: mysql> SHOW ERRORS; +-------+------+------------------------------------+ | Level | Code | Message | +-------+------+------------------------------------+ | Error | 1051 | Unknown table 'test.no_such_table' | +-------+------+------------------------------------+ 1 row in set (0.00 sec) // 5.7: mysql> SHOW ERRORS; Empty set (0.00 sec)
例: Clear Diagnostics Area
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 45
MySQL Labs Releases
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 46
MySQL Labs Releases
新機能をいち早くお試しいただき、フィードバックをいただくため DMRに含めることができる品質にはなっていない 本番環境での利用はお勧めしない 実験的とはいえ、将来的にはメインの開発ツリーに含めることを視野に
– 例) MySQL 5.6のInnoDB memcached API
http://labs.mysql.com
Please, DO NOT USE THESE BINARIES IN PRODUCTION.
新しい機能をいち早く公開する「実験室」
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 47
labs.mysql.com
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 48
MySQL Labs Releases
Hadoop Applier for MySQL
MySQL JSON UDFs
MySQL Multi-source Replication
MySQL Utilities - Fabric
2013年11月現在のLabs版
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 49
Hadoop Applier for MySQL
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 50
BI Solutions
ACQUIRE
ORGANIZE ANALYZE
DECIDE
Applier
MySQL in the Big Data Lifecycle
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 51
MySQL Applier for Hadoop MySQLからHadoopへのリアルタイムストリーミング
バイナリログの内容をlibhdfsライブラリ経由でHDFSに書き込み
リアルタイムでのデータ分析を実現
Hadoop用各種ツールとMySQLデータの統合
http://labs.mysql.com/
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 52
Mapping Between MySQL and HDFS Schema
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 53
MySQL JSON UDFs
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 54
MySQL JSON UDFs
CのプログラムをMySQLの関数として利用するUDFを活用 http://dev.mysql.com/doc/refman/5.6/en/adding-functions.html
JSONデータの検証、検索、更新など行う関数群 CREAET FUNCTION コマンドで追加
http://www.slideshare.net/yoyamasaki/my-sql-jsonudf
JSONデータを扱うユーザ定義関数
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 55
セットアップ方法(Linux/UNIX環境の場合) ※詳細はREADMEファイル参照
1. http://labs.mysql.com/ から“MySQL JSON UDFs”を ダウンロード 2.ダウンロードしたファイルに含まれている“libmy_json_udf.so”を plugin_dir に配置 (plugin_dirの確認方法:mysql> show global variables like 'plugin_dir';) 3.CREATE FUNCTIONコマンドでUDFを作成
※UDF(User-DefinedFunction:ユーザ定義関数)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 56
mysql> create function json_valid returns integer soname 'libmy_json_udf.so'; mysql> create function json_search returns string soname 'libmy_json_udf.so'; mysql> create function json_extract returns string soname 'libmy_json_udf.so'; mysql> create function json_replace returns string soname 'libmy_json_udf.so'; mysql> create function json_append returns string soname 'libmy_json_udf.so'; mysql> create function json_remove returns string soname 'libmy_json_udf.so'; mysql> create function json_set returns string soname 'libmy_json_udf.so'; mysql> create function json_merge returns string soname 'libmy_json_udf.so'; mysql> create function json_contains_key returns integer soname 'libmy_json_udf.so';
■CREATE FUNCTION
セットアップ方法(Linux/UNIX環境の場合) ※詳細はREADMEファイル参照
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 57
補足:READMEファイルのバグ
Linux/UNIX環境に関して、ファンクション作成コマンドが 以下の通り紹介されているが、ライブラリファイルの名前は ‘libmy_json_udf.so’となっている。 ファンクション作成コマンド create function json_valid returns integer soname 'libmy_json.so'; ※http://bugs.mysql.com/bug.php?id=70392
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 58
サンプルテーブル
mysql> select * from json;
+----+--------------------------------------------------------------------------------+
| id | col1 |
+----+--------------------------------------------------------------------------------+
| 1 | {"id":1,"Name":"Farmer grandmas","price":50000,"Conditions":["farms",15]} |
| 2 | {"id":2,"Name":"Worker grandmas","price":300000,"Conditions":["factories",15]} |
| 3 | {"id":3,"Name":"Miner grandmas","price":1000000,Conditions:["mines",15]} |
| 4 | {"id":4,"Name":"Yoshiaki Yamasaki"} |
+----+--------------------------------------------------------------------------------+
4 rows in set (0.00 sec)
※id=3の列には、フォーマット間違い有り (””が抜けている)
※id=4の列はNameだけ
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 59
json_valid:JSONドキュメントのフォーマットチェック (フォーマットが正しければ1、正しくなければ0)
mysql> select id,json_valid(col1) from json;
+----+------------------+
| id | json_valid(col1) |
+----+------------------+
| 1 | 1 |
| 2 | 1 |
| 3 | 0 |
| 4 | 1 |
+----+------------------+
4 rows in set (0.00 sec)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 60
json_search:値が含まれるキーを検索
mysql> select id,json_search(col1,'"Farmer grandmas"') from json where id=1; +----+---------------------------------------+ | id | json_search(col1,'"Farmer grandmas"') | +----+---------------------------------------+ | 1 | Name:: | +----+---------------------------------------+ 1 row in set (0.00 sec) mysql> select json_search(col1,'"farms"') from json; +-----------------------------+ | json_search(col1,'"farms"') | +-----------------------------+ | 0:Conditions:: | | NULL | | NULL | | NULL | +-----------------------------+ 4 rows in set (0.00 sec)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 61
json_replace:値を置換
mysql> select id,json_replace(col1,'Conditions','0','10') from json where id=1; +----+----------------------------------------------------------------------+ | id | json_replace(col1,'Conditions','0','10') | +----+----------------------------------------------------------------------+ | 1 | {"id":1,"Name":"Farmer grandmas","price":50000,"Conditions":[10,15]} | +----+----------------------------------------------------------------------+ 1 row in set (0.00 sec) mysql> select id,json_replace(col1,'Conditions','1','10') from json where id=1; +----+---------------------------------------------------------------------------+ | id | json_replace(col1,'Conditions','1','10') | +----+---------------------------------------------------------------------------+ | 1 | {"id":1,"Name":"Farmer grandmas","price":50000,"Conditions":["farms",10]} | +----+---------------------------------------------------------------------------+ 1 row in set (0.00 sec)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 62
Multi-source Replication
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 63
マルチソース レプリケーション 複数のマスターでの変更点を1台
のスレーブに集約 – 全ての「シャード」のデータを単一
のビューで分析 – バックアップ用にデータを集約
準同期レプリケーションおよびマルチスレッド スレーブに対応
マスターごとにフィルタと制御可能となる予定
アプリケーションはマスタごとに個別にアクセス
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
labs.mysql.com
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 64
MySQL Utilities - Fabric
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 66
MySQL Utilities 運用管理に関するPythonスクリプト
データベース管理
データベース運用
レプリケーション管理
設定管理
MySQL Utilities
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 67
MySQL Utilities
mysqldbcompare 同一サーバ内または2つのサーバ間のデータや定義の比較
mysqldbcopy 別のサーバにデータベースをコピー
mysqldbexport データとメタデータをエクスポート
mysqldbimport データとメタデータをインスポート
mysqldiff 2つのサーバ間のテーブルなどオブジェクトの定義を比較
データおよびデータベース管理
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 68
MySQL Utilities
mysqldiskusage デーブルおよびデータファイルのサイズを表示
mysqlindexcheck インデックスの重複をチェック
mysqlmetagrep テーブル定義などのメタデータをgrep mysqlprocgrep INFORMATION_SCHEMA.PROCESSLISTをgrep mysqluserclone 別のサーバにユーザアカウントををコピー
サーバ運用各種
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 69
MySQL Utilities
mysqlreplicate レプリケーションを設定
mysqlrplcheck レプリケーションが正しく設定されているかの確認
mysqlrplshow レプリケーショントポロジ(親子関係)を図示
mysqlfailover レプリケーションの自動フェールオーバー switchover 手動でのレプリケーションの切り替え mysqlrpladmin レプリケーションの各種管理
レプリケーション関連
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 70
MySQL Utilities
mysqlserverclone 既存のMySQLサーバのコピーを作成
mysqlserverinfo サーバの稼働状況を表示
設定関連&その他
mysqluc MySQL Utilitiesコマンド用ユーザコンソール
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 71
MySQL Utilities - Fabric 「シャーディング」による拡張性 コネクタ
– Python – Java – PHP
アプリケーションでの分割キー – Range または Hash – シャード再構成も可能 – シャード全体の更新も可能
MySQL Utilities 1.4.0として提供
MySQL Fabric
Connector
Application
Read-slaves
mappings
SQL
Master group
Read-slaves
Master group
labs.mysql.com
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 72
MySQL Utilities - Fabric +
MySQL Multi-source Replication +
Multi Thread Slave
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 73
MySQL開発の優先課題
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 74
Web、クラウドインフラ、組み込みへの 適化 よりシンプルに、プラガブル アーキテクチャ
- メンテナンス性向上、さらなる拡張性 - さらなるNoSQLオプション(HTTP, JSON, JavaScript, etc.)
リファクタリング - InnoDBのデータディクショナリ - オプティマイザ/パーサ/プロトコル
InnoDB 性能、オンラインDDL、バッファプール
高可用性構成、レプリケーション、シャーディング
MySQL開発の優先課題
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 75
The world's most popular open source database 世界で も普及しているオープンソース データベース
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 76
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 77