SlideShare a Scribd company logo
tcpdump
    と
xtrabackup
   @riywo
アジェンダ
●
  tcpdumpとか
    ●
      tcpdumpでクエリ見る
    ●
      mk-query-digest
    ●
      MyQueryShow(3日で作った><)
●
    xtrabackupとか
    ●
      InnoDBのHotbackupの手法
    ●
      xtrabackupの使い方入門編
                              2
tcpdump
  とか
      3
tcpdumpでSQLを見る
●
  みんな大好きtcpdump
●
  たまにパケット落ちるけど結構使える
  ●
    libpcapはそんなもんらしい
●
  mysql(やmemcachedやhttp)はテキスト
  プロトコルなので読める!




                           4
tcpdumpでSQLを見る
tcpdump -s 0 -l -w - dst port 3306|strings|perl -e '
while(<>) { chomp; next if /^[^ ]+[ ]*$/;
   if(/^(SELECT|UPDATE|DELETE|INSERT|SET|COMMIT|
ROLLBACK|CREATE|DROP|ALTER)/i) {
     if (defined $q) { print "$qn"; }
     $q=$_;
   } else {
     $_ =~ s/^[ t]+//; $q.=" $_";
   }
}'


http://www.mysqlperformanceblog.com/2008/11/07/poor-mans-query-logging/

                                                                          5
6
tcpdumpでSQLを見る
●
  これだと実行時間がわからない。
●
  日本語ちょっと化ける。
    ●
        perlで頑張ればましになるかも。。
●
    ※MySQL 5.1なら
    ●
        set global long_query_time = 0でslow-
        logに全部出る!
    ●
        但しコネクションプールしてると出な
        い。。。(set globalは新規接続から)

                                           7
mk-query-digest
●
  Perconaの人が作ってるUtility scripts
  “Maatkit”の中の1つ
●
  http://www.maatkit.org
●
  id:marqs++
    ●
        http://www.slideshare.net/marqs/maat
        kit-4098945




                                          8
mk-query-digest
インストール

# wget http://maatkit.googlecode.com/files/maatkit-
7041.tar.gz
# tar xvzf maatkit-7041.tar.gz
# cd maatkit-7041
# perl Makefile.PL
# make & make install
  -> /usr/bin/mk-query-digest




                                                  9
mk-query-digest
一般的な使用例(mysqldumpslow的な)
# mk-query-digest slow.log




                             10
mk-query-digest
実はtcpdumpも食える!

# tcpdump -s 65535 -x -nn -q -tttt port 3306 >
/tmp/tcp.log
# mk-query-digest --type tcpdump /tmp/tcp.log




※おまけ 実はmemcachedのtcpdumpも食える!

# tcpdump -s 65535 -x -nn -q -tttt port 11211 >
/tmp/tcp.log
# mk-query-digest --type memcached /tmp/tcp.log

                                                  11
mk-query-digest
●
    reportはある時点の状況分析にはよさげ
    ●
        総実行時間や実行回数の割合
    ●
        実行時間の平均や95パーセンタイル
●
    せっかくなら継続的に結果をみたい
    ●
        時系列での変化を分析できると極めて有用
●
    ドキュメントをよく読んでみると…
    ●
        --review, --review-history
    ●
        クエリの種類毎に統計情報を記録する機能!
    ●
        SQLのレビュー用っぽい
                                     12
mk-query-digest
query_reviewをDBに記録しよう

# export DSN=”h=host,D=db,u=user,p=pw”
# mk-query-digest --review $DSN,t=query_review
--review_history t=query_review_history --create-
review-table --create-review-history-table ...




                                                    13
mk-query-digest
継続的に記録する

tcpdump.sh
#!/bin/sh
SEC=$1; HOSTNAME=`hostname`
/usr/sbin/tcpdump -s 65535 -x -nn -q -tttt (dst port 3306 or
src port 3306) and host $HOSTNAME 2> /dev/null &
PID=$!; sleep $SEC; kill $PID

