私は現在、5分ごとに実行され、サーバ1のテーブルとサーバ2の同一のテーブルからデータを選択しています。これは、現時点ではそのオプションがないため、本質的に複製の回避策です。INSERT phpスクリプトに存在しない2つのテーブルを比較する
スクリプトが成功しているが、私はそれが何らかの理由で、時々記録を逃すことに気づきました。現在のスクリプトは、デスティネーションテーブルからすべてのレコードを選択し、最大プライマリキーを格納し、ソーステーブルからすべてのデータを選択し、大きなプライマリキーを持つものをすべてデスティネーションに挿入します。表。
私は、最大のIDを使用して、わずかにし、代わりにスクリプトを変更だけ言いたい「行が転送先テーブルに存在しない主キーを持っている場合、そこにその行を挿入します。」
再びこれらをクローン化されたテーブルので、構造が同じであり、それらの両方がAI主キーを使用します。
$latest_result = $conn2->query("SELECT MAX(`SESSIONID`) FROM
`ambition`.`session`");
$latest_row = $latest_result->fetch_row();
$latest_session_id = $latest_row[0];
//Select All rows from the source phone database
$source_data = mysqli_query($conn, "SELECT * FROM
`cdrdb`.`session` WHERE `SESSIONID` > $latest_session_id");
// Loop on the results
while($source = $source_data->fetch_assoc()) {
// Check if row exists in destination phone database
$row_exists = $conn2->query("SELECT SESSIONID FROM
ambition.session WHERE SESSIONID = '".$source['SESSIONID']."' ") or
die(mysqli_error($conn2));
//if query returns false, rows don't exist with that new ID.
if ($row_exists->num_rows == 0){
//Insert new rows into ambition.session
$stmt = $conn2->prepare("INSERT INTO ambition.session (SESSIONID,
SESSIONTYPE,CALLINGPARTYNO,FINALLYCALLEDPARTYNO,
DIALPLANNAME,TERMINATIONREASONCODE //etc. There are a lot of columns so I
ommitted the others
私は少しだけMAX IDに頼るのではなく、存在しないものを挿入するには、これを変更することができる方法があります:
ここでは、現在の作業スクリプトがですか?
それともレコードを欠けている理由として犯人だろうここに何かがあるのでしょうか?
が見えます。 – Phylogenesis
この場合、各テーブルは異なるサーバーにあるので、どのように修正する必要がありますか?だからこそ、私はそれ自身のクエリで各テーブルのステートメントを持っています。 –
@TomN。 MySQLはDatabaselinkやリンクサーバーのようなものを持っていますか? – lad2025