1つのmysqlサーバーに2つのデータベースがdatabase_master
ありますdatabase_backup
。に挿入または更新されたすべての新しいデータをコピーし
たいと思います。
ただし、に削除されたデータがある場合でも、上のデータは残ります。database_backup
database_master
database_master
database_backup
MySQLでそれをどのように行うことができますか?
1つのmysqlサーバーに2つのデータベースがdatabase_master
ありますdatabase_backup
。に挿入または更新されたすべての新しいデータをコピーし
たいと思います。
ただし、に削除されたデータがある場合でも、上のデータは残ります。database_backup
database_master
database_master
database_backup
MySQLでそれをどのように行うことができますか?
明確にするために、私はあなたが複製を望んでいると思いますが、レコードの削除を複製することはしません。これは、ネイティブレプリケーション(行ベースでもステートメントベースでもない)では実行できません。主な理由は、メインデータベースで行を削除してから行を挿入した場合、新しい行が古い行の主キーを取得する可能性があるためです。レプリカデータベースでは、これによりキーの競合が発生します。
ただし、ある種のハック監査ログを実行するには、スレーブmysqlサーバー上に実際のDBテーブルごとに1つのログテーブルを作成できます。たとえば、テーブルがあるfoo
場合は、対応するテーブルを作成しfoo_logging
ます。ロギングテーブルには、元のすべての列に加えて、個別の自動インクリメント主キーが含まれます。次に、元のテーブルにトリガーを設定して、新しいレコードまたは更新されたレコードのコピーを対応するログテーブルに挿入します。
挿入ステートメントと更新ステートメントには、database_masterテーブルのTRIGGERを使用できます。トリガーでは、database_backupテーブルにデータを挿入できます。
ただし、これは非同期ではないことに注意してください。両方のテーブルへの挿入(または更新)は、一緒に1つのトランザクションになります。何か問題が発生した場合、両方がロールバックされます(これは場合によっては良いことです)。
database_masterを削除しても、database_backupには影響しません。