mk-qd-review.sh
#!/bin/sh
DSN=$1; TCPFILE=$2
/usr/bin/mk-query-digest --no-report --type tcpdump --review-
history t=query_review_history --review $DSN,t=query_review
--create-review-table --create-review-history-table $TCPFILE
rm -f $TCPFILE
                                                            14
mk-query-digest
継続的に記録する

crontab
* * * * * /root/tcpdump.sh 30 > /tmp/tcp.log.`date '+%Y%m
%d_%H%M'` 2> /dev/null
* * * * * /root/mk-qd-review.sh h=host,D=test,u=test,p=test
/tmp/tcp.log.`date -d '1 minutes ago' '+%Y%m%d_%H%M'`
2> /dev/null



→これで毎分30秒間tcpdumpを記録して、
 その分析結果を継続的にDBに
 入れられる!(゚д゚)ウマー
                                                               15
mk-query-digest
●
    統計情報をDBに入れるメリット
    ●
        SQLで簡単に抽出等ができる
    ●
        例:〇〇時〇〇分から遅くなったクエリを探す
    ●
        でもSQLとかめんどいし。。。

●
    今流行はWEBアプリケーションだ!
    ●
        ブラウザでぽちぽち見れたら楽
    ●
        ついでにグラフとかにできたらもっと楽
    ●
        WEBアプリとか作ってみたい(←これが本音)
                                 16
作ってみた

「MyQueryShow」
https://github.com/riywo/MyQueryShow

                                   17
MyQueryShow




              18
MyQueryShow




              19
MyQueryShow
●
    WAF
    ●
        Amon2(tokuhirom++)
    ●
        シンプルで使いやすい!
●
    jQuery + jQuery Grid plugin
    ●
        APIじゃなくてHTMLから表を作成
●
    RRDTool
    ●
        毎分バッチで統計DBから値取って更新
    ●
        が、未実装。。
●
    デモ
                                  20
MyQueryShow
インストールなど

$ git clone git://...
$ cd MyQueryShow
$ cpanm -v --installdeps .
 ※ RRDsはがんばって入れて>< (apt/yum/port,brew)
$ plackup MyQueryShow.psgi
 → 足りないと言われたモジュールはがんばってcpanmだ!

$ perl -I./lib script/sync_data_to_rrd.pl
 → query_review(_history)をRRDに全部入れる
 ※ 基本的な運用としてはcronで今のデータだけを更新していく



                                            21
MyQueryShow
●
    問題点
    ●
        名前がダサい
    ●
        UIがダサい
    ●
        ロジックがSQL
    ●
        機能がしょぼい
        –   クエリ詳細のページにexplainとか欲しい
    ●
        DB複数の時どうする?
    ●
        ソース上のクエリの実行箇所がわからん
        – →クエリコメント!

                                     22
MyQueryShow
※おまけ クエリコメント

my $dbh = DBI->connect('dbi:mysql:host=host:dbname=test','test','test', {
    RaiseError => 1,
    Callbacks => {
        ChildCallbacks => {
            execute => sub {
                my ($obj, @binds) = @_;
                my (undef, $file, $line) = caller;
                $obj->{Database}->{Statement} .=
                    "/* $file:$line $obj->{Database}->{Name} */";
                return;
            },
        },
    },
});

↓

select * from query_review
where checksum = '26684480389196246'
                                                                            23
/* QueryComment.pm:30 host=localhost:dbname=test */
もっと
かっこいいの
 誰か作って
   ><24
xtrabackup
  とか
         25
InnoDBのHotbackup
●
    Hotbackupとは…
    ●
        更新を止めずにバックアップをすること
    ●
        バックアップ自体に時間がかかる(数時間はざら)
    ●
        →どうやって一貫性を保つか

●
    いくつかの方式
    ●
        LVMのスナップショット
    ●
        mysqldump --single-transaction
    ●
        ibbackup & innobackup
    ●
        xtrabackup & innobackupex
                                         26
InnoDBのHotbackup
●
    LVMのスナップショット
    ●
        あまりよく知らない><
    ●
        安定してなさそう
●
    mysqldump --single-transaction
    ●
        begin; してからmysqldumpする論理バックアップ
    ●
        データ増につれてバックアップ時間が長くなる
    ●
        ロールバックセグメントが肥大化する
