>slaveのレプリケーションが止まったら時間操作系のスタンドで直すことができる2015/12/25MySQLがあって、masterのDBとslaveのDBがあって、masterからslaveにレプリケーションしている。朝の食卓にパンとコーヒーとミルクが並んでいるくらい、ありふれた光景です。「朝は和食だろ!」という方は、MySQLではなくEXCELをおススメします(理不尽!で、slaveのレプリケーションが何らかの理由で止まる。slaveが読み取り専用等でサービスに使われておらず、単にバックアップのためだけであれば、まだ慌てる時間じゃありません。実サービスに影響はないので、おちついて対応しましょう。パンが少しだけ焦げたのかもしれません。本日の朝食はこんなコースです。食あたり起こしますね。1.現状確認2.対応3.原因調査2と3は逆になることもあります。原因を特定しないと直せないケースや、原因を解決しないと一時的に対応しても再発するケースなどがそれです。今回は実サービスに直接影響が出ていないので、とりあえずの一次対応を急いで行い、そのあとでじっくりと調査する、という作戦にしました。slaveのmysqlに入ります。slaveのstatusを見るコマンド。status\Gつまり現状確認ですね。sec)ポイントはこれ。「このクエリが実行されたらレプリケーションが死んだよ」ということです。そのログ名と止まったログの位置はこれで確認できます。672229502できませんでした(早ッググって出てきた方法全部試したのですが、どれも動かなかったりログが流れてしまったりで「こうしたら→こうなる!」的な情報皆無。場所を特定できたところで、このクエリがある限りレプリケーションはダメであり、かつこのクエリは既に実行されているという事実は変わりません。覆水盆にドント・バイツァ・ダスト。焦げたパンを悔やむな。↑今適当に作ったけどこれ結構良くないですか?まあようするに、このクエリは無かったことにして続きを続行させるしかありません。このクエリが実行された事実だけをジャンプする。覆水盆にキング・クリムゾン。焦げたパンなんてなかった。「お前は矢に拒否されたんだァァァーッ!」って叫びながら、こんなコマンドを実行します。sec)エラーの時間が一度だけ「消飛ぶ」ッ!そしてレプリケーションを再開してみます。sec)うまくいったみたいです。再度、現状確認をしてみましょう。sec)master、slaveともにYes、Yes、Yes。Yes動いているってことです。slaveのレプリケーションが止まっている間も、masterは動き続けていたわけです。slave(奴隷)がサボっている間も、master(主人)は黙々と働き続けていたわけです。いうことは、両者の間に時間差がある訳です。slaveに取り込まれていない、master側のデータが溜まっているはずです。STATUSの結果に載っていました。どれだけ「時間は止まっていた」のでしょうか?見てみましょう。5650856508秒。15時間41分48秒。長いわ!「これから静止時間15時間41分48秒のうちにカタを付けるッ!」って十分だぜ承太郎!そもそもなぜこんな長時間障害が放置されていたの?という気持ちをグッっとこらえて作業作業。我々は皆、運命の奴隷(slave)なのです。それにしてもmaster(主人)とかslave(奴隷)とか酷い用語ですよね。サッカーのサドンデスとか自殺点みたいに、違う用語に置き換えてあげたい気がします。maid(メイド)とかダメですかね?master(主人)とslave(奴隷)だと、エジプトあたりでムチ打たれながらピラミッドの石運んでる感じで嫌です。ところがそれがmaster(ご主人様)とmaid(メイド)になるとあら不思議、とっても優しい世界。この15時間、どうやって取り戻すのでしょう?15時間待っていれば良い?いやいや、その間もサービスは動いているのですから、masterからslaveにデータが送り続けられてきます。いうことは15時間の差は絶対に埋まらない?そんなことはありません。slaveは時を加速して追いつくのです。「時は加速する」ッ!どのようにご主人様に追いついたのか、実際の記録を公開します。皆で「時の再加速」を追体験しましょう。それでは行きます!「maid・イン・ヘブン」ッ!10:00頃・・・レプリケーション再開56508秒(15時間41分)10:40・・・アナスイ、徐倫との結婚許可を求める(承太郎却下)52786秒(14時間39分)10:50・・・海に入る。50931秒(14時間08分)11:00・・・重い処理が走って時間差が開く。51526秒(14時間18分)11:20・・・「2手・・・遅かったな・・・」51002秒(14時間10分)10:30・・・承太郎、エルメェス死亡46190秒(12時間49分)12:00・・・徐倫死亡36355秒(10時間05分)13:00・・・特異点30980秒(8時間36分)14:20・・・ぼくの名前はエンポリオです0秒(追いついた)15時間の差を4時間20分で取り戻したことになります。(その間の経過時間も含めると19時間を4時間で取り戻すことが可能ということですね。サーバスペックや回線速度、なによりもデータ量によってこの結果は大幅に変わることでしょう)ちなみにこんなに待つのが嫌な場合、別の方法もあります。いうよりむしろこっちが本筋かもしれませんが。statusの結果をもとに、こんな感じのを実行する。MASTER_HOST=’123.45.6.789′,MASTER_USER=’repl’,MASTER_PASSWORD=”,MASTER_LOG_FILE=’mysqld-bin.003748′,MASTER_LOG_POS=714615665;つまり物理的にmasterとslaveを同じにして、ほんの少しの差の部分からレプリケーションを再開するということです。statusの結果をもとに、こんな感じのを実行する。←開始位置合ってるか不安かも!なのでよほどの事情がなければ、個人的には「メイド・イン・ヘブン」がいいんじゃないかなあと思うのですよ。解決したように見えますが、「そもそもなぜレプリケーションは止まったのか?」を突き止めないうちは、本当の解決にはなりません。コメントをキャンセルメールアドレスが公開されることはありません。...dumpした大容量sqlファイルでDBを構築-IT版本当にあった怖い話(レベル8)途中までは、よくある話。...データベースが重いからMySQLをチューニングするむかーしむかし、あるところにMySQLがありました。...Vagrantの時刻を修正する何だか管理ツールのタイマー機能が動いてない。...コマンドラインでMySQLを操作するまとめ(復習)phpMyAdminなどで運用中心にやっているとコマンドラインを忘れがち。...日本では意外にポケモンGoが流行らないかもしれない唐突に、ですが。