MySQLでのレプリケーションの設定レプリケーションとは通常、データベースを別のサーバに複製することを、「レプリケーション」という。 レプリケーションのメリットは、次のとおり。
MySQLは標準でレプリケーション機能を備えているが、 その方式は「マスタ-スレーブ方式」で、 データベースの更新を受け付ける「マスタ」と、 マスタから伝搬されたデータを受け付ける「スレーブ」からなる、 一方通行の複製になる。 細かいことは、参照先のページを見ること。 今回の目的まったく同一構成の2台のマシンがあるので、 1台をマスタ、もう1台をスレーブにして、 データベースのバックアップと冗長化をはかる。 レプリケーション用のユーザの作成スレーブがマスタに接続するための専用ユーザを、マスタで作成する。 与える権限は「REPLICATION」「SLAVE」のみ。 今回は、ユーザ名「repl」、パスワード「password」で、 どのコンピュータからの接続も受け付ける('%')ようにする。 master# mysql -u root -p ... mysql> GRANT REPLICATION SLAVE ON *.* TO repl@'%' IDENTIFIED BY 'password'; マスターのデータをスレーブにコピーマスターの全データを、スレーブにコピーする。 今回は、稼働中のデータベースにレプリケーションを設定するため、 次のようなややこしい操作をする。 詳細は、参考に書いたページを見ること。
スレーブを開始するスレーブのための設定をする。 ここからの作業は、失敗してもマスタには影響がないので、 何回でもやり直しできる。
追記:my.cnfへの設定の追加CentOSのバージョンが上がると、いつの間にか、バイナリログファイルを置く場所が変わってしまっていた。ファイル名もホスト名ベースから、デフォルトの「mysql-bin」になってしまっていた。
したがって、ここまでに書いた設定では、 レプリケーション側がうまく動作しなくなってしまい、問題が生じる。 とりあえず、 バイナリログファイル関係(マスタ側)やリレーログファイル関係(スレーブ側)の 設定を、/etc/my.cnfに追加する必要がある。詳しくは、下の情報を参照。 CentOS5.1でMySQLのレプリケーションを設定。 セオリー通りに設定して無事動いたんですが、 サーバを物理的に再起動すると、あらまバイナリログが初期化される・・・。 で、セカンダリのMySQLはログを見失いレプリケーションが崩れる。。。 色々見ていると、どうもMySQLのバイナリログの保存先が"/var/run/mysql"とかになってる。 で、"/var/run"以下は再起動時に綺麗にお掃除されるため、バイナリログももれなく削除。 と言うことで、起動ファイルに下記を追加して難を凌ぎました。 というわけで、ざっくり書くと、 マスタサーバの/etc/my.cnfに次の情報を書いた上で、作業を進める。 log-bin=/var/lib/mysql/mysqld-bin さらに、スレーブサーバ側の作業を進める時に、 次の設定を/etc/my.cnfに用意しておく。 #log-bin=/var/lib/mysql/mysqld-bin ←コメントアウトするか削除する relay-log=/var/lib/mysql/mysqld-relay-bin relay-log-index=/var/lib/mysql/mysqld-relay-bin 参考 |