Slide 1

Slide 1 text

MySQLの運用を助けるオープンソースのソフト ウェア   2019/11/23 yoku0825 オープンソースカンファレンス 2019 Tokyo/Fall

Slide 2

Slide 2 text

免責事項 このスライドはyoku0825個人の見解に基づいて作成されており、所属する組織お よび所属しない組織あるいはNULLの一切の意見を代表するわけがありません 使っているもの / 使っていたもの / 使っていないものが混じっております 1/58

Slide 3

Slide 3 text

MySQLの運用を助 けるオープンソース のソフトウェア 2/58

Slide 4

Slide 4 text

MySQLの運用を助ける かも知れない オープン ソースのソフトウェア 3/58

Slide 5

Slide 5 text

\こんにちは/ yoku0825@とある企業のDBA オラクれない ‐ ポスグれない ‐ マイエスキューエる ‐ 生息域 Twitter: @yoku0825 ‐ Blog: 日々の覚書 ‐ 日本MySQLユーザ会 ‐ MySQL Casual ‐ 4/58

Slide 6

Slide 6 text

MySQLの運用を助ける かも知れないオープン ソースのソフトウェア 5/58

Slide 7

Slide 7 text

MySQLの運用を助ける かも知れない オープン ソース のソフトウェア 6/58

Slide 8

Slide 8 text

オープンソースの定義 オープンソースの定義 - Wikipedia The Open Source Definition | Open Source Initiative Licenses by Name | Open Source Initiative 7/58

Slide 9

Slide 9 text

閑話休題 8/58

Slide 10

Slide 10 text

MySQLの運用を助けるオープンソースのソフトウェア 汎用編 HA編 バックアップ編 ルーティング編 モニタリング編 9/58

Slide 11

Slide 11 text

MySQLの運用を助けるオープンソースのソフトウェア 汎用編 HA編 バックアップ編 ルーティング編 モニタリング編 10/58

Slide 12

Slide 12 text

汎用ユーティリティー Percona Toolkit MySQL Shell ytkit 11/58

Slide 13

Slide 13 text

Percona Toolkit Percona Toolkit GitHub ‐ GPLv2 ‐ MySQL(とか最近はPostgreSQLもMongoDBも)のサポートを提供している “Percona LLC.” によって開発されているスクリプト群 Perl製のものが多い割には2019年11月現在でまだサポートが続いている 最近書き起こされたものはGo製が多い、いずれポーティングされるのかな ‐ 有名どころは pt-online-schema-change, pt-query-digest など 12/58

Slide 14

Slide 14 text

Percona Toolkit のうち、今でも使ったり使わなかったりしているもの pt-config-diff pt-ioprofile pt-kill pt-online-schema-change pt-query-digest pt-slave-restart pt-table-checksum pt-table-sync 13/58

Slide 15

Slide 15 text

MySQL Shell MySQL :: MySQL Shell 8.0 GitHub ‐ GPLv2 ‐ Oracle MySQL公式の(そして新たなデフォルトにしようと目論まれている)CUI クライアント 14/58

Slide 16

Slide 16 text

MySQL Shell JavaScript, Python, SQL の3モードがある 言語エンジンどうしてんだろ… ‐ 15/58

Slide 17

Slide 17 text

MySQL Shell innotop の中の人でありOracle MySQLの中の人でもある lefred が、MySQL Shell 版のinnotopを作ろうとしている lefred/mysql-shell-innotop: Innotop like module in MySQL Shell ‐ 残念ながら俺の手元では動かなかった :-P ‐ この手のエコシステムが育っていく可能性はある 育たない可能性もある ‐ 今ならエコシステムのリーダーになれる可能性も ‐ 16/58

Slide 18

Slide 18 text

MySQL Shell 17/58

Slide 19

Slide 19 text

MySQL Shell 18/58

Slide 20

Slide 20 text

ytkit Yoku-san no Tool KIT GitHub ‐ GPLv2 ‐ 俺が運用で使ってるスクリプトを汎用化してオープンソースにしたもの 19/58

Slide 21

Slide 21 text

ytkit yt-alter-progress yt-binlog-groupby yt-collect yt-healthcheck yt-wait-replication 20/58

Slide 22

Slide 22 text

ytkit $ mysqlbinlog -vv ~/mysql-sandboxes/3306/sandboxdata/mysql-bin.00000* | bin/yt-binlog-gro upby --cell=m --group-by=time,table 191123 11:58 d1.page 65 191123 11:59 d1.page 86 191123 11:59 d1.revision 3 191123 12:00 d1.revision 78 21/58

Slide 23

Slide 23 text

