mysqlのreplication関連リンクまとめ

mysqlのreplication関連情報まとめ

こんにちは。小宮です。
なんだかmysqlのことを聞かれることが多い今日この頃なので、
聞かれたときコピペできるように聞かれがちなことが説明されてるリンクをまとめる試みです。
この記事だけ読んでも大したことはわかりませんのであしからずご了承ください。
(自分がすっかり忘れたときにも役立ちそうです。)

・基本
現場指向のレプリケーション詳説
漢(オトコ)のコンピュータ道: MySQLレプリケーションを安全に利用するための10のテクニック
Art of MySQL Replication.
バイナリログに書かれるのは更新系のクエリです。
補足すると、I/Oエラーは、物理的にディスクが壊れた、ネットワーク的につながらない、レプリケーション用ユーザのIDとパスワードが間違っている、server_idが重複している
 などの理由で起こることがあります。SQLエラーの主な原因は上記の最初のリンクに書いてありますが主に重複エラーが多い印象です。

参考までに現在のreplicationまわりの設定値はだいたいこんなかんじです。

[shell]## replication (master/slave)
log-bin=mysql-bin
log-bin-index=mysql-bin.index
binlog_format=mixed
server-id = 133
relay-log=mysqld-relay-bin
relay-log-index=mysql-relay-bin.index
log_slave_updates=1
replicate-ignore-db=mysql,information_schema,performance_schema
binlog-ignore-db=mysql,information_schema,performance_schema
skip_slave_start
read_only
slave_net_timeout=120

## replication (for 5.6)
gtid-mode = OFF
enforce_gtid_consistency=false
master-info-repository=TABLE
relay-log-info-repository=TABLE
relay_log_recovery=ON
#sync-master-info=1
slave-parallel-workers=0
binlog-checksum=CRC32
#master-verify-checksum=1
#slave-sql-verify-checksum=1
binlog-rows-query-log_events=1
#log_bin_use_v1_row_events=ON
#sync_binlog=1
report-port=3306
report-host = 192.168.1.133[/shell]

えーと、マスタとスレーブはHA組んでいて役割が交換される可能性があるので、
log_slave_updatesほか両方同じパラメータ(server_idとreport-host以外)かつ同じスペックにしてます。
replication関係ないですがパラメータの一部を載せたので言及しますと、
ディスクが複数あるならシステム領域とデータ領域分けるとI/O負荷を分散できていいかと思います。
awsならエフェメラルディスクをtmpdirに指定するといい気がします。

・特定のDBやテーブルをレプリケーションさせる、させない
MySQL :: MySQL 5.1 リファレンスマニュアル :: 5.5.6 サーバのレプリケーション ルール評価
これらはオンラインで変えることはできない模様(5.7あたりからは変えられるようになるらしいです)

・リレーログの仕様について
MySQL :: MySQL 5.1 リファレンスマニュアル :: 5.5.5.1 スレーブ リレー ログ
MySQLリレーログの仕様を学ぶ – OpenGroove
MHA検証したときにリレーログ残す必要が生じて調べました。

・遅延対策
漢(オトコ)のコンピュータ道: MySQLにおけるレプリケーション遅延の傾向と対策
MySQLがレプリケーション遅延がALTERで治った – takami_hirokiの日記
実はCreated_tmp_disk_tablesが増えててディスクに一時テーブル作られてたから遅延してて
tmp_table_sizeとmax_heap_table_size増やしたら解消したこともありました。

・意図的に遅延させる
mk-slave-delay使って開発環境のslaveDBを3秒意図的に遅延させるdaemontools shell
MySQLのレプリケーション遅延をローカルで再現させる手順 その2 – 株式会社CFlatの明後日スタイルのブログ
MySQL :: MySQL 5.6 Reference Manual :: 16.3.9 Delayed Replication
※5.6からCHANGE MASTER TO MASTER_DELAY = N;でOK。5.5以前はpt-slave-delayが必要。

・重複エラー
MySQLレプリケーション 1062エラーの対処 – OpenGroove
MySQLのslaveでDuplicate entryエラーが出た時の対処 | DEVLAB
あんまり重複するようならマスタからdumpしてスレーブにロードして整合性合わせたほうがいいことも。

・整合性チェック
pt-table-checksum — Percona Toolkit Documentation
OSSリファレンス: [MySQL]Maatkitによりレプリケーションの整合性をチェックする
使ったことはないけどこんなのもあるみたいですね。

