なんと!
運用しているサイトのスレーブ側のレプリケーションが2週間ほど前から止まっていました!!
止まっていたことよりも、それに2週間も気がつかない自分にショックでした・・・
とにかく、くよくよしていてもしかたがないのでとりあえず修復。レプリケーションを再開させます。
原因追及として手がかりになるのは、スレーブ側で出ていたエラーメッセージで、『あるテーブルのidフィールドはユニークなのに重複しているものをインサートしようとしているよ!』ってことでした。なにやら、マスター側でのmigrationが原因なのでしょうか・・・
とりあえず、レプリケーションはバックアップの要素も兼ねているの、早々と復旧させます。
ここから、作業log
■マスター側で現在のポジションを確認
$ mysql -u -p
mysql> show master status;
+—————-+———-+————–+——————+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+—————-+———-+————–+——————+
| db1-bin.000009 | 288992 | | |
+—————-+———-+————–+——————+
こんな、感じ。
■スレーブ側でレプリケーションを停止
$ mysql -u -p
mysql> stop slave;
■現在のポジションで上書き
mysql> change master to master_host=’db1.matatavi.com’,
master_user=’接続ユーザー’,
master_password=’接続パスワード’,
master_log_file=’db1-bin.000009′, #show master statusの内容
master_log_pos=288992; #show master statusの内容
■情報が保存されたか確認
$ cat relay-log.info
./ap1-relay-bin.000001
37784
db1-bin.000009
326731
■スレーブの起動
$ mysql -u -p
mysql> start slave;
これでエラーがでなければ修復完了です。やれやれ・・・
後は、なぜレプリケーションが止まっていたかの追跡を行っていく予定です。
「 フューチャリスト宣言」を読んだ。
ネットのない生活に満足している人はネットに側にこないというのは納得。かといって、ネットのない生活に満足していないからネット側にいるわけではない(そういう人はいわゆるVIPな人なのかなw)。
私の場合単純にネットから得られる知識に知的好奇心が満たされていく感じで、コミュニケーショツールとしてはあまり有効には使えてない。blogにmixiにしろ有効にネットワークを作っている人が身近にいるので自分にはできない能力だな。
もうちょっと使いこなせばある程度までは近づけるかなぁと最近はblog活動に力を入れていこうかなと思っている。
mixiの馴れ合いはちょっと飽きてきたしw
もっと便利になるツールがありますよという方向性って日本人?にはあまりない気がする。
日常の不便をネットが解決しますよじゃなくて、ネットはさらに生活を有意義にしますよ的なツールだと思う。
プラスをもっとプラスにすることが今のネットの役割のような気がする。もちろんマイナスをプラスに変える力もあるんだけど、けしてそれだけではないと。
(日本のyahoo!好きもその辺かなと。yahoo!でもう既に便利なんだからもっと便利なツール(google)はこれ以上いいよみたいな)
あと、ネットのむこうとかこちら側とか、ネットとリアルとかっていう区別の仕方は、個人的にはいまいちしっくりこない。ネットは、自分の生活スタイルそのものをさらに便利にさせるものであって行ったり来たりとかじゃなくて有機的にごちゃ混ぜな感じがしてならない。
とかく、ネットとリアルを区別して議論しがちだけどそれじゃネットの本質(プラスプラスな効用)は伝えきれないんじゃないかと。
そんな雰囲気のネットについてインターネットを触らせてもらえない子どもたちにどうやって伝えたらいいだろう。多分、親や先生はこのネットに漂う雰囲気を上手に子どもたちに伝えられる人はそうそういないんじゃないかと思う。
そういう雰囲気をトイスタが伝えられていければ良いなと。
ndbクラスタがまだこわいので、とりあえず安定稼働が見込める段階になるまで、レプリケーションで対応しようとおもい、とりあえずMySQL4.1.20x2台でレプリケーションを実装してみました。僕はびびりです。。。
なので、手順を記録します。
既にうちの環境の場合、1台のサーバでMySQL4.1.20が稼働しているので、このマシーンをマスターにし、2代目のマシーンにスレーブの設定をすることにしました。最終的に以下のような構成にします。
hoge1 マスター
hoge2 スレーブ (バックアップとしても使う)
【手順】
・hoge1のmy.cnfに以下の設定がされているか確認をします。もしされていなければ、以下の一行を[mysqld]セクションに追加しmysqldを再起動してください。
[mysqld]
log-bin
・hoge1のデータベースのスナップショットをとります。
hoge1$ mysql -u
mysql > exit;
hoge1$ cd $MYSQL_DATA_DIR
hoge1$ tar zcf mysql.tar.gz .
hoge1$ mysql -u
mysql >exit;
・hoge1のmy.cnfに以下の設定をします。設定をしたらmysqldを再起動してください。
[mysqld]
server-id=1
・以下のコマンドを実行し内容を控えておいてください。
hoge1$ mysql -u
+—————–+———-+—————+——————–+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+—————–+———-+—————+——————–+
| db1-bin.000004 | 158304 | | |
+—————–+———-+—————+——————–+
★Fileと、Positionの値を保存しておいてください。
・ここで作成したmysql.tar.gzをhoge2へ移し、データディレクトリに展開します。
hoge2$ cd $MYSQL_DATA_DIR
hoge2$ tar zxf mysql.tar.gz
hoge2$ chown -R mysql.mysql .
・hoge2のmy.cnfに以下の設定をします。
[mysqld]
server-id=2 #以降スレーブサーバを追加する際には、それぞれのサーバのmy.cnfのここの部分を3,4,5と増やしていってください。
・hoge2のサーバを起動します。
hoge2$ service mysqld start
・hoge2にスレーブとしての設定を行います。
hoge2$ mysql -u
-> MASTER_HOST=’マスターサーバのURL’,
-> MASTER_USER=’接続ユーザ’,
-> MASTER_PASSWORD=’ユーザのパスワード’,
-> MASTER_LOG_FILE=’Fileの内容’,
-> MASTER_LOG_POS=Positionの内容;
・レプリケーションを開始します。
hoge2$ mysql -u
mysql> quit;
・これでレプリケーションの設定は完了です。実際にマスターDBに何か書き込みを行い、その内容がスレーブに反映されているか、確認をとってみてください。
こんにちは、横浜です。
本日付けで東大のゼミが終了しました。メディアリテラシーに付いて2度にわけて学生さん、社会人の方々とお話をさせていただいたわけですが、業界の発想とは違った斬新なアイデアや、回答に困ってしまうような質問などをいただき、わたくし自身大変有意義であり、勉強になったと思います。やはり、偏った見方や、聞き慣れた言葉ばかりでのやりとりとは違い、脳がフル回転!とっても気持ちがよかったです。彼らも違った業界の人間の話を聞き、きっとわたくしと同じ感想を持ってくれていることを期待します。彼らのようなストイックな人たちが、これから先の世界を楽しくしていくのでしょう。
東大@ゼミに参加してくださったみなさん、また誘ってくれたみなさん、本当にありがとうございました。