ytkit $ bin/yt-alter-progress -h127.0.0.1 -uroot -i 1 Press Ctrl + C for quit from bin/yt-alter-progress [ 2.61% ( 41 sec | 1 sec) ] stage/innodb/alter table (read PK and internal sort) : ALTER TABLE revision Engine = InnoDB [ 29.68% ( 14 sec | 6 sec) ] stage/innodb/alter table (read PK and internal sort) : ALTER TABL E revision Engine = InnoDB [ 54.89% ( 9 sec | 11 sec) ] stage/innodb/alter table (read PK and internal sort) : ALTER TABL E revision Engine = InnoDB [ 59.16% ( 11 sec | 16 sec) ] stage/innodb/alter table (insert) : ALTER TABLE revision Engine = InnoDB [ 68.15% ( 9 sec | 21 sec) ] stage/innodb/alter table (merge sort) : ALTER TABLE revision Engi ne = InnoDB [ 79.23% ( 6 sec | 26 sec) ] stage/innodb/alter table (insert) : ALTER TABLE revision Engine = InnoDB [ 91.09% ( 3 sec | 31 sec) ] stage/innodb/alter table (insert) : ALTER TABLE revision Engine = InnoDB [ 100.00% ( 0 sec | 36 sec) ] stage/innodb/alter table (flush) : ALTER TABLE revision Engine = InnoDB [ 100.00% ( 0 sec | 41 sec) ] stage/innodb/alter table (flush) : ALTER TABLE revision Engine = InnoDB [ 100.00% ( 0 sec | 46 sec) ] stage/innodb/alter table (flush) : ALTER TABLE revision Engine = InnoDB 22/58

Slide 24

Slide 24 text

MySQLの運用を助けるオープンソースのソフトウェア 汎用編 HA編 バックアップ編 ルーティング編 モニタリング編 23/58

Slide 25

Slide 25 text

主にマスター切り替え用途 MHA for MySQL 1, 2 MMM for MySQL GitHub orchestrator mikasafabric for MySQL 24/58

Slide 26

Slide 26 text

