はじめに
Percona 製品は、MySQL と非常に高い互換性を持つ MySQL の派生製品であり、 MySQL ユーザが快適に利用できることを開発コンセプトとしています。
また、MySQL と同様 OSS で提供され、ユーザは無償で利用することができます。
本記事で紹介する Percona Toolkit は、Percona 社が開発した MySQL の運用・監視・分析といった、手動で実行するには複雑な作業を簡単に実施することができるコマンドツール群です。
現在 (2024/12/09
)、40 ツールが存在する中で、今回は pt-align、pt-archiver の 2 ツールを紹介します。
Percona Toolkit 関連のブログについては まとめ で紹介していますので併せてご覧ください。
Percona Toolkit のダウンロード・インストール
ダウンロード・インストールに関しては、以下の公式サイトを参考にしてください。
環境情報
今回利用する環境情報
- Oracle Linux 8
- Percona Server for MySQL 8.0.39-30
- Percona Toolkit 3.6.0
ツール紹介
1. pt-align
pt-align は、以下のように選択したファイルの中身の列を揃えて出力することができます。
1 2 3 4 5 6 7 |
----- pt-align なし ----- shell# cat test DATABASE TABLE ROWS foo bar 100 long_db_name table 1 another long_name 500 |
1 2 3 4 5 6 7 |
----- pt-align あり ----- shell# pt-align test DATABASE TABLE ROWS foo bar 100 long_db_name table 1 another long_name 500 |
オプションも --help
と --version
の 2 つだけと、非常にシンプルなツールです。
オプションの詳細は リファレンス を確認してください。
リファレンスには vmstat
と iostat
の出力を揃えて読みやすくする場合などに便利とありますが、vmstat
と iostat
はそもそも見やすく出力されるためあまり効果は実感できませんでした。
vmstat
1 2 3 4 5 6 |
----- pt-align なし ----- shell# vmstat procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 5 0 4194296 3684736 1976 96186032 0 0 1 319 0 0 29 5 67 0 0 |
1 2 3 4 5 |
----- pt-align あり ----- shell# vmstat | pt-align r b swpd free buff cache si so bi bo in cs us sy id wa st 5 0 4194296 3684736 1976 96186032 0 0 1 319 0 0 29 5 67 0 0 |
iostat
1 2 3 4 5 6 7 8 9 10 11 12 |
----- pt-align なし ----- shell# iostat Linux 4.18.0-425.13.1.el8_7.x86_64 (test) 08/14/24 _x86_64_ (2 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 0.46 0.06 0.36 0.00 0.19 98.94 Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn vda 0.45 5.94 26.66 523344 2348176 dm-0 0.43 5.28 25.35 464881 2232976 dm-1 0.26 0.06 0.98 5324 86648 |
1 2 3 4 5 6 7 8 |
----- pt-align あり ----- shell# iostat | pt-align 0.46 0.06 0.36 0.00 0.19 98.94 Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn vda 0.45 5.94 26.66 523344 2348176 dm-0 0.43 5.28 25.35 464881 2232976 dm-1 0.26 0.06 0.98 5324 86648 |
注意点として、pt-align は、列数が同じでないと全て表示さません。
(どこかの行の列数が基準となり、基準と同列数の行だけが整列されて表示されます)
そのため csv の中身を確認するのに良さそうと思いましたが、"a, b"
のように 1 列に 2 単語入っている場合や、Customer Id
のように列名に空白が入っている場合、文字に "
が含まれる場合などは pt-align が使えないので、それらの処理をしてから実行するといったように手間がかかります。
できないことはないですが csv の確認には適してなさそうです。
上記の vmstat に関しては、procs の行が消えてしまいますが、vmstat を見慣れている人は procs の行が消えるより列が揃う方が見やすそうです。
2. pt-archiver
pt-archiver は MySQL テーブルの行を別のテーブルまたはファイルにアーカイブすることができます。
pt-archiver には多くのオプションが存在します。
必須のオプションは --source
と --where
です。
--source
: 元データの指定--where
: 条件の指定
オプションの詳細は リファレンス を確認してください。
使用例
今回は mydb データベースと employees テーブルを使用します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
mysql> select * from employees; +----+--------------------+-----------------------------------+-------------+ | id | name | email | country | +----+--------------------+-----------------------------------+-------------+ | 1 | Erasmus Richardson | posuere.cubilia.curae@outlook.net | England | | 2 | Jenna French | rhoncus.donec@hotmail.couk | Canada | | 3 | Alfred Dejesus | interdum@aol.org | Austria | | 4 | Hamilton Puckett | dapibus.quam@outlook.com | Canada | | 5 | Michal Brzezinski | magna@icloud.pl | Poland | | 6 | Zofia Lis | zofial00@hotmail.pl | Poland | | 7 | Aisha Yakubu | ayakubu80@outlook.com | Nigeria | | 8 | Miguel Cardenas | euismod@yahoo.com | Peru | | 9 | Luke Jansen | nibh@hotmail.edu | Netherlands | | 10 | Roger Pettersen | nunc@protonmail.no | Norway | +----+--------------------+-----------------------------------+-------------+ |
アーカイブしたデータの移動先となる、employees と同じ構造の空の employees_archive テーブルを作成しておきます。
1 |
mysql> CREATE TABLE employees_archive LIKE employees; |
1 2 3 4 5 6 7 |
mysql> show tables; +-------------------+ | Tables_in_mydb | +-------------------+ | employees | | employees_archive | +-------------------+ |
1 2 3 4 5 6 7 8 9 |
mysql> desc employees_archive; +---------+--------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------+--------------------+------+-----+---------+----------------+ | id | mediumint unsigned | NO | PRI | NULL | auto_increment | | name | varchar(255) | YES | | NULL | | | email | varchar(255) | YES | | NULL | | | country | varchar(100) | YES | | NULL | | +---------+--------------------+------+-----+---------+----------------+ |
pt-archiver を実行します。
1 2 3 |
shell# pt-archiver --ask-pass --source h=localhost,D=mydb,t=employees \ --dest h=localhost,D=mydb,t=employees_archive \ --where "1=1" --no-safe-auto-increment |
--ask-pass
: MySQL に接続する時のパスワードが要求される--source
: 元データを指定h=localhost
: ホスト名、D=mydb
: データベース名、t=employees
: テーブル名
--dest
: アーカイブ先を指定--where
: 条件の指定、"1=1"
は全てのデータを指定しています--no-safe-auto-increment
: これを指定しなかった場合、最後に見つかった行を含まないデータがアーカイブされる (今回で言えば id が 10 の行はアーカイブも移動もされない)
1 2 |
mysql> select * from employees; Empty set (0.00 sec) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
mysql> select * from employees_archive; +----+--------------------+-----------------------------------+-------------+ | id | name | email | country | +----+--------------------+-----------------------------------+-------------+ | 1 | Erasmus Richardson | posuere.cubilia.curae@outlook.net | England | | 2 | Jenna French | rhoncus.donec@hotmail.couk | Canada | | 3 | Alfred Dejesus | interdum@aol.org | Austria | | 4 | Hamilton Puckett | dapibus.quam@outlook.com | Canada | | 5 | Michal Brzezinski | magna@icloud.pl | Poland | | 6 | Zofia Lis | zofial00@hotmail.pl | Poland | | 7 | Aisha Yakubu | ayakubu80@outlook.com | Nigeria | | 8 | Miguel Cardenas | euismod@yahoo.com | Peru | | 9 | Luke Jansen | nibh@hotmail.edu | Netherlands | | 10 | Roger Pettersen | nunc@protonmail.no | Norway | +----+--------------------+-----------------------------------+-------------+ |
employees テーブルの全てのデータがアーカイブされ、employees_archive テーブルに移動されたことが確認できました。
--no-delete
オプションを使用すれば元データを残すこともできます。
pt-archiver はコマンド 1 つで簡単にデータをアーカイブして移動 (元テーブルからデータの削除) することができるのでコマンド使用時には注意が必要です。
Percona Toolkit のデバッグ情報を有効にする
PTDEBUG=1
を付けて実行するとデバッグ情報を有効にすることができます。
こちらのマニュアルページ に記載がある通り、
PTDEBUG
を使用すると、パスワードが公開される可能性がある点に注意してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
shell# PTDEBUG=1 pt-align test # /usr/bin/perl 5.026003 # Linux blog 4.18.0-425.13.1.el8_7.x86_64 #1 SMP Tue Feb 21 15:09:05 PST 2023 x86_64 x86_64 x86_64 GNU/Linux # Arguments: _[test]_ # OptionParser:201 184764 Option rule: This tool accepts additional command-line arguments. Refer to the SYNOPSIS and usage information for details. # OptionParser:210 184764 =item --help # OptionParser:229 184764 Option has no attributes # OptionParser:237 184764 Short help: Show help and exit # OptionParser:210 184764 =item --version # OptionParser:229 184764 Option has no attributes # OptionParser:237 184764 Short help: Show version and exit # OptionParser:277 184764 Parsing opt spec: spec => help group => default attributes => HASH(0x5571b52f1448) desc => Show help and exit # OptionParser:316 184764 help type: undef # OptionParser:277 184764 Parsing opt spec: spec => version group => default attributes => HASH(0x5571b5366580) desc => Show version and exit # OptionParser:316 184764 version type: undef # OptionParser:338 184764 Parsing rule: This tool accepts additional command-line arguments. Refer to the SYNOPSIS and usage information for details. # OptionParser:394 184764 Participants for This tool accepts additional command-line arguments. Refer to the SYNOPSIS and usage information for details. : # OptionParser:370 184764 Strict mode disabled by rule # OptionParser:164 184764 pt-align 3.6.0 # OptionParser:775 184764 Getting description and usage from SYNOPSIS in /bin/pt-align # OptionParser:1036 184764 Parsing SYNOPSIS in /bin/pt-align # OptionParser:1049 184764 Raw SYNOPSIS text: Usage: pt-align [FILES] # # pt-align aligns output from other tools to columns. If no FILES are specified, # STDIN is read. # # # OptionParser:780 184764 Description: pt-align aligns output from other tools to columns. If no FILES are specified, STDIN is read. # Usage: pt-align [FILES] DATABASE TABLE ROWS foo bar 100 long_db_name table 1 another long_name 500 |
まとめ
Percona Toolkit は、インストール自体が非常に簡単でインストールしておくだけで 40 個のツールを利用することができます。
リファレンスに書かれている通り、これらのツールはプライベートや 1 回しか使用しないような時に非常に便利です。
重宝するツールもあれば、使いこなすのに応用が必要そうなツールもありますが、Percona Toolkit 自体無償で提供されているのでぜひインストールしてみてください。
Percona Toolkit のツールを全て使ってみるシリーズはアルファベット順に進めていますので次回、第 2 弾は pt-config-diff になります!
* Percona Toolkit を紹介した SmartStyle TECH BLOG *