Skip to content

Instantly share code, notes, and snippets.

@debility-zz
Created June 27, 2012 13:04
Show Gist options
  • Save debility-zz/3003955 to your computer and use it in GitHub Desktop.
Save debility-zz/3003955 to your computer and use it in GitHub Desktop.
mysqlcf log 20120627
MySQL Casual Talks Fukuoka
---
@Spring_MT はじめに
発表すること(内容じゃなくて)をcasualに
情報共有≠事業価値の欠損
---
@Spring_MT 新しいMySQLサイトを作るときのMySQL(大規模風味)
[資料] http://www.slideshare.net/blueskyblue/my-sql-casualinfukuokavol1
5.5 InnoDB UTF8 複数DBかつレプリケーション
DATETIMEよりTIMESTAMP使用できるなら一般的には使用するべき
UNIXTIMEを整数値で保存しても今のところ何の得もない
アプリ側でGMTに揃えてDATETIME型で保存してる<まだ解は出てない
DBわける前提なので基本JOINしない(ただし要件による)
Replication
master1/slave4
レプリケーション遅延->気付きにくい->開発では故意にレプリを遅延させる
-> pt-slave-delay Percona Toolkitの中のツールの一つ
Percona Toolkit < Maatkit Toolkitの後継
MySQL5.6からはCHANGE MASTER TOコマンドでMASTER_DELAYオプション指定できる(秒単位)
Sharding(マスタ分割)
AUTO_INCREMENT -> 使わない(使えない)
-> sequenceテーブル(id入ってる1行だけのテーブル)を作る
-> UPDATEでインクリメント生成したIDは接続ベースでサーバ内で保持される
Index
HandlerSocket
MySQLDBへのアクセスを高速化するためのプラグイン
http://engineer.dena.jp/2010/08/handlersocket-plugin-for-mysql.html
-> 単純なread/writeを高速にできる -> トランザクションはない
回数多いとか負荷かかりそうなやつとかを別ポート切ってHandlerSocketに飛ばす
DMY_PTHREAD_FASTMUTEX < Fedora16に入れる場合にconfigure optionから消す
# PHP -> http://code.google.com/p/php-handlersocket/
パフォーマンス出るよ(memcachedより上)
MHA
http://myhome.munetika.mydns.jp/ossdbwiki/index.php/MySQL-MHA%E3%81%AE%E5%B0%8E%E5%85%A5
master/slaveのズレを解消して自動でフェイルオーバ
障害 -> master切り替え -> 通知まで一連の処理をしてくれる
手動切り替えにも対応
トラフック多いサーバでも2-5秒で切り替え完了(De事例)
Q4M
MySQLストレージエンジンとして実装されているMessage Queue
MySQL5.1系だけが対応
トランザクションはない
http://restmq.com/
INSERT ... ON DUPLICATE KEY UPDATE
UNIQUEかPKで重複あったらUPDATE, なかったらINSERT
utf8mb4 < utf-8使うなら
http://d.hatena.ne.jp/hhelibex/20120110/1326179698
---
@matsukena 最近のバックアップ事情
[資料] http://www.slideshare.net/yokoninaritai/mysql-casial01-13470120
MySQLバックアップ&レストア
mysqldump
標準
論理バックアップ
データ大きいと時間かかる
--single-transactionでトランザクション
--order-by-primaryでリストア早く
--force -> viewで使用してるtable削除しちゃうユーザがいるから
--quote-name -> table名に特殊文字使うユーザがいるため
-- default-charactor-set=binary
-- hex-blob 16進でデータ入ってるのをdump
リストア高速化するために(InnoDB)
- 基本的にI/Oを減らしてる
- バイナリログOFF
- Double Write OFF --skip-innodb-doublewrite
- InnoDBログファイル 書き込まない
- InnoDBバッファプール 他に多く割り当てたら
- リストア終わったら必ず設定戻して再起動
ibbackup & innobackup
InnoDBのHotbackup
バイナリコピーでの物理バックアップ
有償
xtrabackup & innobackupex
ibbackup & innobackupみたいなOSS
無償
http://www.slideshare.net/riywo/tcpdump-xtrabackup-mysql-casual-talks-1
Mydumper
マルチスレッドのMySQLバックアップツール
論理バックアップ
5.5.22以前ではコンパイル通らなかった
http://www.mydumper.org/
LVMスナップショット
http://www.submit.ne.jp/1211
InnoDBホットバックアップ利点欠点
いつでもバックアップできる
OSに依存しない
スナップショット
スナップショット領域を事前に確保
瞬時にスナップショットとれる
運用まわりの話
ちゃんと別サーバにバックアップとってますか
バックアップの世代管理できていますか
ちゃんとリストアできますか
---
@koichi222 Amon2でMySQLを使う
Amon2
http://search.cpan.org/~tokuhirom/Amon2-2.09/lib/Amon2/Manual/Tutorial.ja.pod
Amon2::DBI
DBIの薄いラッパー
http://d.hatena.ne.jp/tokuhirom/20110719/1311064040
プラグインをロードして使う
UTF8フラグ関連のオプションを適切に設定する
-> mysql_enable_utf8を自動で有効にしてくれる
-> 通常DBIから取り出すとutf-8フラグがオフ
簡単なSQL生成機能
$dbh->insert($table, \%row);
selectとかは用意されてない
条件が複雑になってくるとしんどい
-> SQL::Interp
-> SQLとbind変数に分けて生成してくれる
http://search.cpan.org/~markstos/SQL-Interp-1.21/lib/SQL/Interp.pm
ネストしたトランザクションの管理
RaiseErrorがデフォルトで有効
---
@matsumana BKA JOINについて
[資料] http://www.slideshare.net/matsumana0101/mysql-casual-talks-lt-20120627
JOINアルゴリズムあれこれ
Nested Loop JOIN
Merge JOIN
Hash JOIN
MySQLにはNested Loop JOINしかない
Block Nested Loop Join
5.6.3m6からBatched Key Access Joinが登場
http://nippondanji.blogspot.jp/2009/01/mysql60join-bka.html
---
@akimicyu カジュアルにパーティショニング
[資料] http://www.slideshare.net/akimicyu/my-sql-13470549
設定したルールに従ってデータをパーティションする仕組み
MySQLでは5.1から利用可能
メリット
大量データによる性能劣化防止
アプリ側で設定ルールを意識する必要がない
デメリット
パーティショニングされたテーブルでは外部キー参照不可
使いどころ
ユーザの行動ログ
- 特にユーザ間相互作用
時系列に沿って大量データが生成されるもの
古いデータを選択的に削除したいもの
PARTISION p01 VALUES LESS THAN(10)
PARTISION p02 VALUES LESS THAN(10)
PARTISION p03 VALUES LESS THAN(10)
EXPLAIN PARTISIONS ... で効率的にパーティショニングが生きているかを評価
shardingとも併用可
- ユーザIDでshardingしつつ時系列パーティショニング
運用中のテーブルをパーティショニングするのは結構大変
- 設計段階で考慮しておいた方がいい
- 運用中DBをshardingするよりはcasual
---
@RKajiyama ロードマップの話 or NoSQLネタ
MySQL製品担当のかた
多数決でロードマップの話に決定->NoSQLはのちほど
5.6主な変更点
オプティマイザ: パフォーマンス&スケーラビリティ
パフォーマンス・スキーマ: より詳細な統計情報
InnoDB: トランザクションスループット向上
レプリケーション: さらなる可用性とデータの整合性
「NotOnlySQL」オプション
Binary Log Group Commit
Global Transaction Identifiers
-> トランザクションログにID振られる -> Masterこけたときにどっちのslaveが最新か調べやすいとか
MySQL Workbench
MySQL Utilities -> MHAの後任
---
@ayakomuro カジュアルにバックアップ
[資料] http://www.slideshare.net/popowa/mysql-cacual
バックアップしてますか?
物理バックアップ
mysqlbackup(InnnoDB)
mysqlhotcopy(MyISAM)
論理バックアップ
mysqldump
データベースの状態 -> hot,warm,cold
スナップショットでのバックアップ -> Veritas/LVM/ZFS
フルvs増加性バックアップ
注意すること -> スケジュール,圧縮,暗号化
mysqldumpのオプション
--xml, --debug-info, --force, --dump-slave
---
@zabbiozabbio 256分の1の不純な感情
(よいこはマネしちゃいけない話 なんだけど大丈夫なのでこっそり公開)
http://nakedsecurity.sophos.com/2012/06/13/anatomy-of-a-bug-the-mysql-authentication-disaster-patch-now/
と実演
memcmpが原因
環境依存が強い
MySQL公式バイナリなら大丈夫 -> http://twitter.com/RKajiyama/status/217958264825069568
---
@kitakoh 多分役に立たないもといメッチャ役に立つauto_incrementの話
普通にINSERT
idを指定してINSERT -> の後は最大値の次にINSERTされる
歯抜けのuser_idを指定 -> 歯抜け部分に入る
全行deleteしてINSERT -> 最後に使った値の次の値
TRUNCATEしてINSERT -> 1に巻き戻る(MySQL5.5 4.Xでは巻き戻らないとの話も)
idが最大の状態でINSERT -> ERRORになる
シーケンス値はALTER文で指定できるので操作可能
ALTER TABLE tbl auto_increment = 10;
SHOW CREATE TABLE tbl;
複合キーでauto_increment -> 複合キーで重複しないようにauto_incrementしてくれる(MyISAMのみ使える)
---
@RKajiyama(再登場) MySQLでNoSQL
「ブームに乗り遅れるな」
2種類のmemcached連携
MySQL Server 5.6の場合
プラグインとしてmemcachedインターフェースを追加
アプリからの接続先はMySQLサーバ
データ格納先はInnoDBテーブル
トランザクション利用可能
Memcachedプロトコルで会話できる
MySQL Cluster 7.2の場合
memcachedにNDB API用ドライバを追加
アプリからの接続先はmemcached
データ格納先はデータノード上のndbclusterテーブル
トランザクション利用可能
レプリケーション利用可能
スキーマ定義 -> kvsのデータをmappingしてRDBに整理してくれる
http://www.clusterdb.com/mysql-cluster/scalabale-persistent-ha-nosql-memcache-storage-using-mysql-cluster/
http://dev.mysql.com/tech-resources/articles/nosql-to-mysql-with-memcached.html
---
@yyamasaki1 私がMySQLを始めた理由
技術的に面白い
- プラガブルストレージエンジン
OSSである
ソースコードが公開されているので
- 自由に改造できる
- 問題を自力で解決できる
- (お金を払えば)ソースコードレベルのサポートが受けられる
フリー(自由)ソフトウェアである
http://www.amazon.co.jp/%E3%83%95%E3%83%AA%E3%83%BC%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E3%81%A8%E8%87%AA%E7%94%B1%E3%81%AA%E7%A4%BE%E4%BC%9A-%E2%80%95Richard-M-Stallman%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4%E9%9B%86-%E3%83%AA%E3%83%81%E3%83%A3%E3%83%BC%E3%83%89%E3%83%BBM%E3%83%BB%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%83%9E%E3%83%B3/dp/4756142818
---
大事な話
日本オラクルのMySQL部門社員募集中 -> MySQLが好きならおk
gumiさんも社員募集中ですよ -> pythonのひととか
10xlabも -> インフラの人はもうおなかいっぱい気味とか ぜいたくなまことにけしk
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment