Contenu connexe
Similaire à tcpdump & xtrabackup @ MySQL Casual Talks #1 (20)
Plus de Ryosuke IWANAGA (9)
tcpdump & xtrabackup @ MySQL Casual Talks #1
- 2. アジェンダ
●
tcpdumpとか
●
tcpdumpでクエリ見る
●
mk-query-digest
●
MyQueryShow(3日で作った><)
●
xtrabackupとか
●
InnoDBのHotbackupの手法
●
xtrabackupの使い方入門編
2
- 5. 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
- 7. tcpdumpでSQLを見る
●
これだと実行時間がわからない。
●
日本語ちょっと化ける。
●
perlで頑張ればましになるかも。。
●
※MySQL 5.1なら
●
set global long_query_time = 0でslow-
logに全部出る!
●
但しコネクションプールしてると出な
い。。。(set globalは新規接続から)
7
- 11. 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
- 12. mk-query-digest
●
reportはある時点の状況分析にはよさげ
●
総実行時間や実行回数の割合
●
実行時間の平均や95パーセンタイル
●
せっかくなら継続的に結果をみたい
●
時系列での変化を分析できると極めて有用
●
ドキュメントをよく読んでみると…
●
--review, --review-history
●
クエリの種類毎に統計情報を記録する機能!
●
SQLのレビュー用っぽい
12
- 15. 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
- 16. mk-query-digest
●
統計情報をDBに入れるメリット
●
SQLで簡単に抽出等ができる
●
例:〇〇時〇〇分から遅くなったクエリを探す
●
でもSQLとかめんどいし。。。
●
今流行はWEBアプリケーションだ!
●
ブラウザでぽちぽち見れたら楽
●
ついでにグラフとかにできたらもっと楽
●
WEBアプリとか作ってみたい(←これが本音)
16
- 20. MyQueryShow
●
WAF
●
Amon2(tokuhirom++)
●
シンプルで使いやすい!
●
jQuery + jQuery Grid plugin
●
APIじゃなくてHTMLから表を作成
●
RRDTool
●
毎分バッチで統計DBから値取って更新
●
が、未実装。。
●
デモ
20
- 21. 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
- 22. MyQueryShow
●
問題点
●
名前がダサい
●
UIがダサい
●
ロジックがSQL
●
機能がしょぼい
– クエリ詳細のページにexplainとか欲しい
●
DB複数の時どうする?
●
ソース上のクエリの実行箇所がわからん
– →クエリコメント!
22
- 23. 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 */
- 26. InnoDBのHotbackup
●
Hotbackupとは…
●
更新を止めずにバックアップをすること
●
バックアップ自体に時間がかかる(数時間はざら)
●
→どうやって一貫性を保つか
●
いくつかの方式
●
LVMのスナップショット
●
mysqldump --single-transaction
●
ibbackup & innobackup
●
xtrabackup & innobackupex
26
- 27. InnoDBのHotbackup
●
LVMのスナップショット
●
あまりよく知らない><
●
安定してなさそう
●
mysqldump --single-transaction
●
begin; してからmysqldumpする論理バックアップ
●
データ増につれてバックアップ時間が長くなる
●
ロールバックセグメントが肥大化する
●
ibbackup & innobackup
●
有償><
27
- 28. InnoDBのHotbackup
●
xtrabackup & innobackupex
●
ibbackup & innobackup風のオープンソフトウェア
●
オンラインで物理バックアップができる!
– バックアップ時間はレコード増えてもほぼ一定
●
無償で使える Percona++
●
簡単な説明
– WALを複製するプロセス
– データファイルをコピーするプロセス
– データファイルコピーが終わったら、WALを適応
– (適応はInnoDBのクラッシュリカバリを利用)
– →コピー終了時点の静止断面が完成!
28
- 29. [ 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
- 30. 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
- 33. 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