2017-11-27 8 views
0

私はMySQLを使用して多数のセンサーからのログデータをボートに保存しており、そのデータベースをWebサーバー上のMySQLの読み取り専用インスタンスにレプリケートしたいと考えています。バイナリログファイルをMySQLスレーブにプッシュ

Webサーバーには静的IPがありますが、ログサーバーにはボートの場所に応じて異なるルーターの背後から動的IPアドレスが割り当てられます。

私が知る限りでは、バイナリログファイルは通常、マスタからのスレーブによって要求されますが、これは私のアプリケーションでは実現不可能です。

バイナリログファイルをリモートスレーブにプッシュして、読み取り専用MySQLデータベースの更新を達成することはできますか?

スクリプトでMySQLダンプファイルを使用する以外のポインタは、大いに感謝します。

+0

これまでに何を試しましたか? – Taegost

+0

私はホストアドレスに依存しない試しに何も見つけられませんでしたが、この回答を見つけました:[link](https://dba.stackexchange.com/a/65354)ホストからスレーブまでのファイルですが、私はどのように@Taegost –

+0

私はクロス投稿の罪を犯したと信じています。誰も私がデータベース管理者のstackoverflowフォーラムで行った投稿とこれをマージする方法について助言してください。私は解決策に近づいています。 –

答えて

0

残念ながら、MySQLのレプリケーションはマスターのIPアドレスによって異なります。マスターがIPアドレスを変更すると、レプリカでレプリケーションエラーが発生します。しかし、MySQLレプリケーションが非常に堅牢であるため、これはそれほど悪くありません。

しかし、インターネットに接続されていないボートでは長い時間がかかるような場合には、接続しなくても長い時間が経過してもすべてのビンログを利用できるようにするために、必ずマスターに「expire_logs_days」を設定する必要があります。もちろん、膨大な量のビンログを保存するには、巨大なディスクが必要です。エラーを避けるためには、ディスクアレイを増やす必要があります。

マスターはクラッシュすることなく実行できる必要がありますので、マスターのbinログの連続性に問題はありません。

たぶん、あなたは可能性を以下にいくつかのインスピレーションを見つける:

シナリオ1 - VPN

を使用しようと、私は教祖をネットワークではないのですが、あなたはレプリカにボートにあなたのマスターからVPNを使用することを試みることができますOpenVPNまたはZeroTierまたは両方のマシンでアクセス可能な静的アドレスを持つ他のインターネットサーバーを使用して同様のものを使用します。この方法で仮想ネットワークを作成し、このVPN内のIPでマスターにアドレスします。ダイナミックIPを移動して変更するときに、マスターからVPNを繰り返し変更する必要があるかもしれません。

シナリオ2 - 必要なレプリカ上のマスターの変更IP:私は教祖ネットワークが、のは十分な長さ続くマスターの新しい動的IPを想定してみましょうと、マスターは、外部からこのIPの下でアクセスできますないです

標準のインターネット通信を使用します。また、どちらのレプリカでも新しいIPを見つけることができます。または、マスターの新しいIPを一部のリスナーまたはWebサービスのレプリカに送信できます。

STOP SLAVE; CHANGE MASTER TO MASTER_HOST='xxx.xxx.xxx.xxx'; START SLAVE;

レプリカはビンログ内の最後の位置が正常に適用されたかを知っているので、これは動作しますので、その後たびにIPの変更とした場合、あなたは単にレプリカで次のコマンドを使用することができますレプリカのレプリケーションエラーが発生します。したがって、マスターIPのみを変更してレプリケーションを再開すると、レプリカはそのまま続行されます。

もちろん、マスターが外部からの動的IPの下でアクセスできない場合、レプリカはそれに接続できません。

シナリオ3 - データファイルのバッチ出荷が

あなたが外から船でVPNやアクセスのMySQLマスターを開くか、十分な長持続インターネット接続を確保するか、十分な大きさのディスクを使用することはできません場合は、すべてのアーカイブのためにPercona XtraBackupを使用して、実行中のマスターで常にホットバックアップを実行できます。

このツールは、バックアップ中に加えられたすべての変更を適用して、すべてのデータファイルを一貫してバックアップします。タールしてgzipして、いくつかのクラウドストレージに送信することができます。この方法でデータを失うことはなく、一貫してバックアップが取れます。

このソリューションの利点は、単にmysqlを停止し、既存の古いデータファイルを削除し、新しいデータファイルをuntar/unzipしてmysqlを起動するだけです。ダンプファイルを通常非常に時間のかかるリストアにする必要はありません。

+1

総合的な返信をありがとう。シナリオ3のバリエーションを調べて、rsyncで圧縮されたバイナリログファイルをWebサーバーに送信するスクリプトを使用してから、スクリプトは引き続きmysqlbinlogを使用して増分更新を適用します。これはうまくいくようですが、欠陥があると確信しています。スクリプトは1時間ごとに実行されますが、インターネットに接続できない場合、またはWebサーバーにpingできない場合は終了します。私は解決として出版することに自信がない - しかし、私は進歩していると感じる@JosMac –

関連する問題