・5.6でGTID
MySQL5.6のちょっとした話 – まめ畑
MySQL-5.6.5の新機能「GTID」を使う際に抑えておきたい落とし穴 – Y-Ken Studio
Global Transaction IDを使ってレプリケーション構成とした際の制限 – hiroi10の日記
ちなみにGTID有効でs-inしてる環境を見たことがないです。(2014/4現在)

・5.6のreplication全般
Yakst – MySQL 5.6でスレーブをクラッシュセーフにするには
MySQL 5.6での機能強化点(その3)- 人気のレプリケーションが更に機能強化 | Think IT
日々の覚書: 噂どおりのslave_parallel_workers

・5.5と5.6のreplication
日々の覚書: MySQL5.6のマスターにMySQL5.5(とそれ以前)のスレーブをぶら下げるとエラる
MySQL-5.5/5.6でのレプリケーション利用者に伝えたい「RESET SLAVE」にまつわる怖い話 – Y-Ken Studio はてブロ支店
日々の覚書: MySQL5.6とMySQL5.0のレプリケーションでI/OスレッドがError: 2049

・semi-sync
漢(オトコ)のコンピュータ道: 最強のMySQL HA化手法 – Semi-Synchronous Replication
MySQL 5.5 GA版が出たのでSemisynchronous Replicationを使ってみた – As a Futurist…
MySQL Semi-Synchronous Replication. See the Magic. Try the Magic. « Ronen Baram

・ssl接続
suz-lab – blog: MySQLにSSLで接続
suz-lab – blog: MySQLのレプリケーションをSSL接続で
ちなみにsslしたいという話自体あんま聞かないです。部分的にデータ同期して解析したいみたいなことかも。
そもそもDBがフロントsegに接することが稀でグローバルでなくVPN経由する感じが一般的かと思いますです。

・殿堂入りのN:1のやつ(自分ではやりたくないけどこういう人もいるんだ的な)
マスターn対スレーブ1レプリケーションの作り方 – do_aki
フツーはdatadirとportとログファイル名とかくらいは変えてやると思うんですよね。。まあつまり同じインスタンスでは普通にn:1はできないです。
MySQL 5.7では multi-source replicationてのが出きるようになるかもと聞き及びますが開発中で定かでない感じです。

・多段replication構成について
ウチでは多段構成の障害時の対応はできません。中間ノード障害への対応が複雑になるためです。
解析の為になくなっても大丈夫(または営業時間内に復旧すればOKくらい)な孫スレーブを作る
というのなら許容範囲かとおもいます。止めたらサービス停止に直結という話なら無理かと。
社内で今そんな構成があったらなぜそんな構成にしたのか詳しく確認してしまいそうです。
スレーブが増えすぎてマスタのCPUとかNICの帯域が足らなくなったなら他にどうしようもない
ようですが、幸運なことにそんな環境は今のところみたことがないです。

こう見てみるとreplicationだけでも意外と情報量があるんですね。
以下はおまけでreplicationそのものではない情報ですが載せておきます。

・MHA
MHA for MySQLとDeNAのオープンソースの話
mysql-master-ha – MHA for MySQL: Master High Availability Manager and tools for MySQL – Google Project Hosting
MySQL-MHAを試してみる – DRY(日本やアメリカで働くエンジニア日記)
MySQL-MHAを利用してMySQLの自動フェイルオーバーを実現してみた – FAT47の底辺インフラ議事録
mysql-mhaを入れてみた! その2
MHA, Murakumo & Me
MHA(MasterHighAvailabilityManager)の導入設定 | DEVLAB
MHAの動作確認と切替検証 | DEVLAB

・mysqlfailover
mysqlfailoverの–exec-beforeと–exec-after – hiroi10の日記
mysqlfailoverをデーモンになってから試してみた | DEVLAB

・その他のHA
レプリケーションしてるMySQLで、マスタやスレーブが障害停止した場合のリカバリプラン – (ひ)メモ
Mysqlのha構成について

・ALTER TABLE
漢(オトコ)のコンピュータ道: ALTER TABLEを上手に使いこなそう。
MySQLでカラムやインデックスの追加、削除をするときのロックの話など – (゚∀゚)o彡 sasata299’s blog
MySQLでALTER TABLE文の進捗状況を確認する – SH2の日記
MySQLでALTER TABLEでINDEXを作成するときの注意事項 | DEVLAB