MHA for MySQL mysql-master-ha Source [1]](https://github.com/yoshinorim/mha4mysql-manager), 2 ‐ GPLv2 ‐ MySQLのHAツールの雄 Perl製 ‐ 2011年5月にファーストリリース、そのとき時代はMySQL 5.5 ‐ 25/58

Slide 27

Slide 27 text

MMM for MySQL Multi-Master Replication Manager for MySQL Launchpad ‐ GPLv2 ‐ LINE, Naverあたりが使っている/使っていた? で韓国で人気が高いような気がする Perl製 ‐ NOTE: By now there are a some good alternatives to MySQL-MMM. ‐ 26/58

Slide 28

Slide 28 text

GitHub orchestrator github/orchestrator GitHub ‐ Apache License 2.0 ‐ 観測範囲ではMHA for MySQLからの乗り換えとして採用しているところが一番多 い メルカリにおけるMySQLの運用 ‐ 2段階フェイルオーバーとかPseudo-GTIDとか「ああこれ使ってる人が作ってる な」感 27/58

Slide 29

Slide 29 text

mikasafabric for MySQL gmo-media/mikasafabric GitHub ‐ GPLv2 ‐ とある企業 (だけ)が使っているMySQL Fabricのクローン 地味にMySQL 8.0対応したのでまだ使っている ‐ 28/58

Slide 30

Slide 30 text

MySQL Fabric (水に濡れて文字が消えたのか、読むことができない) 29/58

Slide 31

Slide 31 text

MySQLの運用を助けるオープンソースのソフトウェア 汎用編 HA編 バックアップ編 ルーティング編 モニタリング編 30/58

Slide 32

Slide 32 text

バックアップは大事 XtraBackup MyDumper mysqlbinlog 31/58

Slide 33

Slide 33 text

XtraBackup Percona XtraBackup GitHub ‐ GPLv2 ‐ Perconaソフトウェアふたたび InnoDBのクラッシュリカバリーをバックアップに応用して「オンラインでの物理 バックアップ」を実現 32/58

Slide 34

Slide 34 text

MyDumper maxbube/mydumper GitHub ‐ GPLv3 ‐ パラレルかつロジカルバックアップ 33/58

Slide 35

Slide 35 text

mysqlbinlog Using mysqlbinlog to Back Up Binary Log Files GitHub ‐ GPLv2 ‐ バイナリログをデコードするためのプログラムである mysqlbinlog はMySQL 5.6 からバイナリログの「ストリームバックアップ」に対応 34/58

Slide 36

Slide 36 text

MySQLの運用を助けるオープンソースのソフトウェア 汎用編 HA編 バックアップ編 ルーティング編 モニタリング編 35/58

Slide 37

Slide 37 text

クエリーを中継してゴニョゴニョする系 MySQL Proxy ProxySQL Vitess MariaDB 36/58

Slide 38

Slide 38 text

MySQL Proxy mysql/mysql-prox GitHub ‐ GPLv2 ‐ 2007年から2014年までα版として開発され、そのまま消えた「永遠のα版」 ルーティング部分はLuaで自前でコーディングする ‐ シンプルかつ結構強力にMySQLパケットを書き換えられたため愛好家多数 ‐ MySQL Proxyはリポジトリーがちゃんと残ってるというのにMySQL Fabricお前と来たら… ‐ 37/58

Slide 39

Slide 39 text

ProxySQL ProxySQL GitHub ‐ GPLv3 ‐ 内部にMySQLプロトコルパーサーを持っていて、クライアントから受け付けた MySQLプロトコルをゴニョってからMySQLプロトコルに詰めなおしてサーバーに 送るという重厚なつくり それ故に多機能かつ設定項目が多彩 ‐ モニタリングやProxySQL同士での設定の同期など本当に多彩 ‐ 38/58

Slide 40

Slide 40 text

Vitess Vitess GitHub ‐ Apache License 2.0 ‐ 水平シャーディングにも対応したCNCF育ちのピタゴラスイッチ きっとスケールするだろうしYouTubeが自分たちで使うために開発してるものだから上手く動 くんだろうけどブラックボックス感がすごい ‐ 39/58

Slide 41

Slide 41 text

MariaDB MariaDB GitHub ‐ GPLv2 ‐ もちろんもともとはMySQLからフォークした立派なRDBMSだけれども、 CONNECTストレージエンジン を使うと立派な変態Proxyになる 40/58

Slide 42

Slide 42 text

MariaDB MariaDB: Connect Storage Engine 41/58

Slide 43

Slide 43 text

MariaDB プロキシとして使った時の何が便利って、 MariaDBに認証情報を隠蔽させられる MariaDBへの認証情報とCONNECT先の認証情報が分離できる MariaDBへの接続はPAM認証プラグインもある ‐ MariaDB側のログ機構を使える MariaDBには監査ログプラグインがバンドルされていることだし ‐ 文字コードとかパフォーマンスとかはつらかった 最近どうなんだろう ‐ 42/58

Slide 44

Slide 44 text

MySQLの運用を助けるオープンソースのソフトウェア 汎用編 HA編 バックアップ編 ルーティング編 モニタリング編 43/58

Slide 45

Slide 45 text

推測するな、計測せよ innotop PMM Box Anemometer MySQL Workbench 44/58

Slide 46

Slide 46 text

innotop innotop/innotop GitHub ‐ GPLv2 ‐ 主に SHOW PROCESSLIST を top 風に表示させるのに使われる SHOW SLAVE STATUS や SHOW ENGINE INNODB STATUS をリアルタイム表示するのにも使えるスグ レモノ ‐ 45/58

Slide 47

Slide 47 text

innotop 46/58

Slide 48

Slide 48 text

innotop innotop の中の人でありOracle MySQLの中の人でもある lefred が、MySQL Shell 版のinnotopを作ろうとしている Innotop like in MySQL Shell \- YouTube ‐ 残念ながら俺の手元では動かなかった :-P ‐ 47/58

Slide 49

Slide 49 text

PMM Database Monitoring & Management GitHub 1, 2 ‐ AGPLv3 ‐ GrafanaベースのWEB UIに node_exporter から取ってきたメトリクスや p_s また は slow_log から取ってきたクエリーアナライザーがついていたりもうほぼこれで 良いんではないか感 MySQL 5.5がギリ、それ未満は死亡だが5.6とそれ以降で統一していれば問題なく使える(と思 う) ‐ 48/58

Slide 50

Slide 50 text

PMM 49/58

Slide 51

Slide 51 text

Box Anemometer box/Anemometer GitHub ‐ Apache License 2.0 ‐ Box社が使って “いた”(?) と思われるスローログのグラフ化ツール 2016年を最後に更新されていないので、もう使っていないのかな ‐ pt-query-digestの仕様変更により、percona-toolkit 3.0.11とそれ以降のpt-query-digestで は動かない ‐ 50/58

Slide 52

Slide 52 text

anemoeater anemoeater GitHub ‐ GPLv2 ‐ 某社で使われている「Anemometerを使い捨てコンテナに詰める」ラッパースク リプト 過去分のスロークエリーログさえあればAnemometerのサーバーを常時起動しておく必要はな い ‐ 51/58

Slide 53

Slide 53 text

anemoeater 52/58

Slide 54

Slide 54 text

MySQL Workbench MySQL :: MySQL Workbench GitHub ‐ GPLv2 ‐ Oracle MySQL公式のGUIクライアント…だが GUIクライアント以外の部分が それ 以外の部分も便利 53/58

Slide 55

Slide 55 text

MySQL Workbench 54/58

Slide 56

Slide 56 text

MySQL Workbench “Refresh rate” を設定するとtop-likeにも使える 55/58

Slide 57

Slide 57 text

MySQL Workbench 意外とこんなものも(そこまで高機能ではないけれど) 56/58

Slide 58

Slide 58 text

MySQLの運用を支えるかも知れないオープンソースのソフトウェア - Percona Toolkit - MySQL Shell - ytkit - MHA for MySQL - MMM for MySQL - GitHub orchestrator - mikasafabric for MySQL - XtraBackup - MyDumper - mysqlbinlog - MySQL Proxy - ProxySQL - Vitess - MariaDB - innotop - PMM - Box Anemometer - MySQL Workbench 57/58

Slide 59

Slide 59 text

Any Questions and/or Suggestions? 58/58