2012年01月17日

MySQL レプリケーションスレーブのリレーログの名前と場所を変更する

・スレーブを作るときにリレーログ名にホスト名を入れてしまった(が、後でホスト名を変えた、他のスレーブにコピーを持ってきた)
・リレーログを別の物理ディスクに置いてパフォーマンス向上を期待したい(か、ディスクが一杯で逃がしたい)

等、既にできているレプリケーションスレーブのリレーログの名前と場所を変える方法。MySQL 5.5.10 で実施。


1. スレーブのMySQLを止める。
変更前にMySQLのデータディレクトリを丸ごとバックアップして、危急の場合に備えることをお勧めする。

2. my.cnf の変更
 変更箇所は relay-log relay-log-index の2カ所
relay-log=old-name-relay-bin
relay-log-index=old-name-relay-bin
などという感じになっているのを
relay-log=/var/mysql/relaylog/new-name-relay-bin
relay-log-index=/var/mysql/relaylog/new-name-relay-bin
と変更。フルパス名で、拡張子を取り除いたファイル名を記述する。

3. 既存のリレーログを新しい場所へ移動
 デフォルトではデータディレクトリにリレーログとリレーログインデックスが置かれているので、これを新しい場所へ移動する。場所だけでなく名前も変える場合は、ファイル名も変更しておく。ファイル名の一括変更は rename コマンドが便利。
# cd ~mysql/var
# mv old-name-relay-bin.* /var/mysql/relaylog/
# cd /var/mysql/relaylog
# rename old-name new-name old-name-relay-bin.*
4. リレーログインデックスの内容を変更
 リレーログインデックスには、現在のリレーログの一覧が入っている。これを新しい場所と名前に書き換える。
# vi /var/mysql/relaylog/relay-bin.index
--
./old-name-relay-bin.000229
./old-name-relay-bin.000230
./old-name-relay-bin.000231
:
こんな内容になっているので、vi で置換して保存。
(viで置換):%s;./old-name-;/var/mysql/relaylog/new-name-;g
--
/var/mysql/relaylog/new-name-relay-bin.000229
/var/mysql/relaylog/new-name-relay-bin.000230
/var/mysql/relaylog/new-name-relay-bin.000231
--
:wq
5. relay-log.info の内容を変更
データディレクトリにある relay-log.info には、スレーブがリレーログの情報を書き込んでいる。ここにもリレーログのパス名が書かれているので、書き換える。
# vi ~mysql/var/relay-log.info
--
./old-name-relay-bin.000230
369057398
(略)
--

--
/var/mysql/relaylog/new-name-relay-bin.000230
369057398
(略)
6. MySQL を起動。
SHOW SLAVE STATUS\G でスレーブのステータスを確認してみて、エラーが出ずLogPosが進めばOK。
タグ:MySQL
posted by usoinfo at 07:44 | Comment(0) | Linux | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]