・バックアップ
MySQLのMyISAMが混在する環境のバックアップについて注意事項 | DEVLAB
gtidを使用した環境でのmysqldump – hiroi10の日記
5.6以前のバージョンのMySQLにimportする場合、また、リモートの5.5サーバから5.6のmysqldumpを使用してダンプする場合は、、mysqldumpに–set-gtid-purged=OFFを付けないとダメ
GTID有効な場合、mysqldumpに–triggers –routines –eventsも付けないとエラーがでる
mysqldumpの–order-by-primaryオプションについて – SH2の日記
MySQLのバックアップ運用について色々

・差分がでちゃった
pt-table-syncでmysqlのmasterとslaveの差分を吸収する – Qiita

・パラメータチューニング
5.6っぽいの含む記事
MySQL 5.6 パラメータ検討会 – SH2の日記
日々の覚書: MySQL5.6での新しい暗黙のデフォルトを改めて
InnoDBパフォーマンスチューニング・新機能 – ORACLE
MySQL 5.6 パラメータ検討会(slide)
Yakst – (帰ってきた)InnoDBパフォーマンス最適化の基礎
MySQL の unknown option エラーはオプションに loose- プレフィックスをつけると回避できる – かみぽわーる
[D14] MySQL 5.6時代のパフォーマンスチューニング *db tech showcase 2013 Tokyo
MySQL 5.1→5.6のmy.cnfの差分とか – (ひ)メモ
それ以外
MySQL のチューニング (ボトルネックの検出) : Figure out!! -ドリコムエンジニアブログ
MySQLチューニング
DSAS開発者の部屋:5分でできる、MySQLのメモリ関係のチューニング!
MySQLお勉強メモ(サーバ設定項目) | きぬろぐ
numa関連
【メモ】MySQLでのswap発生とNUMAアーキテクチャ – FAT47の底辺インフラ議事録
MySQL InnoDBストレージエンジンのチューニング(後編)(gooニュース×EnterpriseZine) – goo ニュース
MySQL と NUMA アーキテクチャと Swap Insanity | COLOPL Engineers’ Blog
革命の日々! numactl の使い方
innotop参考
日々の覚書: innotopがすごく便利
innotopでMySQL状態をtop風に表示(グループ単位で!) – mikedaの日記
MySQL – innotopのtips – Qiita
innotop – A powerful “top” clone for MySQL – Google Project Hosting

・そのた5.6情報
第2回 MySQL5.6 – さらなる機能追加とNoSQL | Think IT
MySQL 5.6での機能強化点(その1) – パフォーマンスと使い勝手を大きく向上 | Think IT
MySQL 5.6新機能解説@dbtechshowcase2012
MySQL5.6の気になる新機能をチェック! | アライドアーキテクツ エンジニアブログ
MySQL5.6で今までのVerでは問題無かったSQL文がエラーになった場合の対処法 – oranieの日記
MySQL 5.6のInnoDB memcached pluginを使ってみる – 酒日記 はてな支店
MySQL5.6関連情報まとめ

・トラブルの思い出
mysqlのHAがらみのトラブルの思い出 – smallpalace’s blog
あまり思い出したくはない青い春の記録といいますか。

・RDS
NHNテクノロジーカンファレンスで見たDeNAのMySQL運用の話とAmazon RDSの比較など。 « debiancdn
EC2・オンプレ環境のMySQLからRDSのマイグレーションがやりやすくなった – まめ畑
Amazon RDSでMySQLパラメータを変更する – OpenGroove
Amazon RDS(MySQL)でTimezoneを変更する | Developers.IO
Using Replication to Export Amazon RDS MySQL 5.6 Data – Amazon Relational Database Service
CDP:Read Replicaパターン – AWS-CloudDesignPattern
RDSの好きなところはポイントインタイムリカバリがブラウザでできちゃうとこ。
嫌いなところはF/Oの断時間がながいとこと外部にスレーブが持てるのが5.6.13以降からなところ、です。

・chefのレシピ(みかけただけで試してない)
Chef mysql master/slave recipes

・参考書籍
「実践ハイパフォーマンスMySQL 第3版」
「エキスパートのためのMySQL[運用+管理]トラブルシューティングガイド」
「現場で使える MySQL」
「MySQL 辞典 (Desktop reference)」

キリがアレなのでとりあえず今回はこの辺にさせていただきます。
何か思いだしたら追記するかもしれません。これもオススメ等あれば教えてください。

読んでいただいた方はどうもありがとうございました。

おすすめ記事