●
    ibbackup & innobackup
    ●
        有償><

                                         27
InnoDBのHotbackup
●
    xtrabackup & innobackupex
    ●
        ibbackup & innobackup風のオープンソフトウェア
    ●
        オンラインで物理バックアップができる!
         – バックアップ時間はレコード増えてもほぼ一定
    ●
        無償で使える Percona++
    ●
        簡単な説明
         – WALを複製するプロセス
         – データファイルをコピーするプロセス
         – データファイルコピーが終わったら、WALを適応
         – (適応はInnoDBのクラッシュリカバリを利用)
         – →コピー終了時点の静止断面が完成!
                                            28
[ InnoDB Internals: InnoDB File Formats and Source Code Structure ]@MySQL University
   http://forge.mysql.com/wiki/InnoDB_Internals:_InnoDB_File_Formats_and_Source_Code_Structure
2. その間にdatafleをコピー
1. InnoDBのWALを二重に記録



                                                                      Copy of ibdata
                                xtrabackup_logfile

3. 終了後に記録しておいたWALを適応
[ InnoDB Internals: InnoDB File Formats and Source Code Structure ]@MySQL University
   http://forge.mysql.com/wiki/InnoDB_Internals:_InnoDB_File_Formats_and_Source_Code_Structure
xtrabackup使い方
インストール

・rpm/debを入れるのが簡単
・makeする場合、MySQLのbuildも必要なのでちょっと面倒
http://www.percona.com/downloads/XtraBackup/LATEST/

・xtrabackup
 WALのコピーとデータファイルのコピーができるCで書かれたプログ
ラム。

・innobackupex-XXX
 xtrabackupを便利に使うためのPerlで書かれたヘルパープログラ
ム。

http://www.percona.com/docs/wiki/percona-xtrabackup:start
                                                      31
xtrabackup使い方
■よくある使い方
WALのコピーもデータファイルのコピーもxtrabackupで

バックアップ
# innobackupex-1.5.1 --slave-info --user root
--password pass /tmp/xtrabackup/

■innobackupexの関数でフローを説明
start_ibbackup(); #xtrabackup起動 WALとデータのコピー開始
wait_for_ibbackup_suspend(); #データファイルコピー終了待ち
mysql_lockall(); #更新をロックしてbinlogポジション記録
backup_files(); #.frmとかmysqlとかMyISAMをコピー
resume_ibbackup(); #WALのコピーを停止
mysql_unlockall(); #ロックを解除

                                                32
xtrabackup使い方
ログの適応
# innobackupex-1.5.1 --apply-log
/tmp/xtrabackup/YYYY-mm-dd_HH-MM-SS/
xtrabackup: This target seems to be not prepared yet.
xtrabackup: xtrabackup_logfile detected: size=2097152, start_lsn=(538288766)
xtrabackup: Starting InnoDB instance for recovery.
InnoDB: Log scan progressed past the checkpoint lsn 538288766
101211 11:25:25 InnoDB: Database was not shut down normally!
InnoDB: Starting crash recovery.
InnoDB: Doing recovery: scanned up to log sequence number 538934654 (34 %)
101211 11:25:25 InnoDB: Starting an apply batch of log records to the database...
InnoDB: Progress in percents: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...
xtrabackup: starting shutdown with innodb_fast_shutdown = 1
101211 11:25:26 InnoDB: Starting shutdown...
101211 11:25:31 InnoDB: Shutdown completed; log sequence number 538934654

xtrabackup: This target seems to be already prepared.
xtrabackup: Starting InnoDB instance for recovery.
101211 11:25:32 InnoDB: Log file ./ib_logfile0 did not exist: new to be created
InnoDB: Setting log file ./ib_logfile0 size to 1024 MB
InnoDB: Database physically writes the file full: wait...
InnoDB: Progress in MB: 100 200 300 400 500 600 700 800 900 1000
xtrabackup: starting shutdown with innodb_fast_shutdown = 1
101211 11:26:07 InnoDB: Starting shutdown...                                             33
101211 11:26:12 InnoDB: Shutdown completed; log sequence number 538934796
xtrabackup使い方
■よくある使い方2
WALのコピーをxtrabackupで、コピーはtar4ibdで
ついでにgzipで固める(lzopの方が速くていいかも)

