製品&サポートサービス

pt-archiver

コマンド

pt-archiver [ オプション ] --source [ DSN ] --file "ファイル名" --where "条件文"

【必須項目】

  • ・ [ オプション ] : -p パスワード
  • ・ --source [ DSN ] : h=ホスト名, D=データベース名, t=テーブル名
  • ・ --file "ファイル名" : アーカイブした内容を保存するファイルを指定します
  • ・ --where "条件文" : アーカイブするレコードの条件を指定します(全レコード取得の場合は "1=1" と指定)

【主なオプション】

  • ・ --no-delete : デフォルトではアーカイブしたレコードが削除されるため、それを避ける時はこのオプションを使います
  • ・ --no-check-charset : デフォルトではレコードとアーカイブファイルとの間の文字コードの違いをチェックします
    このオプションを指定すれば、自動でデータベースの文字コードに合わせてくれます

目的

指定したテーブルのレコードを、他のテーブルに取り込める形式のファイルにアーカイブします

設定ファイル

上記の必須項目を、設定ファイルにまとめておきます ただし、--source、--file、--whereはコマンドライン上で直接指定する必要があるため、ここでは書きません

# touch /etc/percona-toolkit/pt-archiver.conf (設定ファイルの作成)
# vi /etc/percona-toolkit/pt-archiver.conf (設定ファイルの編集)
# config for pt-archiver
user=root (MySQL のユーザ名)
password=パスワード (MySQL のパスワードを記載)

シナリオ

以下のようなテーブルおよびレコードを用意します

pt-archiver01

以下のコマンドを実行し、上記のテーブルからidが106-110のレコードをアーカイブします。

# pt-archiver --no-check-charset --no-delete --source h=localhost,D=test,t=articles --file "/tmp/pt-archiver_result.txt" --where "id between 106 and 110"
# cat /tmp/pt-archiver_result.txt

結果

pt-archiver_result.txt の中に以下のような内容が書き込まれます。

pt-archiver02

このファイルを使えば、"LOAD DATA INFILE"文でレコードを取り込むことが出来ます。

# cp /tmp/pt-archiver_result.txt /var/lib/mysql/test/
mysql> TRUNCATE articles;
mysql> LOAD DATA INFILE "pt-archiver_result.txt" INTO TABLE articles;

pt-archiver03

良い点

行レベルで条件を指定して、別データベースへリストアする場合等に有効です

注意点

デフォルト設定で動かそうとすると、アーカイブされたレコードがテーブルから削除されてしまいます

その他

pt-archiver で保存されるファイルの形式は、MySQLの"SELECT INTO OUTFILE" と同じです
各フィールドはタブ区切られ、1レコードが改行(LF)で終わります
NULL は"N"で表され、特殊文字は飛ばされます

--file オプションでは、以下のような変数を用いてファイル名を付けることが可能です

  • %Y:西暦
  • %m:月
  • %d:日付
  • %H:時
  • %i:分
  • %s:秒
  • %D:データベース名
  • %t:テーブル名

今回のシナリオ内で実行したコマンドの --file オプション内を、

--file '/tmp/%Y-%m-%d-%D-%t.txt'

と設定すると、出力されるファイル名は" 2014-08-14-test-articles.txt "のようになります

MySQLや関連ソリューションに関するお問い合わせ、お見積などがございましたら、ご連絡ください。

お問い合わせ各MySQL保守サービス見積依頼スマートスタイルOSSストア

ページトップへ