- ベストアンサー
内部サーバと外部サーバの同期
現在レンタルサーバを借りて、公開用サーバとして運用しています。 このレンタルサーバがもしトラブル等で使用できないことを考慮して別に自宅サーバを構築しようとしています。 双方ともに同じバージョンのデータベースMySQLをインストールしていますが、このデータベースの同期方法について教えて下さい。 レプリケーションという方法があると思いますが、MySQLのレプリケーションは不十分と聞いたことがあります。 MySQLのバージョンは4.1です。 両方のサーバ共にプログラム言語はPHPを使用しており、Apache2.0で運用する予定です。 できる限りリアルタイムでの同期を行いたいと思っているのですが、こういう場合の、みなさんの処理方法について参考にさせていただきたく投稿致しました。 ご教授の程、宜しくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>できる限りリアルタイムでの同期を行いたい 各データに更新日時の情報をもたせて cronで、過去○○分のデータを抽出し他のサーバーにおくりつける スクリプトを作ってやればよいのでは? リアルタイムでやるということは負荷がたかくなるということと 同意になりますが、そこまでやる必要はほんとにありますか?
その他の回答 (3)
- h_0
- ベストアンサー率30% (7/23)
1万円が惜しいというのであれば、もうSOAPかXML-RPCで自作ですね。 PHPだとNuSOAPか、PHP5に含まれているものを使うのが妥当かと。(XML-RPCでももちろんかまわないと思います。) あとは、セキュリティを考慮して、cURLライブラリで、https通信+パスワードプロテクトもしたほうがいいと思います。 「PHP SOAP」で検索したらサンプルはいろいろ出てくると思います。 蛇足ですが、安全な環境内でこのようなツールを自作するのであれば、2~3時間で出来ると思いますが、外部に公開する場合は、セキュリティを考えると、シェアウェアのほうが安心できるのでは?
お礼
回答ありがとうございます。 セキュリティ面も考慮しないといけないですよね、やっぱり。 SOAPでやってみようと思います。 ありがとうございました。
- h_0
- ベストアンサー率30% (7/23)
では、Navicatなどのソフトウェアを使ってはどうですか? 物理的に離れているデータベースの同期をスケジュールできます。またファイアウォールを越えることも出来ます。 デメリットは、頻繁に同期をすべてのテーブルに対して行った場合、当然ですがパフォーマンスが悪くなります。 理想としては、Enterprise Service Bus(http://en.wikipedia.org/wiki/Enterprise_service_bus)などを実装している製品を購入するとか。 「PHPでデータが更新されたときだけ同期を取りたい」のであれば、XML-RPCとかSOAPで、データベースを更新するときに他のデータベースも更新する、なら簡単に出来ると思います。
お礼
お礼が遅くなってしまって申し訳ありません。 Navicatを見てみたのですが、有償ソフトになりますね。 できるだけ費用をかけたくないので、技術面でなんとかしたいとおもっているのですが。
- h_0
- ベストアンサー率30% (7/23)
質問内容から、バックアップが目的かつリアルタイムとの事ですので、MySQLのレプリケーションが最適だと思います。(自宅サーバというのが気になりますが) 下記のウェブサイトが参考になるかもしれません。 http://www.irori.org/doc/mysql-rep.html しかし、リアルタイムで自宅サーバだと十分なネットワーク品質を確保できるのですか? レンタルサーバのプランをアップグレイドして、冗長構成にするか、予算が十分あるのであれば、2台専用サーバを借りたほうが安心なのでは?
お礼
アドバイスありがとうございます。 バックアップが目的ではなく、内・外部ともに更新処理が行われる予定です。内部は内部での処理、外部は外部用の処理を行い双方ともに同期をとるといった構成です。 なので、マルチマスタ構成ということになるのですがMySQLは対応していないと認識しています。 また、ネットワーク品質等はこの際考慮しないという前提で構成する予定です。
お礼
ありがとうございます。 過去○○分でのデータ抽出というのは思いつきませんでした。 参考にさせていただきます。 リアルタイム性=高負荷は承知しています。 ある程度のリアルタイム性はどうしても必要な為、調整しながらやってみます。