3

ローカル エリア ネットワーク (php アプリケーション) 用の localhost に mysql データベースがインストールされており、リモート ユーザー用の同じアプリケーションとデータベースの別のコピーがオンライン サーバーにインストールされています。

主キーに問題のあるエントリがいくつかあります。 ユーザーがオンライン サーバーで主キー #4 を使用して新しいレコードを入力すると、ローカル サーバーには主キー #4 の別のレコードが既に存在するため、アプリケーションで問題が発生します。

注: 帯域幅が制限されているため、ローカル サーバーをオンラインにできません。したがって、ローカルとリモートの両方にオンラインサーバーを使用する必要があることは問題ありません

では、問題を起こさずに両方のデータベースを同期する方法を誰か教えてもらえますか?

4

1 に答える 1

3

使用することをお勧めするのは、MySQL Master-Master レプリケーションです。私は自分のラップトップとメインコンピューターでそれを使用して、MySQL データベースを相互に同期しています (両方の開発環境)。

オンライン サーバーがサーバー 1 で、LAN サーバーがサーバー 2 であるとします。サーバー 1 の MySQL の my.ini ファイルに次のコードを追加する必要があります。

#Config for server 1
server-id=1
log-bin=mysql-logbin
log-slave-updates
replicate-same-server-id=0
auto_increment_increment=2
auto_increment_offset=1
report-host=#IP ADDRESS of server 1#
binlog-ignore-db=MySQL

およびサーバー 2 の my.ini ファイル

#Config for server 2
server-id=2
log-bin=mysql-logbin
log-slave-updates
replicate-same-server-id=0
auto_increment_increment=2
auto_increment_offset=2
report-host=#IP ADDRESS of server 2#
binlog-ignore-db=MySQL

phpmyadmin よりも、「複製」ユーザーを作成できます。サーバー 1 にユーザーを追加し、サーバー 1 のユーザー データを使用してサーバー 2 からサーバー 1 に接続します。これで、サーバー 2 はサーバー 1 のスレーブになります。逆に、サーバー 2 にレプリケーション ユーザーを作成し、それをサーバー1に追加します。これで、両方のサーバーが互いのマスターになり、常に同期が維持されます!

考慮すべき重要なことは、オンライン サーバーが LAN サーバーにアクセスできる必要があるため、ネットワーク アドレス変換またはポート転送をセットアップする必要がある場合があるということです。

両方のサーバーを常に同期させたくないが、主キーの問題を解決したい場合は、これを両方のサーバーの my.ini に追加するだけです。

#Config for server 1
auto_increment_increment=2
auto_increment_offset=1

#Config for server 2
auto_increment_increment=2
auto_increment_offset=2

サーバー 1 は 1、3、5、7、9、11... のみを主キーとして使用し、サーバー 2 は 2、4、6、8、10、12... のみを主キーとして使用します。そうすれば、問題は解決します。

注: Master-Master レプリケーションを機能させる最善の方法は、両方のサーバーでデータベースからすべてを削除することです。すべてのログ ファイルをリセットするよりも (「データ」ディレクトリからそれらを削除し、他のファイルのいくつかの番号を編集することで手動で行うことができます)、コマンドを介して行うこともできます (はるかに節約できます)。それよりも、レプリケーション ユーザーをセットアップします。どちらのサーバーも空でログがないため、何も起こりません。最後に、すべてのデータベースをいずれかのサーバーに追加します。数秒以内に両方のデータベースが同期されます。

幸運を!

于 2013-02-17T13:08:01.897 に答える