# innobackupex-1.5.1 --stream=tar --slave-info --user
root --password pass ./ | gzip - > backup.tar.gz

・親プロセス
 wait_for_ibbackup_suspend(); #xtrabackupの準備待ち
 tar4ibdでデータファイルをSTDOUTへ
 mysql_lockall();以下同文(但し出力はSTDOUT)

・子プロセス
 xtrabackup --log-stream --target-dir=./
 WALのコピーを行うだけ。始まったらsuspendファイル作る 
                                                  34
xtrabackup使い方
■よくある使い方3
WALのコピーをxtrabackupで、コピーはscpで

# innobackupex-1.5.1 --remote-host=host --slave-info
--user root --password pass /tmp/xtrabackup/

・親プロセス
 wait_for_ibbackup_suspend(); #xtrabackupの準備待ち
 データファイルをscpでリモートホストへ
 mysql_loclall();以下同文(但し全てリモートホストへ)

・子プロセス
 xtrabackup --log-stream --target-dir=./
 WALのコピーを行うだけ。始まったらsuspendファイル作る 

                                                  35
時間切れ
 ><
       36
続きは
MySQL Casual
  Talks #2
   で(^^)v
           37
Thanks
 Oracle++
myfnder++
Speakers++
Listeners++   38
Thank you for listening


God bless your MySQL!

       @riywo
                          39

More Related Content

PDF
MySQL 初めてのチューニング
PPTX
MySQLの運用でありがちなこと
KEY
Mysql casial01
PPTX
MySQL clients
PDF
MHA for MySQLとDeNAのオープンソースの話
PDF
MySQLの冗長化 2013-01-24
PPTX
MySQLメインの人がPostgreSQLのベンチマークをしてみた話
PDF
MySQL ガチBeginnerがやってみたことと反省したこと
MySQL 初めてのチューニング
MySQLの運用でありがちなこと
Mysql casial01
MySQL clients
MHA for MySQLとDeNAのオープンソースの話
MySQLの冗長化 2013-01-24
MySQLメインの人がPostgreSQLのベンチマークをしてみた話
MySQL ガチBeginnerがやってみたことと反省したこと

What's hot (20)

PDF
DBスキーマもバージョン管理したい!
PDF
MySQLやSSDとかの話 前編
PDF
MySQLバックアップの基本
PPT
Handlersocket 20140218
PDF
MHAの次を目指す mikasafabric for MySQL
PPT
Handlersocket etc. 20110906
PDF
ゆるふわMySQLフェイルオーバー
PDF
MySQLチューニング
PDF
MySQL 5.6新機能解説@dbtechshowcase2012
PPTX
MySQL Clusterを運用して10ヶ月間
KEY
My sql casual_in_fukuoka_vol1
PDF
MySQL Casual Talks in Fukuoka vol.2
PDF
Mysql toranomaki
PDF
MySQL カジュアル 福岡 03
PPT
実践!データベースリファクタリングツール
PDF
MySQLを割と一人で300台管理する技術
PDF
MySQL5.7 GA の Multi-threaded slave
PDF
MySQLやSSDとかの話 後編
PDF
sysloadや監視などの話(仮)
PDF
「今そこにある危機」を捉える ~ pg_stat_statements revisited
DBスキーマもバージョン管理したい!
MySQLやSSDとかの話 前編
MySQLバックアップの基本
Handlersocket 20140218
MHAの次を目指す mikasafabric for MySQL
Handlersocket etc. 20110906
ゆるふわMySQLフェイルオーバー
MySQLチューニング
MySQL 5.6新機能解説@dbtechshowcase2012
MySQL Clusterを運用して10ヶ月間
My sql casual_in_fukuoka_vol1
MySQL Casual Talks in Fukuoka vol.2
Mysql toranomaki
MySQL カジュアル 福岡 03
実践!データベースリファクタリングツール
MySQLを割と一人で300台管理する技術
MySQL5.7 GA の Multi-threaded slave
MySQLやSSDとかの話 後編
sysloadや監視などの話(仮)
「今そこにある危機」を捉える ~ pg_stat_statements revisited
Ad

Viewers also liked (13)

PDF
Tcpdump basico
PPT
TCPdump-Wireshark
PPT
Tomasz P from Poland
PPTX
Cain and abel
PPTX
Kismet
PPT
09 Cain And Abel
PPTX
Tcpdump
PPTX
Wireshark
PPTX
Tcpdump hunter
PPT
Tcpdump
PPTX
Practical Packet Analysis: Wireshark
PPT
Wireshark - presentation
PPTX
Network Packet Analysis with Wireshark
Tcpdump basico
TCPdump-Wireshark
Tomasz P from Poland
Cain and abel
Kismet
09 Cain And Abel
Tcpdump
Wireshark
Tcpdump hunter
Tcpdump
Practical Packet Analysis: Wireshark
Wireshark - presentation
Network Packet Analysis with Wireshark
Ad

Similar to tcpdump & xtrabackup @ MySQL Casual Talks #1 (20)

KEY
Web Operations and Perl kansai.pm#14
PDF
HashiCorpのNomadを使ったコンテナのスケジューリング手法
PDF
LINEのMySQL運用について
PDF
Maatkitの紹介
PDF
20140612_Docker上でCloudStackを動かしてみる!!
PDF
Webサーバのチューニング
PDF
ioMemoryとAtomic Writeによるデータベース高速化
 
PDF
Node予備校 vol.1 名古屋
PDF
TripleOの光と闇
PPT
Maatkit で MySQL チューニング
PDF
配布用Beginnerならきっと役立つmaster slave環境
PDF
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
PDF
Lxc cf201207-presen
PDF
データマイニング+WEB勉強会資料第6回
PPT
HandlerSocket plugin for MySQL
PDF
Fluentdでログを集めてGlusterFSに保存してMapReduceで集計
PDF
[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き
PDF
Puppet on AWS
PDF
Apache cloudstack4.0インストール
PDF
ゲームのインフラをAwsで実戦tips全て見せます
Web Operations and Perl kansai.pm#14
HashiCorpのNomadを使ったコンテナのスケジューリング手法
LINEのMySQL運用について
Maatkitの紹介
20140612_Docker上でCloudStackを動かしてみる!!
Webサーバのチューニング
ioMemoryとAtomic Writeによるデータベース高速化
 
Node予備校 vol.1 名古屋
TripleOの光と闇
Maatkit で MySQL チューニング
配布用Beginnerならきっと役立つmaster slave環境
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
Lxc cf201207-presen
データマイニング+WEB勉強会資料第6回
HandlerSocket plugin for MySQL
Fluentdでログを集めてGlusterFSに保存してMapReduceで集計
[A33] [特濃jpoug statspack on pdb oracle database 12c] 20131115 補足・続報付き
Puppet on AWS
Apache cloudstack4.0インストール
ゲームのインフラをAwsで実戦tips全て見せます

More from Ryosuke IWANAGA (9)

PDF
"I want to use Fluentd" Fluentd Casual Talks LT
PDF
"Mobage DBA Fight against Big Data" - NHN TE
PDF
"Ops Tools with Perl" 2012/05/12 Hokkaido.pm
KEY
English Casual 2012/05/10
KEY
Devsumi2012 攻めの運用の極意
PDF
20120127 LDeNA LT riywo
KEY
#bphbqpstudy2012 LT riywo
PDF
qpstudy#5 懇親会LT riywo
ZIP
Tsukuba.R#4
"I want to use Fluentd" Fluentd Casual Talks LT
"Mobage DBA Fight against Big Data" - NHN TE
"Ops Tools with Perl" 2012/05/12 Hokkaido.pm
English Casual 2012/05/10
Devsumi2012 攻めの運用の極意
20120127 LDeNA LT riywo
#bphbqpstudy2012 LT riywo
qpstudy#5 懇親会LT riywo
Tsukuba.R#4

tcpdump & xtrabackup @ MySQL Casual Talks #1