プロが教えるわが家の防犯対策術!

お世話になっております。
MYSQL5を利用しております。

この度、別サーバーのDB同士を結合することは可能かどうか、もし可能であればサンプルを頂けないかと思い、投稿させて頂きました。

[現在使用しているDBサーバ]
kagoyaサーバーのDB(MYSQL)
sakuraサーバーのDB(MYSQL)

[上記DBを結合させるコードを記述したファイルを置くサーバー]
kagoyaサーバー

現在kagoyaサーバーにてそれぞれのDBからそれぞれのDBにアクセスして値を取得するところまでは出来ております。二回SQLを書いているのですが、これを一度でどうしても済ませたいと思い、JOINを使用して結合できないか調べてみました。
http://q.hatena.ne.jp/1178781253
http://detail.chiebukuro.yahoo.co.jp/qa/question …
上記URLのように、同サーバー内なら可能のようですが、実際にやってみたのですが、「mysql_query($sql, $db);」の第二引数でどちらのDBに接続すればいいかわからず、両方試してみましたがダメでした。(自分が書いたソースを破棄してしまったためうろ覚えなのですが、返ってきたresource はresource #13でした。)

結局できるのかできないのかわからないままの状態です・・・。もしわかる方がいましたら、どうかご教授下さい!よろしくお願い致します!

このQ&Aに関連する最新のQ&A

A 回答 (4件)

思いつきで細かく確認していませんが。

。。

MySQL以外のRDBMSは、使用しているでしょうか?

なぜこんなことを聞くかというと、RDBMSによっては、外部表やDATALINK等といった概念で、他のRDBMSの操作を可能にしているものもあります。そのRDBMSによってどこまで実装しているかですが、異なるDBサーバ、異なるRDBMSの表をJOINしたりできたりします。

つまりそういった機能を実装しているRDBMS上で、MySQLの表に対し外部表などとして定義し、そのRDBMS経由で操作するといった方法です。

外部表やDATALINKは、SQL99で標準SQLに入ったと記憶していますが、先行して実装しているRDBMSでは、独自仕様が多いかも知れません。

運用や性能などの面で、外部表などでなく、MySQL間でレプリケーションした方がいいかもしれませんが、こんなこともできたりする程度のアドバイスですけどね。
    • good
    • 0

例で上がっているのは、ネームスペースレベルでどうにかなるものなので、サーバーが別になるとかなり違います。


SQLでどうにもなりません。

この状況で、まともな選択肢なら、#1 の提案のように、
レプリケーションで、サーバー双方に結合対象のテーブルを複製させて、結合させる方法が分かりやすいでしょう。
あくまで、複製された方のテーブルでは更新を行なわないという前提ですが。

これ以外の方法としては、MySQL Cluster を使って、ストレージエンジンを共有してしまうと言う手があります。

これだと、それぞれのサーバから、ローカルのテーブルのようにアクセスできて、URLの例のような結合も可能になります。

ですが、メモリーをかなり使うのと、チューニングはとっても分かりにくいのと、管理も複雑で簡単とは言えません。
    • good
    • 0

それぞれのDBをダンプします(mysqldump)。


テキストエディターで必要なテーブルを残し第3のDBダンプリストを合成作成し、それを元に戻す、というのは如何ですか。

厄介なプログラムを設定するよりは楽だと思いますが。但し、第3のDBはあくまでも第1および第2のDBとは別名にし、確認後、第1または第2のDB名に戻せば良いはずです。もうひとつ、OSがLinux(Unix)の場合はくれぐれも日本語の文字化けにご注意を。
    • good
    • 0

「レプリケーション」で複数MySQLサーバー間のデータやりとりが出来るようですが、それぞれのサーバー側で互いに対応していないと無理です。


なので、それぞれのサーバーから個別にデータを取ってきて、phpで、データ合成するしかありません。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q2台のサーバー間でのテーブル結合方法

2台のサーバーでそれぞれSQL Server2000 とSQL Server2005を動かしています。
2台のサーバーの中の別のDBの中にあるテーブルを結合したいのですが、可能なのでしょうか?
ちなみに
[データベース名1]のサーバーに接続した状態で

SELECT a.*,b.* FROM [データベース名1].[dbo].[テーブル名1] AS a
INNER JOIN [ServerIPアドレス].[データベース名2].[dbo].[テーブル名2] AS b
ON a.ID=b.ID

とやると
「sys.serversにサーバー 'ServerIPアドレス' が見つかりませんでした。
正しいサーバー名を指定したかどうかを確認してください。
必要であればストアド プロシージャ sp_addlinkedserver を実行し、
サーバーを sys.servers に追加してください。」
というエラーになってします。
宜しくお願いします。

Aベストアンサー

「リンクサーバー」を設定します。
http://msdn2.microsoft.com/ja-jp/library/ms188279.aspx
設定すれば
SELECT a.*,b.* FROM [データベース名1].[dbo].[テーブル名1] AS a
INNER JOIN [リンクサーバー名].[データベース名2].[dbo].[テーブル名2] AS b
ON a.ID=b.ID
と書けます。

Q異なるサーバのDBデータ同士を結合するには?

全く違うサーバに載っているDBのデータ同士を結合するいい手段はないでしょうか?
DBは両者ともOracleですが9と10という違いがあります。
SERVER1に載っているDBは商品管理のためのものです。主キーは「品ID」です。
SVR2に載っているDBは、保証期間の管理をするためのものです。主キーは「品ID&メーカーID」です。

唯一データのつながりを作れそうなのは両者の主キーのみです。
あとのデータには何にもつながりはありません。
どちらかのサーバに片方のDBのテーブルを作るとかビューを作ればいいかと思いましたが、その方法についてはNGとされています。
(とりあえずその方法でやる場合できますでしょうか???)
DBに何かを作ることなくデータの結合をさせれないでしょうか?
SQLplusなりSQLクリエイトツールなりどんな方法でもDB自体汚さない限り問題はありません。

Aベストアンサー

「CREATE DATABASE LINK」でデータベースリンクを作成すれば可能だと思います
サーバー1上で
「CREATE DATABASE LINK link2
CONNECT TO ユーザー名 IDENTIFIED BY password
USING 'サービス名' 」
を実行しデータベースリンクを作成し
http://download.oracle.com/docs/cd/E16338_01/server.112/b56299/statements_5005.htm

FROM テーブル名 INNER JOIN テーブル名2@link2
on テーブル名.項目名 = テーブル名2@link2.項目名

でJOINできます。

Q他のデータベースとのテーブル結合

いつもお世話になっております。
VB.netでwindowsアプリケーションの作成しているところです。
SQLサーバーのテーブルを参照していますが、テーブルの結合は同じデータベース内にないと結合できないのでしょうか?

'SQL接続処理
Dim strConn As String = "Password='';User ID=sa;Initial Catalog=test;Data Source=server1"

と、testというデータベースがありその中に幾つかテーブルがあります。
このtestデータベースにないテーブルが必要になり、aaaデータベース内の
テーブルを結合しようとしたのですが、出来ません。
Catalog=test,aaaとやってみたり、SELECT * FROM tbl1,aaa.tbl2などとしてみましたが、遠いようです。
SQLのクエリを使って、テーブルの追加をすると同じデータベース内のテーブルしか出てこないので、出来ないのかなと思っていますがどうでしょうか?

わかる方がいましたら教えてください。

いつもお世話になっております。
VB.netでwindowsアプリケーションの作成しているところです。
SQLサーバーのテーブルを参照していますが、テーブルの結合は同じデータベース内にないと結合できないのでしょうか?

'SQL接続処理
Dim strConn As String = "Password='';User ID=sa;Initial Catalog=test;Data Source=server1"

と、testというデータベースがありその中に幾つかテーブルがあります。
このtestデータベースにないテーブルが必要になり、aaaデータベース内の
テーブルを結合しよう...続きを読む

Aベストアンサー

select * from tbl1,[aaa].[dbo].[tbl2]
のように、[データベース名].[オーナー].[テーブル名]の様式で指定すれば、良いかと思います。
(当然、権限の問題がない前提ですが・・)

QあるDBから別のDBのテーブルをselectしたい

mysqlのデータベースAとBが存在するとして、
Aをuseしている状態で、Bのデータベースのテーブルをselectするには、どのような構文でSQLを実行すればよいでしょうか。

Aベストアンサー

現在ログイン中ユーザー名で、B のデータベースへのアクセス権を持っているなら、table名の前にデータベース名を付けるだけですよ。
select * from B.tablename

show databases;
で、表示されるデータベースなら可能でしょう。

Qテーブルの参照方法

よろしくお願いします。
SQLServer2005についての質問です。
(OS:Windows Server 2003 SP1)

サーバが2台あり、どちらにもSQL Server 2005 がインストールされ
ています。一方のサーバ(サーバA)に存在するテーブルを他方の
サーバ(サーバB)からTSQLで参照するにはどのようにすれば良い
でしょうか?

各サーバで必要な設定と、実行するTSQLのイメージを教えてください。

基本的なことかもしれませんが、調べてもさっぱり判らず困っています。
(sqlcmdを使うようだというところはなんとなく判りました)
どうぞよろしくお願い致します。

Aベストアンサー

リンクサーバを構築しないでもできますよ。
Management Studioから、リンク元のサーバを右Clickし、
サーバのプロパティを表示させます。
そこに、「接続」というタブがあるんで、
「このサーバへのリモート接続を許可する」をCheckONにしておく
ことと、

SQL Serverをインストールすると、
[構成ツール]の配下に「SQL Server セキュリティ構成」もインストールされるので、「サービスと接続のセキュリティ構成」を
選んで、SQL Server 2005 Surface Area Configuration を
起動させます。

[リモート接続]というタブがあるので
[ローカル接続および[リモート接続]を選択し、
適切なTCPプロトコルを設定し、適用させて、SQL Serverのサービスを
再起動すれば可能です。

細かい点としては、SQL Server Browser Serviceの有効化や
SQL Serverのファイアウォール設定を行う必要があります。

詳しいことは、ご確認頂いていたサイトの日本語版が
http://support.microsoft.com/kb/914277/ja-jp
にもありますので、少しはわかりやすいかと思います。

なお、設定後のSQLアクセスは、
select * from [サーバAのサーバ名].[DB名].[スキーマ名(dbo等)].[テーブル名]
で接続可能です。

よろしくお願いします。

参考URL:http://support.microsoft.com/kb/914277/ja-jp

リンクサーバを構築しないでもできますよ。
Management Studioから、リンク元のサーバを右Clickし、
サーバのプロパティを表示させます。
そこに、「接続」というタブがあるんで、
「このサーバへのリモート接続を許可する」をCheckONにしておく
ことと、

SQL Serverをインストールすると、
[構成ツール]の配下に「SQL Server セキュリティ構成」もインストールされるので、「サービスと接続のセキュリティ構成」を
選んで、SQL Server 2005 Surface Area Configuration を
起動させます。

[リモー...続きを読む

QERROR1062:Duplicate entry.....というエラーが出てしまいました

いつもお世話になります。
データベースからSELECTで抽出したデータを別のテーブルにINSERTするSQLを実行したのですが、
ERROR1062:Duplicate entry.....というエラーが出てしまいました。
お詳しい方がいらっしゃいましたら、アドバイスをいただけませんでしょうか?よろしくお願いいたします。
【実行したSQL】
INSERT INTO tblA (dataA1, dataA2, dataA3, dataA4) SELECT "9001","AA",dataB1,dataB2 FROM tblB WHERE dataB1 = 52

tblAの主キー:dataA1とdataA2
tblBの主キー:dataB1

dataA1とdataA2はtblAの主キーとなっているため、重複してしまうということのようです。tblBの主キーはdataB1であるため、抽出されてくるデータは常に1件なので問題ないと期待していましたが、甘くなかったようです。何か良い方法はないものでしょうか?よろしくお願いいたします。

Aベストアンサー

「ERROR 1062」は、重複データを格納しようとした場合に出力されるエラーです。
既にdataA1='9001'&dataA2='AA'という行が、tblAに格納されているのですよね?

>抽出されてくるデータは常に1件なので問題ないと期待していました

「insert ~ select ~」を実行前に、既に同じデータが格納されているのでは?
あるいはprimary keyの指定が、質問中に記された通りでなく、2件以上検索されているかです。

>何か良い方法はないものでしょうか?

何をするための方法を、聞きたいのかが分かりませんが?

QSQLServer2005上の別DBからテーブルを読みたい

SQLServer2005で2つの異なるデータベース(ADB、BDB)が存在します。
ADBでBDBにあるテーブルを取得して検索をかけたいのですが、どのようにすれば実現できるのでしょうか。
BDBのVIEWを作成するイメージなんですが、リンクテーブルを設定するとかが必要になるのですか。
もしそうだとしたら、どうリンクテーブルを設定するのか教えてください。

Aベストアンサー

その2つのデータベースは同じインスタンスにいますか?
同じインスタンスにいるなら、
SELECT * FROM BDB.dbo.テーブル名
などで検索できます。

インスタンス自体が別ならリンクサーバを設定します。
サーバのリンク
http://msdn.microsoft.com/ja-jp/library/ms188279(SQL.90).aspx

もしくはアドホックリモートクエリを使う方法もあります。
ただし、OPENROWSETを使う場合は「SQL Server のセキュリティ構成」で利用を許可しないといけませんのでご留意ください。

QMysqlのデータベースのリンク

MysqlでSQlServerのようにデータベースのリンクはできますか?

異なるPCに存在する別々のMysqlのデータベースを同じコネクションで処理を行いたいです。

Aベストアンサー

 たしか、5.0からの機能だった思いますが、FEDERATED テーブルではどうですか?

 次のリンクは、5.1の該当箇所のマニュアルです。
 http://dev.mysql.com/doc/refman/5.1/ja/federated-storage-engine.html

QInner join と Left joinの明確な違いは?

Inner join と Left joinの違いがよくわかりません。
教えてください。

Aベストアンサー

出てくる結果が違います。

テーブル1のフィールド1に、






が、

テーブル2のフィールド1に、






が入力されている場合、

SELECT [テーブル1].[フィールド1], [テーブル2].[フィールド1]
FROM テーブル1 LEFT JOIN テーブル2 ON [テーブル1].[フィールド1]=[テーブル2].[フィールド1];
では、結果は、
テーブル1.フィールド1 テーブル2.フィールド1
1               1
2               2
3               3
4               NULL
5               NULL
6               NULL
の6レコードが出力されますが、

SELECT [テーブル1].[フィールド1], [テーブル2].[フィールド1]
FROM テーブル1 INNER JOIN テーブル2 ON [テーブル1].[フィールド1]=[テーブル2].[フィールド1];
では、結果は、
テーブル1.フィールド1 テーブル2.フィールド1
1               1
2               2
3               3
の3レコードしか出力されません。

出てくる結果が違います。

テーブル1のフィールド1に、






が、

テーブル2のフィールド1に、






が入力されている場合、

SELECT [テーブル1].[フィールド1], [テーブル2].[フィールド1]
FROM テーブル1 LEFT JOIN テーブル2 ON [テーブル1].[フィールド1]=[テーブル2].[フィールド1];
では、結果は、
テーブル1.フィールド1 テーブル2.フィールド1
1               1
2               2
3           ...続きを読む

Q「いずれか」と「いづれか」どっちが正しい!?

教えて下さいっ!
”どちらか”と言う意味の「いずれか」のかな表記として
「いずれか」と「いづれか」のどちらが正しいのでしょう???

私は「いずれか」だと思うんですが、辞書に「いずれか・いづ--。」と書いてあり、???になってしまいました。
どちらでもいいってことでしょうか?

Aベストアンサー

「いずれか」が正しいです.
「いづれ」は「いずれ」の歴史的かな遣いですので,昔は「いづれ」が使われていましたが,現代では「いずれ」で統一することになっていますので,「いずれ」が正しいです.


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング