製品&サポートサービス

pt-upgrade

コマンド

pt-upgrade [オプション] [ログファイル] [DSN1] [DSN2]

【必須項目】

  • ・ [ DSN ] : h=ホスト名,u=ユーザ名,p=パスワード
  • ・ [ログファイル] : 比較するログファイルを指定します

【主なオプション】

  • ・ --no-read-only : ログファイルの全てのクエリを比較するようになります(通常はSELECT,SET文しか比較しません)
  • ・ --type : 比較するログファイルのフォーマットを指定することができます。通常はslowlogになっています
    フォーマット名 ログの内容
    slowlog スロークエリログ
    genlog 一般クエリログ
    binlog バイナリログ
    rowlog 1行に1つSQL文を書いた、オリジナルファイル

目的

異なるサーバ間で、クエリ実行時間の違いや、エラーの有無を比較した結果を出力します

シナリオ

バージョンが異なるサーバを二台用意します

mysql5.6 ホスト名=localhost、DBユーザ名=root、パスワード=password
mysql5.7 ホスト名=192.168.11.42、DBユーザ名=root、パスワード=password

※ デフォルトの設定では、SELECTの権限があればツールは動きます

Slowクエリログは、デフォルトでは10秒以上のクエリが記録されるようになっていますが、0秒以上で記録するように変更します

my.cnf に追記

long_query_time = 0

localhost(mysql5.6)側でいくつかクエリを実行します

コマンドを実行する前に、my.cnfのlong_query_timeオプションを元に戻し、その後ログを比較します

# pt-upgrade /var/lib/mysql/slow_queries.log \
> h=localhost,p=password h=192.168.11.51,u=test,p=password

結果

[root@localhost mysql]# pt-upgrade /var/lib/mysql/slow_queries.log h=localhost,u=root,p=password h=192.168.11.42,u=root,p=password

#-----------------------------------------------------------------------
# Logs
#-----------------------------------------------------------------------
File: /var/lib/mysql/slow_queries.log
Size: 6146
#-----------------------------------------------------------------------
# Hosts
#-----------------------------------------------------------------------
host1:
  DSN:       h=localhost
  hostname:  localhost.localdomain
  MySQL:     MySQL Community Server (GPL) 5.6.35
host2:
  DSN:       h=192.168.11.42
  hostname:  localhost.localdomain
  MySQL:     MySQL Community Server (GPL) 5.7.17

########################################################################
# Query class 67A347A2812914DF
########################################################################

Reporting class because there are 3 query errors.
Total queries      3
Unique queries     3
Discarded queries  0
mysqldump
##
## Query errors diffs: 3
##
-- 1.
No error
vs.
DBD::mysql::db do failed: Unknown database 'employees' [for Statement "USE `employees`"]
SELECT /*!40001 SQL_NO_CACHE */ * FROM `salaries`

-- 2.
No error
vs.
DBD::mysql::db do failed: Unknown database 'employees' [for Statement "USE `employees`"]
SELECT /*!40001 SQL_NO_CACHE */ * FROM `salaries`

-- 3.
No error
vs.
DBD::mysql::st execute failed: No database selected [for Statement "SELECT /*!40001 SQL_NO_CACHE */ * FROM `salaries`"]
SELECT /*!40001 SQL_NO_CACHE */ * FROM `salaries`

#-----------------------------------------------------------------------
# Stats
#-----------------------------------------------------------------------

failed_queries        0
not_select            8
queries_filtered      0
queries_no_diffs      0
queries_read          11
queries_with_diffs    0
queries_with_errors   3

良い点

環境の異なるサーバ間で、同じクエリを実行した結果を簡単に確かめることができます

バージョンアップを行う前に、移行後のデータの安全・整合性を確かめることができます

その他

クエリの実行結果を一度ファイルに保存しておき、そのファイルと比較することもできます

  • ・ pt-upgrade [オプション] --save-results [保存先ディレクトリ] [ログファイル] [DSN1]
  • ・ pt-upgrade [オプション] [リザルトディレクトリ] [DSN2]

--save-results [保存先ディレクトリ] : ログファイルに書かれたクエリと、その実行結果やレコードを保存します

[リザルトディレクトリ] : リザルトファイルのあるディレクトリを指定します

--save-results を使用すると、保存先のディレクトリに以下のようなファイルが作成されます

query 実行されたクエリ
results クエリの実行結果(エラー結果もしくは、警告や実行時間)
rows 抽出されたレコードの内容

比較結果が出力されるのは、以下のような場合です

Row Count 抽出されたレコードの行数が違う場合
Row Data 抽出されたレコードの内容が違う場合
Warnings 片方のホストで警告が出た場合
Query time クエリの実行時間が大幅に異なる場合
Query errors 片方のホストでエラーが起きた場合
SQL errors 両方のホストでエラーが起きた場合(文法エラー)
各データベース保守サービス比較
各データベース保守サービス見積依頼
MySQLサポートサービス
MySQL Editions
Oracle Cloudトータルサポート
Percona
MariaDBプロダクト・サポート・サービス
エンタープライズOSSサポート
高可用性ソリューション
OSSシステムソリューション
Navicat
SQL Diagnostic Manager for MySQL
SYNCNEL
OSS保守サポートサービス
Microsoft Azure
お問い合わせ
各MySQL保守サービス見積依頼
スマートスタイルOSSストア
Oracle Gold Partner

ページトップへ