MySQLデータを同期する方法
ホスト A と B (Linux システム) があるとします。ホスト A の IP は 1.2.3.4 (もちろん、動的にすることもできます)、ホスト B の IP は 5.6.7.8 です。両方のホストに PHP Mysql がインストールされており、現在ホスト A 上のデータを操作しています。別のホスト B がデータを A と同期したい場合、どうすればよいでしょうか?
よし、それではやってみよう。
まず、2 つのホスト間でデータを同期したい場合、1 つの方法は、ホスト A がホスト B にデータを送信することです。もう 1 つの方法は、ホスト B がホスト A からデータを取得することです。は動的である (想定されている) ため、ホスト A からホスト B にデータを送信する必要があります。
ホスト B に MySQL アカウントを作成します。
# GRANT ALL ON test.* TO user@% IDENTIFIED BY "password"; // 任意のマシンからホスト B 上のテスト データベースにアクセスできるユーザー user を作成します。
ここでエラーが表示された場合は、まず % を IP に変更し、次に phpMyAdmin を使用して IP を % に変更します。テストが正しければ、php プログラムを作成できます。
<
$link=mysql_pconnect("localhost","user","password");
mysql_pconnect("localhost","user","password");このマシン (ホスト A) のデータベースに接続します。
mysql_select_db("test"); //データベースの選択 test
$re=mysql_query("select * from table order by id desc"); 🎜> $num=mysql_numrows($re);
if (!empty($num)) {
$id=mysql_result($re,0,"id");ローカルテーブル
}
mysql_close($link); // ローカルデータベースへの接続を閉じます
$link=mysql_pconnect("5.6.7.8","test") ," test");
mysql_pconnect("5.6.7.8","test","test"); //ホスト B のデータベースに接続します
mysql_select_db("test"); 、このデータベースはホスト A 上のテスト データベースの構造と同じである必要があります。
$re=mysql_query("select * from table order by id desc");
$num=mysql_numrows($re);
if (!empty($num)) {
$remote_id =mysql_result($re,0,"id"); //ホスト Btable テーブルの最大 ID を取得します
}
if ($id>$remote_id) {
$result_id=$ id- $remote_id; //ホスト A のテーブルの最大 ID がホスト B のテーブルの最大 ID より大きい場合、2 つの
} のデータが異なることを意味します
mysql_close($link); // ホスト B のデータベース接続を閉じます
$link=mysql_pconnect("localhost","user","password");
mysql_pconnect("localhost"," user","password");
mysql_select_db("test");
if (empty($result_id)) $result_id=0;
if (empty($remote_id)) $remote_id =0; //テーブルの最大 ID が空の場合 (データが存在しない場合)、0 を待ちます
$re=mysql_query("select * from table limit $remote_id,$result_id "); //ホスト A のテーブル table とホスト B のテーブルの異なるデータを取得
$num=mysql_numrows($re);
if (!empty($num)) {
for ($i=0;$i$test[$i]=mysql_result($re,$i,"test"); //異なるデータを配列に入れる
}
}
mysql_close ($link); //ホスト A のデータベース接続を閉じる
$link=mysql_pconnect("5.6.7.8","user","password") );
mysql_pconnect("5.6. 7.8","ユーザー","パスワード");
for ($j=0;$j
mysql_query("insert into table (test) names('$test[$j ]')");
}
mysql_close($link); //ホスト B のデータベース接続を閉じます
?>
At今回は、ホスト A とホスト B のデータ同期が最初に実現されましたが、このプログラムを毎回手動でアクティブにする必要があります。これをスクリプトとして使用し、crontab に入れて自動的に実行する方法はありますか。指定された時間?
phpをインストールすると、通常はインストールしたphpの/binディレクトリ下にphpという実行ファイルが生成されますが、下位バージョンには存在しないようです。ファイルをアップグレードする必要があります。
#php -q test.php
php は元々 Web アプリケーションで使用されていたため、HTML ヘッダーを送信しますが、ここでは php をシェル スクリプトとして使用します﹐" -q"
最後に/etc/crontab内のファイルを編集し、次の文を追加します。
0 0 * * * root /home/httpd/html/test //毎晩0:00に/home/httpd/html/testファイルを実行(具体的な使用方法はcron関連情報をご確認ください) )
OK、Mysql データの同期はこれでほぼ完了しました。まだ興味がある場合は、編集と削除を同期するためのより良い方法を考えることができます。