Upgrade to Pro — share decks privately, control downloads, hide ads and more …

クラウド時代のMySQL入門

 クラウド時代のMySQL入門

2019年12月18日(水)に開催された「ニフクラ エンジニア ミートアップ:MySQL超入門!進化する8.0を中の人が語る」での発表資料です。
https://fujitsufjct.connpass.com/event/153713/?fbclid=IwAR1QJzICqBv9N1T2ruRQvIIpriuqCb3rONTfmhLxUYdLWFRBJvDCjCp0fBU

YoshiakiYamasaki

December 18, 2019
Tweet

More Decks by YoshiakiYamasaki

Other Decks in Technology

Transcript

  1. MySQL Principal Solution Engineer, Asia Pacific and Japan Yoshiaki Yamasaki

    / 山﨑 由章 2019/12/18 クラウド時代のMySQL入門
  2. 6 MySQLの歴史 MyISAM InnpDB Replciation 3.2 3 4.0 5.0 5.1

    5.5 5.6 5.7 8.0 2000 2005 2010 2015 Fulltext index (MyISAM) View Information_SCHEMA InnoDB Replication PERFORMANCE_SCHEMA memcached API GTID InnoDB++, GIS Support, QRP, Instrinc Tables MultiThreaded Sls, MultiSourceRpl, Group Rpl Document Store, New Data Dictory, Enterprise DataMasking MySQL SUN Oracle
  3. 7 勢いを増すMySQL Global Business Unit MySQL GBU Development Sales Enterprise

    Renewal ISV Enablement Pre-Sales Engineering Support Marketing  Oracle MySQL  X2, X3, X2
  4. 10 MySQL 8.0:Webアプリケーション開発効率向上を実現 24x 7 at Scale Scalable & Stable

    InnoDB Clusterによる高可 用性構成、スケールアウト 構成による拡張性も提供 Developer First ハイブリッド型のデータ モデルとNoSQL APIによる 開発柔軟性 Data Analyze データ分析に役立つSQL 構文を追加 オプティマイザの改良、 強化による高速化 Mobile Friendly 位置情報ベースのサービス 向けの機能強化と絵文字を 含めたユニコード対応
  5. 13 MySQL Connectors include X Dev API • SQLだけでなくCRUD APIも使用可能

    • JSONドキュメントにもリレーショナルテーブルにも対応 Operation Document Relational Create Collection.add() Table.insert() Read Collection.find() Table.select() Update Collection.modify() Table.update() Delete Collection.remove() Table.delete() 参考) http://dev.mysql.com/doc/x-devapi-userguide/en/crud-operations-overview.html
  6. 16 JSON_TABLE()関数 SELECT * FROM seats, JSON_TABLE(doc, "$.properties.amenities[*]" COLUMNS (

    id for ordinality, amenity_type VARCHAR(100) PATH "$.type", distance float PATH '$.distance_in_meters') ) AS amenities WHERE seats.id = 28100 AND amenities.amenity_type IN ('snacks', 'bar') ORDER BY amenities.distance; +-----+---------------+-----------+ | id | amenity_type | distance | +-----+---------------+-----------+ | 2 | bar | 100.538 | | 3 | snacks | 136.647 | +-----+---------------+-----------+ 2 rows in set (0.00 sec) JSONドキュメントを リレーショナルテー ブル形式に変換可能
  7. 17 Generated Columns(生成列) JSONドキュメントを インデックス検索可能 • 実データを格納する列以外に、任意で列を追加可能 • この機能を活用すれば、JSONドキュメントに対する インデックス検索も可能に!!

    • JSONドキュメントの特定の要素を取り出した列を作成 ⇒この列に対してインデックスを作成する 例) ALTER TABLE features ADD feature_type VARCHAR(30) AS (JSON_UNQUOTE(feature->'$.type')); ALTER TABLE features ADD INDEX (feature_type);
  8. 24 • マニュアル • MySQL 8.0 Reference Manual / Chapter

    2 Installing and Upgrading MySQL https://dev.mysql.com/doc/refman/8.0/en/installing.html • 参考資料 • MySQL 8.0入門セミナー講演資料 (インストール&アーキテクチャ基礎編) https://www.mysql.com/jp/why-mysql/presentations/mysql-80-for- beginners-install-architecture-doc-jp/ 公式バイナリ/リポジトリのインストール方法
  9. 25 • 公式リポジトリをインストールし、yumコマンドで自動的に最新のGAバージョンを インストール(ネットワークアクセス必須) • 手順 1. 各ディストリビューションに対応したyumリポジトリをダウンロード https://dev.mysql.com/downloads/repo/yum/ 2.

    リポジトリのインストール 3. MySQLインストール 4. MySQL起動/停止(初回起動時にDBも作成される) 公式yumリポジトリを使用したMySQLインストール例 shell> sudo rpm -Uvh mysql80-community-release-xxx.noarch.rpm shell> yum repolist enabled | grep "mysql.*-community.*" shell> yum install mysql-community-server shell> sudo service mysqld start shell> sudo service mysqld stop ※注意事項 ・MySQL Serverのrootユーザーのパスワードを変更する必要がある ・パスワード検証コンポーネントが有効になっている shell> sudo systemctl start mysqld shell> sudo systemctl stop mysqld ※EL7系の場合
  10. 32 Visual EXPLAIN(typeの値による色の違い) typeの値 色 意味 system 青色 1行しかないテーブル(systemテーブル) ※constの特殊な例

    const 青色 PRIMARY/UNIQUEインデックスによる等価検索(一意検索) eq_ref 緑色 PRIMARY/UNIQUEインデックスによるJOIN ref 緑色 ユニークでないインデクスによる等価検索、JOIN fulltext 黄色 全文検索インデックスを使用した全文検索 ref_or_null 緑色 ユニークでないインデックスによる等価検索とIS NULLのOR index_merge 緑色 複数のインデックスをマージ unique_subquery 橙色 サブクエリ内で、PRIMARY/UNIQUEインデックスで等価検索(一意 検索) index_subquery 橙色 サブクエリ内で、ユニークでないインデクスによる等価検索、 range 橙色 範囲検索 index 赤色 インデックスのフルスキャン ALL 赤色 フルテーブルスキャン 望ましい 望ましくない
  11. 33 データベース・マイグレーション・ウィザード MySQL Workbenchのデータベース移行に役立つ機能 • GUI DB MySQL • MySQL

    MySQL • - Microsoft SQL Server, PostgreSQL, Sybase ASE, Sybase SQL Anywhere, SQLite, Microsoft Access, MySQL, and more
  12. 35 • MySQLの新しいコマンドラインクライアント • 従来のmysqlコマンドラインクライアントよりも高機能 • Xプロトコル、X DevAPIのサポート • SQLだけでなく、JavaScriptやPythonも実行可能(MySQL

    Shell 8.0.18からPython 3を使用) • バッチコード実行機能(SQLだけでなく、JavaScriptやPythonもバッチで実行可能) • アプリケーションログ出力機能 • 多用な出力フォーマット(タブ区切り、JSONフォーマット、など) • mysqlコマンドラインクライアントよりも使いやすい補完機能 • AdminAPIのサポート ※MySQL InnoDB Cluster用の機能 • MySQL Shell Utilitiesを使用可能 - Upgrade Checker Utility、JSON Import Utility、parallel table import Utility • レポート機能、プラグイン機能 MySQL Shell
  13. 39 MySQLサポート • 24 365 ( 9 17 ) •

    • MySQL GBU • • MySQL • • • • TCO
  14. 42 MySQL Enterprise Security • MySQL Enterprise Authentication • •

    PAM • MySQL Enterprise Audit • • • MySQL Enterprise Firewall • SQL •
  15. 43 MySQL Enterprise Security • MySQL Enterprise Encryption • MySQL

    • / • • MySQL Enterprise TDE • • ( ) • MySQL Enterprise Data Masking • •
  16. 45 MySQL EEが提供するGUIツール • MySQL Enterprise Monitor • MySQL •

    SQL • MySQL Workbench Enterprise Edition • MySQL GUI • SQL DB DB • Enterprise Edition - - - Enterprise Edition GUI
  17. 48 MySQL Subscription MySQL 1-4 MySQL Standard Edition 240,000 MySQL

    Enterprise Edition 600,000 MySQL Cluster Carrier Grade Edition 1,200,000 *5 * MySQL MySQL * CPU 1
  18. 52 • SET PERSISTコマンド • コマンドによるパラメータ変更結果を永続化できる • SET PERSIST_ONLYコマンドにより、設定ファイルのみに 変更を反映することも可能

    • RESTARTコマンド • コマンドだけで再起動可能に その他のクラウド環境と相性のいい機能(MySQL 8.0で追加)
  19. 53 • SET PERSISTコマンド • コマンドによるパラメータ変更結果を永続化できる • SET PERSIST_ONLYコマンドにより、設定ファイルのみに 変更を反映することも可能

    • RESTARTコマンド • コマンドだけで再起動可能に ⇒ OS上の設定ファイルを編集できなくても、パラメータ変更可能 その他のクラウド環境と相性のいい機能(MySQL 8.0で追加)
  20. 54 • SET PERSISTを実行すると、mysqld-auto.cnfファイルに設定が 記録される • 設定を削除する場合は、RESET PERSISTコマンドを使用する • SET

    PERSISTを実行するために必要な権限 - SYSTEM_VARIABLES_ADMIN • SET PERSIST_ONLYを実行するために必要な権限 - SYSTEM_VARIABLES_ADMIN + PERSIST_RO_VARIABLES_ADMIN SET PERSISTに関する補足
  21. 55 • SET PERSIST_ONLY実行時の注意事項 - innodb_ft_aux_tableなど、文字列で値を設定するパラメーターに 不正な値を設定した場合、再起動に失敗する ※以下のようなケースはSET PERSIST_ONLY実行時にエラーになるので 事前に気付けるが、上記のケースは再起動するまで気付けない

    ◦ パラメータ名の間違い ◦ 数値型のパラメータに文字列を設定 ◦ 数値型のパラメータに設定できる範囲を超えた値を設定 SET PERSISTに関する補足 参考情報:MySQL 8.0.15現在、 SET PERSIST_ONLY にはあんまり手を出さない方が良いと思う https://yoku0825.blogspot.com/2019/04/mysql-8015-set-persistonly.html