• 締切済み

異なるDBに存在するテーブル間のミラーリング

MeijiKの回答

  • MeijiK
  • ベストアンサー率100% (3/3)
回答No.1

単純にひとつのMySQLインスタンス内の違うDBだったら、上記のように二つにわけてミラーリングを考えるよりも、データベース一つに対して、それぞれがUPDATE/DELETE/INSERTすることで、お望みの処理が実現できると思います。 例えば、DBとDB'(DB2とします)にはそれぞれ顧客テーブルTとT'(T2とします)があるとすると、DBのTだけをつかって、DB2からは、テーブル名をDB.Tで修飾して使います。以下が、DB2からDBを操作する例です。 mysql> use db2 Database changed mysql> insert into db.t values(1, 'aaaa'); Query OK, 1 row affected (0.34 sec) mysql> insert into db.t values(2, 'bbbb'); Query OK, 1 row affected (0.02 sec) mysql> select * from db.t; +------+------+ | id | name | +------+------+ | 1 | aaaa | | 2 | bbbb | +------+------+ 2 rows in set (0.08 sec) mysql> update db.t set name = 'cccc' where id = 2; Query OK, 1 row affected (0.06 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> delete from db.t where id = 1; Query OK, 1 row affected (0.00 sec) mysql> select * from db.t; +------+------+ | id | name | +------+------+ | 2 | cccc | +------+------+ 1 row in set (0.02 sec) # DB内では通常通り、Tだけを指定して、操作します。 二つのMySQLインスタンス間で同期をとるのであれば、レプリケーション機能が使えますので、調べてみてください。

u_suke_m
質問者

お礼

早速の回答ありがとうございます。 MeijiKさんの回答のとおりにしてみたら、うまくいきました。 ありがとうございました。 MySQLのインスタンスとは、MySQLサーバと解釈して良いのでしょうか? MySQLのレプリケーションは、マスターからスレーブへの一方向だけのようなので、今回のケースでは使えないようです。

関連するQ&A

  • PEAR DBのupdateについて

    PEAR DBにて複数のデータを一度にUPDATEにて更新しようと思っているのですが、うまくいきません。 foreach($data as $value){   $SQL = "update `table_name` set `id` = '" .addslashes($value). "';"; } $res = $this->db->query($SQL); まず、update分をデータ分foreachにて溜め込み、一気にクエリを投げております。insert文の場合はうまく処理してくれるのですが、updateの場合はエラーが返ってきてしまい、処理してくれません。updateの場合、PEAR DBでは不可能なのでしょうか? お分かりになる方、ご教授ください。よろしくお願いいたします。

    • 締切済み
    • PHP
  • SQL Server上のDBにWin7でアクセス

    SQL Server上のDBに、Win7のクライアントPCからSELECTのみ実行できるツールを探しています。(INSERT、DELETE、UPDATEは実行できないものがいいです。また、DBを直接編集もできては困ります) フリーソフトがベストです。どなたか、ご教授頂けますでしょうか。

  • オラクルDBのデータ削除タイミング

    お世話になります。 .NETとオラクルで作られた小さいシステムを引き継ぎました。 その中にメインになるDBがあり3ヶ月以前のデータは .NETの夜間削除処理APでDELETEしています。 そのメインDBにトリガーテーブルがあるのですが、1日分の データしか保存されていません。 しかし、どこで消えているのかが見つけられないでいます。 .NETの全APを検索してもないし、オラクルの機能であるような気が しているのですが、よくわかりません。 トリガーの条件は「INSERT」と「UPDATE」です。 どなたかヒントを下さい

  • LOCK TABLE

    登録処理、更新処理、削除処理を行う際に 他ユーザからのアクセスを制限するために 登録、更新、削除処理を行う前にロック処理を行おうと思っています。 その際にテーブルのロックがすでにしている場合や テーブルのロックに成功した、テーブルのロックに失敗 した場合に戻り値を返すのでしょうか? お分かりになる方よろしくお願い致します。 一応イメージとして LOCK TABLE テーブル名称 IN SHARE ROW EXCLUSIVEの処理の後 UPDATE文や、INSERT、削除などを行おうと思っています。 よろしくお願い致します。

  • MysqlでのLOCK処理

    Mysqlのwebリファレンスの http://dev.mysql.com/doc/refman/4.1/ja/lock-tables.htmlでは --->個々の UPDATE ステートメントでは、いずれも処理が原子的に行われるため、通常、テーブルをロックする必要はありません。現在実行中の SQL ステートメントが、他のスレッドによって妨害されることはまったくありません。しかし、次に示すように、テーブルをロックする必要が生じる場合もいくつかあります。 トランザクションをサポートしていないストレージエンジンを MySQL で使用している場合、SELECT と UPDATE の間に他のスレッドに割り込まれないようにするには、LOCK TABLES を使用する必要がある。次の例では、安全に処理を実行するために LOCK TABLES を発行する必要がある。<--- と説明がありますが、 (1)トランザクションをサポートしていないストレージエンジンでINSERT INTO,DELETE処理をするにはLOCKが必要になってくるのでしょうか? よろしくご教授おねがいします

  • DB参照&登録処理、どっちが高速?

    30日分の売り上げを登録するシステムをつくっています。 登録先はDBで、日付を主キーとして1レコードずつ増えていく感じですが、既に登録があるものについてはレコード有無の判断をして上書きにする必要があります。 処理を考えたところ、2パターンのどちらが高速か負荷が少ないのかで迷っており、助言をいただきたいと思い投稿しました。 <1> (1)DB接続 (2)既に登録されている日付を把握するため、レコードから日付を全て取得(select all) (3)登録しようとしている1日目の日付とDBから取得した日付を全て照合し、同一があれば上書き(update)、なければ登録(insert)で処理をする。 (これを30日分繰り返す) (4)DB切断 <2> (1)DB接続 (2)登録しようとしている1日目の日付をキーにDBに同一日での登録がないか参照(select)し、同一があれば上書き(update)、なければ登録(insert)で処理をする。 (これを30日分繰り返す) (3)DB切断 <1>はDB参照が一度で終わるので高速かなと思うのですが、参照結果を一度格納し、再度1つづつを比較としてひっぱってくるためあまり効率が良くないのかと悩んでいます。 アドバイスお願いいたします。

    • ベストアンサー
    • PHP
  • DB2でのシステム日付のinsert、updateについて。

    質問です。 DB2で、システム日付のinsert、updateを行うSQLを作成したいのですが、どのようにしたら良いでしょうか? また、参考になるようなサイトなどありましたら教えてください。 どなたか宜しくお願いします。

  • PHPでSQLサーバーのテーブルに対してIO

    PHPでSQLサーバーのテーブルに対して Insert、Update、Deleteを行うサンプルコードを得られるサイトがあればご紹介下さい。

    • 締切済み
    • PHP
  • ストアド。存在チェックをしてから登録したい。

    SQLServer2005環境です。 同じ構造のテーブルA、Bがあり、AのデータをBにコピーしたいと思っています。 Aのデータは最新のデータ、Bの中にあるのは古いデータなので、もしキーが かぶるレコードがあれば、Updateをかけ、なければInsertをするような仕組みに したいと思っています。 更に可能であれば、Aに存在しないデータがBにあった場合は、Deleteしたいです。 一度BをDeleteしてInsertすれば話が早いのですが、そうもいかず、UpdateとInsertを 交え、小出しに更新するような形にしたいのです。 2008であれば、Merge文という便利なものがあるのですが、2005では上のような 動作をストアドで実現するのは難しいでしょうか。 サンプルコードですとか、解説しているサイトなどがありましたら、教えていただけますと 大変助かります。 宜しくお願いします。

  • DB同時接続および更新処理結果確認について

    お世話になります。 DB:Oracle11g OS:Linux5 上記環境のDBサーバへ、Aさん、BさんがTera Term接続して、 2名とも同じスキーマSSS(DBA付与)でsqlplusにてDB接続しました。 Aさんが、TTTテーブルに対してINSERT文を実行し、 1行追記されていることをSELECT文にて確認することができましたが、、 その後Bさんが同じSELECT文を実行しても、Aさんが追記した行が表示されません。 お恥ずかしい質問で恐縮ですが、 Bさんからも、AさんのINSERT実行結果を即時に確認できるようにするための Oracleの(?)設定がありましたら、ご教示ください。 ※目的はAさんが実行したINSERT、UPDATE、DELETEの結果を、   Bさんが開いているTera Termのコンソールからも確認したい。